> ## Documentation Index
> Fetch the complete documentation index at: https://docs.metabind.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Create API Key

> Create a new API key

Creates a new API key for a project. The key value is only returned once in the creation response and cannot be retrieved later.

## Path Parameters

<ParamField path="organizationId" type="string" required>
  Organization ID
</ParamField>

<ParamField path="projectId" type="string" required>
  Project ID
</ParamField>

## Request Body

<ParamField body="name" type="string" required>
  Descriptive name for the API key (e.g., "iOS Production App")
</ParamField>

<ParamField body="apiKey" type="string">
  Custom key value (optional, system-generated if not provided)
</ParamField>

### Example Request

```json theme={null}
{
  "name": "Android Production App"
}
```

## Response

Returns the created API Key object including the key value.

```json theme={null}
{
  "id": "afd8012b-d81e-41c6-92cd-eed0c6cb3676",
  "name": "Android Production App",
  "key": "7zvFJw9L0qEoYdKx2mBt1sLpZj3nX7gW",
  "status": "active",
  "createdAt": "2024-03-20T10:00:00Z",
  "updatedAt": "2024-03-20T10:00:00Z"
}
```

<Warning>
  Store the key value securely. This is the only time it will be returned. If lost, you must create a new API key.
</Warning>

## Error Responses

### Name Already Exists

```json theme={null}
{
  "error": {
    "code": "APIKEY_NAME_ALREADY_EXISTS",
    "message": "API key with name \"Android Production App\" already exists"
  }
}
```

## Code Examples

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST "https://api.metabind.ai/app/v1/organizations/org123/projects/proj456/api-keys" \
    -H "Authorization: Bearer YOUR_JWT" \
    -H "Content-Type: application/json" \
    -d '{
      "name": "Android Production App"
    }'
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch(
    'https://api.metabind.ai/app/v1/organizations/org123/projects/proj456/api-keys',
    {
      method: 'POST',
      headers: {
        'Authorization': 'Bearer YOUR_JWT',
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        name: 'Android Production App'
      })
    }
  );

  const apiKey = await response.json();
  // Store this key securely - it won't be shown again
  console.log(`Created API key: ${apiKey.key}`);
  ```

  ```swift Swift theme={null}
  struct CreateAPIKeyRequest: Encodable {
      let name: String
  }

  var request = URLRequest(url: URL(string: "https://api.metabind.ai/app/v1/organizations/org123/projects/proj456/api-keys")!)
  request.httpMethod = "POST"
  request.setValue("Bearer YOUR_JWT", forHTTPHeaderField: "Authorization")
  request.setValue("application/json", forHTTPHeaderField: "Content-Type")

  let body = CreateAPIKeyRequest(name: "iOS Production App")
  request.httpBody = try JSONEncoder().encode(body)

  let (data, _) = try await URLSession.shared.data(for: request)
  let apiKey = try JSONDecoder().decode(APIKey.self, from: data)
  // Store apiKey.key securely
  ```

  ```kotlin Kotlin theme={null}
  val response = client.post("https://api.metabind.ai/app/v1/organizations/org123/projects/proj456/api-keys") {
      header("Authorization", "Bearer YOUR_JWT")
      contentType(ContentType.Application.Json)
      setBody(mapOf("name" to "Android Production App"))
  }

  val apiKey = response.body<APIKey>()
  // Store apiKey.key securely - it won't be shown again
  println("Created API key: ${apiKey.key}")
  ```
</CodeGroup>
