> For the complete documentation index, see [llms.txt](https://docs.roboflow.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.roboflow.com/reference/hi/authentication/authentication/manage-api-keys.md).

# API Keys प्रबंधित करें

## के बारे में

आप Roboflow API का उपयोग करके अपने workspace की API keys को प्रोग्रामेटिक रूप से प्रबंधित कर सकते हैं - नई keys बनाना, मौजूदा keys की सूची बनाना और उनका निरीक्षण करना, उनका नाम बदलना, metadata जोड़ना, उन्हें disable करना, protect करना और revoke करना।

यह वही सतह है जिसका उपयोग [`roboflow api-key` CLI](#cli) और [Roboflow MCP सर्वर](https://docs.roboflow.com/agents/mcp-server)द्वारा किया जाता है, इसलिए एक स्वचालित agent बिना किसी मानव के dashboard से copy-paste किए, application को ज़रूरी key provision कर सकता है।

{% hint style="info" %}
**Secrets एक बार लिखे जाते हैं।** पूरा key मान वापस लौटाया जाता है **केवल** जब आप कोई key बनाते हैं (या roll करते हैं)। बाकी सभी endpoints एक non-secret `keyId` handle और एक छोटा `prefix` पहचान के लिए लौटाते हैं - स्वयं key कभी नहीं। मान को सुरक्षित रूप से संग्रहीत करें (जैसे कि एक `.gitignore`'d `.env`) निर्माण के समय।
{% endhint %}

## HTTP API

### प्रमाणीकरण

अपनी API key को `api_key` query पैरामीटर के रूप में या एक `Authorization: Bearer <api_key>` हेडर के रूप में भेजें, ठीक वैसे ही जैसे हर दूसरे REST endpoint के साथ होता है (देखें [REST API से प्रमाणीकरण करें](/reference/hi/platform/rest-api/authenticate-with-the-rest-api.md))। प्रयोग में लाई जा रही key पाथ में दिए गए workspace की ही होनी चाहिए।

ये endpoints Roboflow की [भूमिकाओं और अनुमतियों](/reference/hi/authentication/authentication/scoped-api-keys.md)का सम्मान करते हैं। जब caller एक **OAuth token हो जो किसी user की ओर से कार्य कर रहा हो**, तो संबंधित RBAC क्रियाएँ (`create_api_key`, `update_api_key`, `revoke_api_key`, `get_api_key`, `view_workspace_api_keys`) डिफ़ॉल्ट रूप से workspace **मालिकों/एडमिनों**पर सेट होती हैं। scoped key (या किसी user की ओर से कार्य कर रहे OAuth token) के साथ की गई request केवल वही abilities बना या दे सकती है जो caller के पास पहले से हों - देखें [विशेषाधिकार उपसमुच्चय नियम](#privilege-subset-rules).

जब caller एक **scoped (non-OAuth) private key**हो, तो उसमें अतिरिक्त रूप से वह [scope](/reference/hi/authentication/authentication/sign-in-with-roboflow-getting-started.md#available-scopes) होना चाहिए जो endpoint से मेल खाता हो:

| एंडपॉइंट              | आवश्यक स्कोप     |
| --------------------- | ---------------- |
| `GET` सूची / `GET` एक | `api-key:read`   |
| `POST` बनाएँ          | `api-key:create` |
| `PATCH` अपडेट         | `api-key:update` |
| `DELETE` revoke       | `api-key:revoke` |
| `GET` publishable     | `workspace:read` |

एक unscoped (full-access) private key इनमें से सभी शर्तें पहले से पूरी करती है। आवश्यक स्कोप के बिना key को ऐसे माना जाता है जैसे route अस्तित्व में ही नहीं है - देखें [त्रुटियाँ](#errors).

{% hint style="warning" %}
एक [publishable key](#the-publishable-key) (`rf_<workspaceId>`) **नहीं** इन management endpoints के लिए authentication के रूप में स्वीकार की जाती है। किसी private key से authenticate करें।
{% endhint %}

### API Keys की सूची

<mark style="color:हरा;">`GET`</mark> `/:workspace/api-keys`

workspace की API keys (masked) की सूची बनाता है और workspace की publishable key लौटाता है।

**क्वेरी**

<table data-search="false"><thead><tr><th width="180">नाम</th><th width="140">प्रकार</th><th>विवरण</th><th data-type="checkbox">आवश्यक</th></tr></thead><tbody><tr><td><code>api_key</code></td><td>स्ट्रिंग</td><td>workspace के लिए एक private API key।</td><td>true</td></tr><tr><td><code>includeDisabled</code></td><td>बूलियन</td><td>परिणाम में disabled keys शामिल करें (डिफ़ॉल्ट <code>false</code>).</td><td>false</td></tr><tr><td><code>includeFolders</code></td><td>बूलियन</td><td>folder-scoped keys के लिए folder विवरण भरें (डिफ़ॉल्ट <code>false</code>).</td><td>false</td></tr></tbody></table>

**उदाहरण अनुरोध**

```bash
curl --location 'https://api.roboflow.com/<workspace_id>/api-keys?api_key=$ROBOFLOW_API_KEY'
```

**प्रतिक्रिया**

{% tabs %}
{% tab title="200" %}

```json
{
  "apiKeys": [
    {
      "keyId": "9f8c1a2b3d4e5f60",
      "name": "production-server",
      "prefix": "abcd",
      "scopes": ["model:infer"],
      "folderIds": [],
      "default": false,
      "protected": true,
      "disabled": false,
      "created_on": "2026-06-19T18:24:01.000Z",
      "created_by": "user_abc123",
      "custom_metadata": { "env": "prod" }
    }
  ],
  "publishableKey": "rf_<workspace_id>"
}
```

{% endtab %}
{% endtabs %}

नोट्स:

* `keyId` एक स्थिर, non-secret handle है जिसका उपयोग अन्य endpoints में किसी key को address करने के लिए किया जाता है।
* `scopes` है `null` एक unscoped (full-access) key के लिए, या एक [scope strings की array](/reference/hi/authentication/authentication/sign-in-with-roboflow-getting-started.md#available-scopes) scoped key के लिए।
* `created_on` (ISO 8601) और `created_by` केवल उन्हीं keys के लिए शामिल होते हैं जिनके ये मान रिकॉर्ड किए गए हों। इस attribution को ट्रैक करने से पहले बनी पुरानी keys में ये नहीं होते।
* `created_by` है एक **अस्पष्ट** identifier कि key किसने बनाई - एक user id, `api_key:<handle>` (जब key किसी दूसरी API key द्वारा बनाई गई हो), या `SYSTEM` (किसी स्वचालित प्रक्रिया द्वारा बनाया गया)। इसे display/audit string की तरह मानें; इसे parse न करें।
* `custom_metadata` शामिल किया जाता है **केवल** जब workspace की योजना में Advanced API Keys शामिल हों। उस feature के बिना यह field पूरी तरह अनुपस्थित रहती है (यहाँ तक कि उन keys के लिए भी जिनमें metadata है)।

### एकल API Key प्राप्त करें

<mark style="color:हरा;">`GET`</mark> `/:workspace/api-keys/:keyId`

एक key के लिए masked metadata लौटाता है, जिसका पता उसके `keyId` handle.

**उदाहरण अनुरोध**

```bash
curl --location 'https://api.roboflow.com/<workspace_id>/api-keys/<key_id>?api_key=$ROBOFLOW_API_KEY'
```

**प्रतिक्रिया**

{% tabs %}
{% tab title="200" %}

```json
{ "apiKey": { "keyId": "9f8c1a2b3d4e5f60", "name": "production-server", "prefix": "abcd", "scopes": ["model:infer"], "folderIds": [], "default": false, "protected": true, "disabled": false, "created_on": "2026-06-19T18:24:01.000Z", "created_by": "user_abc123" } }
```

{% endtab %}

{% tab title="404" %}
ऐसी कोई key नहीं `keyId` workspace में मौजूद है (या उसे revoke कर दिया गया है), **या** credential के पास `api-key:read` scope नहीं है / वह ऐसे workspace को target करता है जिसका वह हिस्सा नहीं है। अनुमति वाले मामले में object-आकार की त्रुटि लौटती है `{"error": {"message", "type", "hint"}}`; अज्ञात `keyId` लौटाता है `{"error": "string"}`. देखें [त्रुटियाँ](#errors).
{% endtab %}
{% endtabs %}

### API Key बनाएँ

<mark style="color:हरा;">`POST`</mark> `/:workspace/api-keys`

एक नई API key बनाता है। secret मान लौटाया जाता है **एक बार** में `key` field में।

**हेडर**

| नाम          | मान                |
| ------------ | ------------------ |
| Content-Type | `application/json` |

**बॉडी**

<table data-search="false"><thead><tr><th width="180">नाम</th><th width="200">प्रकार</th><th>विवरण</th><th data-type="checkbox">आवश्यक</th></tr></thead><tbody><tr><td><code>name</code></td><td>स्ट्रिंग</td><td>key के लिए मानव-अनुकूल label।</td><td>false</td></tr><tr><td><code>scopes</code></td><td>Array&#x3C;string> | null</td><td>key को इन तक सीमित करें <a href="/pages/63ba9b3ef11e0798f3a14b2189269c887bd3367c#available-scopes">scopes</a>। नीचे दिए गए तीन state देखें। <strong>Advanced API Keys आवश्यक हैं।</strong></td><td>false</td></tr><tr><td><code>folderIds</code></td><td>Array&#x3C;string></td><td>key को इन project folders तक सीमित करें। <strong>Advanced API Keys आवश्यक हैं।</strong></td><td>false</td></tr><tr><td><code>custom_metadata</code></td><td>Map&#x3C;string, string></td><td>अधिकतम 20 key/value जोड़े (keys ≤100 chars, values ≤500 chars)। <strong>Advanced API Keys आवश्यक हैं।</strong></td><td>false</td></tr><tr><td><code>protected</code></td><td>बूलियन</td><td>key को एक <a href="#protecting-a-key">protected</a> state में बनाएँ।</td><td>false</td></tr></tbody></table>

{% hint style="info" %}
**`scopes` create पर:**

* **छोड़ा गया** - नई key **caller credential के अपने scopes विरासत में लेती है** ("मेरी जैसी key बनाएँ"). यह plan-independent है: full-access key full-access key बनाती है; scoped key समान scopes वाली key बनाती है; folders भी इसी तरह विरासत में मिलते हैं। एक script जो `scopes` को छोड़ देती है, वह समान व्यवहार करती है चाहे workspace में Advanced API Keys feature हो या न हो।
* **`null`** - एक स्पष्ट **full-access** (unscoped) key। caller के पास स्वयं full access होना चाहिए (scoped caller अस्वीकार कर दिया जाता है - देखें [उपसमुच्चय नियम](#privilege-subset-rules)).
* **`[]`** (खाली array) - एक वैध key जिसके पास **कोई abilities नहीं**; हर scoped route इसे अस्वीकार करता है। बाद में scopes देने के लिए placeholder के रूप में उपयोगी।
* **`["model:infer", …]`** - **scoped** ठीक उन्हीं abilities तक (एक [section name](/reference/hi/authentication/authentication/sign-in-with-roboflow-getting-started.md#available-scopes) जैसे `model` उस section के सभी scopes देता है)।
* **`["role:reviewer", …]`** - एक [**role preset**](/reference/hi/authentication/authentication/scoped-api-keys.md): create समय पर उस role के scopes में विस्तारित हो जाता है। किसी built-in role (`labeler`, `reviewer`, `owner`) या किसी custom role के नाम का उपयोग करें; `role:owner` का अर्थ full access है। इसे explicit scopes के साथ जोड़ा जा सकता है।

एक स्पष्ट `scopes` **array** (`[]`, एक सूची, या एक `role:` (preset), `folderIds`, या `custom_metadata` के लिए **Advanced API Keys** plan feature आवश्यक है (अन्यथा `403`)। Omitting `scopes` (inherit) और `null` (full) की आवश्यकता नहीं होती - इसलिए default हर plan पर काम करता है।
{% endhint %}

**उदाहरण अनुरोध**

```bash
curl --location 'https://api.roboflow.com/<workspace_id>/api-keys?api_key=$ROBOFLOW_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
    "name": "production-server",
    "scopes": ["model:infer"]
}'
```

**प्रतिक्रिया**

{% tabs %}
{% tab title="201" %}

```json
{
  "keyId": "9f8c1a2b3d4e5f60",
  "key": "AbCdEf0123456789xyz",
  "name": "production-server",
  "scopes": ["model:infer"],
  "folderIds": [],
  "protected": false,
  "publishableKey": "rf_<workspace_id>"
}
```

{% endtab %}

{% tab title="403" %}
caller को keys बनाने की अनुमति है, लेकिन वह अपने पास मौजूद सीमाओं से परे scopes/folders देने का अनुरोध कर रहा है, या workspace योजना में अनुरोधित advanced feature शामिल नहीं है। बॉडी: `{"error": "string"}`.
{% endtab %}

{% tab title="404" %}
credential के पास `api-key:create` scope नहीं है, या वह ऐसे workspace को target करता है जिसका वह हिस्सा नहीं है। बॉडी: `{"error": {"message", "type", "hint"}}`. देखें [त्रुटियाँ](#errors).
{% endtab %}
{% endtabs %}

{% hint style="danger" %}
field secret मान है और `key` इस प्रतिक्रिया में दिखाया जाता है। इसे अभी सहेज लें; आप इसे फिर से प्राप्त नहीं कर सकते। **केवल** इस
{% endhint %}

### एक API Key अपडेट करें

<mark style="color:नीला;">`PATCH`</mark> `/:workspace/api-keys/:keyId`

एक key का नाम, scopes, या metadata अपडेट करता है; उसे protect करता है; या उसे enable/disable करता है।

**हेडर**

| नाम          | मान                |
| ------------ | ------------------ |
| Content-Type | `application/json` |

**बॉडी** (केवल वही field भेजें जिन्हें आप बदलना चाहते हैं)

<table data-search="false"><thead><tr><th width="180">नाम</th><th width="200">प्रकार</th><th>विवरण</th><th data-type="checkbox">आवश्यक</th></tr></thead><tbody><tr><td><code>name</code></td><td>स्ट्रिंग</td><td>नया प्रदर्शन नाम।</td><td>false</td></tr><tr><td><code>scopes</code></td><td>Array&#x3C;string> | null</td><td>नया <a href="/pages/63ba9b3ef11e0798f3a14b2189269c887bd3367c#available-scopes">scopes</a> (caller के उपसमुच्चय का)। नीचे दिए गए तीन state देखें। <strong>Advanced API Keys आवश्यक हैं।</strong></td><td>false</td></tr><tr><td><code>custom_metadata</code></td><td>Map&#x3C;string, string></td><td>key के metadata को बदल देता है। <strong>Advanced API Keys आवश्यक हैं।</strong></td><td>false</td></tr><tr><td><code>protected</code></td><td><code>true</code></td><td>key को protect करें। API <strong>unprotect नहीं कर सकता</strong> - नीचे देखें।</td><td>false</td></tr><tr><td><code>disabled</code></td><td>बूलियन</td><td>Disable (<code>true</code>) या पुनः सक्षम करें (<code>false</code>) key को। <strong>Advanced API Keys आवश्यक हैं।</strong></td><td>false</td></tr></tbody></table>

{% hint style="info" %}
**के तीन state `scopes`** (PATCH semantics create से थोड़े अलग हैं - किसी field को छोड़ देने पर वह अपरिवर्तित रहती है):

* **छोड़ा गया** - key के मौजूदा scopes **जैसे के तैसे रहते हैं**.
* **`null`** - key बन जाती है **full access** (unscoped)। इसे देने के लिए caller के पास स्वयं full access होना चाहिए।
* **`[]`** (खाली array) - key के पास वैध credential रहता है लेकिन **कोई abilities नहीं**.
* **`["model:infer", …]`** - **बदल देता है** key के scopes को ठीक इसी set से (एक [section name](/reference/hi/authentication/authentication/sign-in-with-roboflow-getting-started.md#available-scopes) उस section के सभी scopes में विस्तारित होता है)।

भेजने पर `scopes` (**जिसमें `[]` या `null`**), `custom_metadata`, या `disabled` के लिए **Advanced API Keys** plan feature शामिल है।
{% endhint %}

**उदाहरण अनुरोध**

```bash
curl --location --request PATCH 'https://api.roboflow.com/<workspace_id>/api-keys/<key_id>?api_key=$ROBOFLOW_API_KEY' \
--header 'Content-Type: application/json' \
--data '{ "name": "renamed-key" }'
```

**प्रतिक्रिया**

{% tabs %}
{% tab title="200" %}

```json
{ "apiKey": { "keyId": "9f8c1a2b3d4e5f60", "name": "renamed-key", "prefix": "abcd", "scopes": ["model:infer"], "folderIds": [], "default": false, "protected": false, "disabled": false } }
```

{% endtab %}

{% tab title="403" %}
यदि आप भेजते हैं तो लौटाया जाता है `"protected": false` (API किसी key को unprotect नहीं कर सकती), या यदि आप ऐसे scopes माँगते हैं जिन्हें caller दे नहीं सकता। बॉडी: `{"error": "string"}`.
{% endtab %}

{% tab title="404" %}
ऐसी कोई key नहीं `keyId` workspace में (बॉडी: `{"error": "string"}`), **या** credential के पास `api-key:update` scope / ऐसे workspace को target करता है जिसका वह हिस्सा नहीं है (बॉडी: `{"error": {"message", "type", "hint"}}`)। देखें [त्रुटियाँ](#errors).
{% endtab %}

{% tab title="409" %}
यदि आप उस key को disable करने की कोशिश करते हैं जो अभी [protected](#protecting-a-key).
{% endtab %}
{% endtabs %}

### एक API Key revoke करें

<mark style="color:लाल;">`DELETE`</mark> `/:workspace/api-keys/:keyId`

एक key को revoke (स्थायी रूप से निष्क्रिय) करता है। इसे उपयोग करने वाले मौजूदा applications तुरंत authenticate करने में विफल हो जाएँगे।

**उदाहरण अनुरोध**

```bash
curl --location --request DELETE 'https://api.roboflow.com/<workspace_id>/api-keys/<key_id>?api_key=$ROBOFLOW_API_KEY'
```

**प्रतिक्रिया**

{% tabs %}
{% tab title="200" %}

```json
{ "status": "revoked", "keyId": "9f8c1a2b3d4e5f60" }
```

{% endtab %}

{% tab title="409" %}
key [protected](#protecting-a-key)है। पहले इसे Roboflow dashboard में unprotect करें।
{% endtab %}
{% endtabs %}

### एक Key को Protect करना

एक **protected** को API, CLI, MCP सर्वर, *या* dashboard - जब तक वह unprotected न हो जाए, disable या revoke नहीं किया जा सकता। इसका उपयोग किसी automated agent को गलती से production key बंद करने से रोकने के लिए करें।

* **Protect:** `PATCH` के साथ `{ "protected": true }`.
* **Unprotect:** किया जा सकता है **केवल** dashboard में [. API/CLI/MCP जानबूझकर किसी key को unprotect नहीं कर सकते, ताकि कोई compromised या over-eager agent सुरक्षा हटाकर फिर एक ही बार में key revoke न कर दे।](https://app.roboflow.com/settings/api).

### Publishable Key

हर workspace के पास एक **publishable key** होती है जो `rf_<workspaceId>`के रूप में होती है। यह है:

* **कोई secret नहीं** - client-side / browser code में डालने के लिए सुरक्षित (जैसे [inferencejs](https://docs.roboflow.com/deployment/self-hosted/sdks/web-browser)).
* **केवल inference + model-download** - यह data manage, train, या keys manage नहीं कर सकती।
* **स्थायी** - यह workspace ID से व्युत्पन्न होती है, इसलिए इसे create, rotate, या revoke नहीं किया जा सकता।

इसे `publishableKey` field से list/create प्रतिक्रियाओं में, या सीधे यहाँ से पढ़ें:

<mark style="color:हरा;">`GET`</mark> `/:workspace/api-keys/publishable`

```bash
curl --location 'https://api.roboflow.com/<workspace_id>/api-keys/publishable?api_key=$ROBOFLOW_API_KEY'
# { "publishableKey": "rf_<workspace_id>" }
```

Browser/edge inference के लिए publishable key का उपयोग करें और server-side कार्य के लिए scoped private key का उपयोग करें। ध्यान दें कि publishable key रखने वाला कोई भी व्यक्ति उस workspace के models पर inference चला सकता है (और उन्हें डाउनलोड कर सकता है) - यही एक "publishable" credential की intended trade-off है।

### विशेषाधिकार उपसमुच्चय नियम

विशेषाधिकार वृद्धि को रोकने के लिए, नया बनाया गया या अपडेट किया गया key कभी भी उसे बनाने वाले credential से अधिक क्षमताएँ नहीं रख सकता:

* जब आप इन endpoints को एक **स्कोप्ड प्राइवेट कुंजी**, तो नई कुंजी के `scopes` उसके स्कोप कॉलिंग कुंजी के स्कोप का उपसमुच्चय होने चाहिए, और उसके `folderIds` कॉलिंग कुंजी के फ़ोल्डरों का उपसमुच्चय होने चाहिए। बिना-स्कोप वाली (पूर्ण-पहुँच) कुंजी कुछ भी दे सकती है।
* जब आप उन्हें एक **OAuth token हो जो किसी user की ओर से कार्य कर रहा हो**, तो अनुरोधित स्कोपों की अतिरिक्त रूप से उस उपयोगकर्ता की भूमिका के विरुद्ध जाँच की जाती है — आप केवल वही क्षमताएँ दे सकते हैं जिनकी आपकी भूमिका अनुमति देती है।

कॉल करने वाला जितना दे सकता है उससे अधिक अनुरोधों पर यह लौटता है `403`.

### त्रुटियाँ

| स्थिति | अर्थ                                                                                                                                                                                                                                                                           | त्रुटि का स्वरूप                                                                                                      |
| ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------- |
| `400`  | अमान्य अनुरोध बॉडी (उदा., अज्ञात स्कोप, गलत-स्वरूपित मेटाडेटा)।                                                                                                                                                                                                                | `{"error": "string"}`                                                                                                 |
| `403`  | कॉल करने वाले को इस route के लिए अनुमति है, लेकिन उसने **अपनी धारित क्षमताओं से अधिक क्षमताएँ देने को कहा** (कॉल करने वाले से अधिक स्कोप/फ़ोल्डर), प्लान में Advanced API Keys नहीं हैं, या API के माध्यम से unprotect करने का प्रयास।                                         | `{"error": "string"}`                                                                                                 |
| `404`  | या तो उस `keyId` नाम/आईडी वाली कोई कुंजी workspace में मौजूद नहीं है, **या** प्रमाण-पत्र में उस scope का अभाव है जिसकी route को आवश्यकता है, **या** यह ऐसे workspace को लक्षित करता है जिससे कुंजी संबंधित नहीं है। Roboflow जानबूझकर यह छिपाता है कि संसाधन मौजूद है या नहीं। | `{"error": {"message", "type", "hint"}}` अनुमति/workspace वाले मामले के लिए; `{"error": "string"}` एक अज्ञात `keyId`. |
| `409`  | कुंजी सुरक्षित है और उसे disable/revoke नहीं किया जा सकता।                                                                                                                                                                                                                     | `{"error": "string"}`                                                                                                 |

{% hint style="warning" %}
**त्रुटि बॉडी के दो स्वरूप।** अधिकांश endpoints एक **स्ट्रिंग** त्रुटि — `{"error": "Some message"}`. प्रमाणीकरण/अनुमति परत इसके बजाय एक **ऑब्जेक्ट** - `{"error": {"message": "…", "type": "…", "hint": "…"}}` (अनुमति/गलत-workspace `404` ऊपर वाले मामले में, और गुम या अमान्य कुंजी के लिए `401`). ऐसे consumers लिखें जो संभालें **दोनों** स्वरूपों को।
{% endhint %}

एक आम gotcha: ऐसा अनुरोध जिसकी credential में route का scope केवल नहीं है, यह लौटाता है **`404`**, न कि `403`। `403` का मतलब है कि कॉल *है* कुंजियों को प्रबंधित करने की अनुमति थी, लेकिन उसने कॉल करने वाले के पास मौजूद से अधिक देने की कोशिश की।

देखें [त्रुटियाँ और स्थिति कोड](/reference/hi/errors-and-status-codes.md) सामान्य त्रुटि प्रारूप के लिए।

## CLI

field secret मान है और `roboflow api-key` command group आपको टर्मिनल से अपने workspace की API keys प्रबंधित करने देता है। यह [API key REST endpoints](#http-api) और आपके CLI config से workspace और credentials का उपयोग करता है (देखें [CLI को इंस्टॉल और सेट अप करें](/reference/hi/platform/cli/install-and-set-up-the-cli.md)).

{% hint style="info" %}
पूरा गुप्त मान दिखाया जाता है **केवल** जब आप कोई कुंजी बनाते हैं। इसे तुरंत सहेज लें — list/get इसे दोबारा कभी नहीं दिखाते।
{% endhint %}

```bash
roboflow api-key --help
```

| कमांड         | विवरण                                                |
| ------------- | ---------------------------------------------------- |
| `list`        | workspace की API keys सूचीबद्ध करें।                 |
| `get`         | एक कुंजी का विवरण दिखाएँ।                            |
| `बनाएँ`       | एक नई कुंजी बनाएँ (गुप्त मान एक बार प्रिंट होता है)। |
| `अपडेट`       | कुंजी का नाम, scopes, या metadata अपडेट करें।        |
| `protect`     | कुंजी को सुरक्षित के रूप में चिह्नित करें।           |
| `disable`     | कुंजी को disable या re-enable करें।                  |
| `revoke`      | कुंजी को स्थायी रूप से revoke करें।                  |
| `publishable` | workspace की publishable key प्रिंट करें।            |

जोड़ें `--json` (एक global flag, कमांड से पहले) ताकि scripting के लिए machine-readable output मिले, जैसे `roboflow --json api-key list`.

### कुंजियाँ सूचीबद्ध करें

```bash
roboflow api-key list
roboflow api-key list --include-disabled --include-folders
```

### एक कुंजी प्राप्त करें

कुंजियाँ उनके द्वारा संबोधित की जाती हैं `keyId` (गैर-गुप्त handle जो इसमें दिखाया जाता है `list`):

```bash
roboflow api-key get <key_id>
```

### एक कुंजी बनाएँ

```bash
# कॉल करने वाले credential के scopes विरासत में लेता है (जब कॉल करने वाला full-access हो, तो full-access key)
roboflow api-key create "my-app"

# Scoped key ( --scope दोहराएँ; Advanced API Keys आवश्यक हैं)
roboflow api-key create "inference-only" --scope model:infer

# Role preset - एक RBAC role के scopes दें (built-in या custom role name);
# explicit scopes के साथ जोड़ा जा सकता है। role:owner का मतलब full access है।
roboflow api-key create "reviewer-bot" --scope role:reviewer --scope model:infer

# Folder-scoped + protected
roboflow api-key create "edge-device" --folder <folder_id> --protected

# metadata जोड़ें ( --metadata दोहराएँ; Advanced API Keys आवश्यक हैं)
roboflow api-key create "ci-key" --metadata team=vision --metadata env=prod
```

गुप्त मान एक बार प्रिंट होता है। इसे किसी script में कैप्चर करने के लिए उपयोग करें `--json` और pipe करें `jq`:

```bash
roboflow --json api-key create "ci-key" | jq -r .key > .env.key
```

{% hint style="warning" %}
`--scope`, `--folder`, और `--metadata` Advanced API Keys plan feature की आवश्यकता होती है, और आप केवल वही क्षमताएँ दे सकते हैं जो कमांड चला रहा credential पहले से रखता है।
{% endhint %}

### कुंजी अपडेट करें

```bash
# नाम बदलें
roboflow api-key update <key_id> --name "renamed-key"

# कुंजी के scopes बदलें ( --scope दोहराएँ)
roboflow api-key update <key_id> --scope model:infer --scope project:read

# कुंजी का metadata बदलें ( --metadata दोहराएँ)
roboflow api-key update <key_id> --metadata team=vision --metadata env=prod
```

`--scope` **बदल देता है** कुंजी के मौजूदा scopes को ठीक उसी set से बदल देता है जो आप पास करते हैं, और `--metadata` कुंजी का metadata बदल देता है। भेजें `--name` अकेले ताकि दोनों में से किसी को भी छुए बिना नाम बदला जा सके।

{% hint style="warning" %}
scopes या metadata बदलने के लिए **Advanced API Keys** plan feature की आवश्यकता होती है (के साथ नाम बदलने के लिए `--name` की आवश्यकता नहीं होती)। जैसा कि `बनाएँ`, आप केवल वही scopes दे सकते हैं जो कमांड चला रहा credential पहले से रखता है।
{% endhint %}

### कुंजी को protect / unprotect करें

```bash
roboflow api-key protect <key_id>
```

एक protected key को CLI, API, या MCP के माध्यम से disable या revoke नहीं किया जा सकता। **Unprotecting केवल इसमें किया जा सकता है** [**. API/CLI/MCP जानबूझकर किसी key को unprotect नहीं कर सकते, ताकि कोई compromised या over-eager agent सुरक्षा हटाकर फिर एक ही बार में key revoke न कर दे।**](https://app.roboflow.com/settings/api) - जानबूझकर कोई `unprotect` command नहीं है, इसलिए एक automated workflow एक ही चरण में सुरक्षा नहीं हटा सकता और production key revoke नहीं कर सकता।

### कुंजी को disable / re-enable करें

```bash
roboflow api-key disable <key_id>            # disable
roboflow api-key disable <key_id> --enable   # re-enable
```

Disabled keys को API अस्वीकार कर देती है, लेकिन उन्हें re-enable किया जा सकता है। एक protected key को disable नहीं किया जा सकता।

{% hint style="warning" %}
`roboflow api-key disable` (और इसके साथ re-enable करना `--enable`) के लिए **Advanced API Keys** plan feature की आवश्यकता होती है, ठीक वैसे ही जैसे scoped `बनाएँ` के साथ `--scope`/`--folder`. यह इसके अनुरूप है [REST API](#update-an-api-key).
{% endhint %}

### कुंजी revoke करें

```bash
roboflow api-key revoke <key_id>          # prompts for confirmation
roboflow api-key revoke <key_id> --yes    # skip the prompt (for scripts)
```

Revoking स्थायी है। एक protected key को CLI से revoke नहीं किया जा सकता — पहले dashboard में उसका unprotect करें।

### publishable key प्राप्त करें

```bash
roboflow api-key publishable
roboflow --json api-key publishable | jq -r .publishableKey
```

publishable key (`rf_<workspaceId>`) गैर-गुप्त है और browser / में embed करने के लिए सुरक्षित है [inferencejs](https://docs.roboflow.com/deployment/self-hosted/sdks/web-browser) code. यह केवल inference के लिए है और इसे बनाया या revoke नहीं किया जा सकता। देखें [Publishable Key](#the-publishable-key) विवरण के लिए।

## MCP Server

अपने AI agent को इससे जोड़ें [MCP Server](https://docs.roboflow.com/agents/mcp-server) और यह इन tools के साथ API keys प्रबंधित कर सकता है:

<table data-search="false"><thead><tr><th width="290">टूल</th><th>विवरण</th></tr></thead><tbody><tr><td><code>api_keys_list</code></td><td>workspace की सभी API keys सूचीबद्ध करें।</td></tr><tr><td><code>api_keys_get</code></td><td>एकल कुंजी के लिए metadata प्राप्त करें।</td></tr><tr><td><code>api_keys_get_publishable</code></td><td>workspace की publishable key प्राप्त करें।</td></tr><tr><td><code>api_keys_create</code></td><td>एक नई API key बनाएँ।</td></tr><tr><td><code>api_keys_update</code></td><td>कुंजी का नाम, scopes, या metadata अपडेट करें।</td></tr><tr><td><code>api_keys_disable</code></td><td>कुंजी को revoke किए बिना disable या re-enable करें।</td></tr><tr><td><code>api_keys_revoke</code></td><td>कुंजी को स्थायी रूप से revoke करें।</td></tr></tbody></table>
