Create an API key
Create an API key for a project to authenticate Data Plane and Control Plane requests.
/admin/projects/{project_id}/api-keysCreate an API key
2 parameters
- X-Pinecone-Api-Versionstringheaderrequired
Required date-based version header
- project_idstringpathrequired
Project ID
curl --request POST \
--url https://api.pinecone.io/admin/projects/{project_id}/api-keys \
--header 'Authorization: Bearer <token>' \
--header 'X-Pinecone-Api-Version: <x-pinecone-api-version>' \
--header 'Content-Type: application/json' \
--data '{
"name": "devkey",
"roles": [
"ProjectEditor"
]
}'import requests
url = "https://api.pinecone.io/admin/projects/{project_id}/api-keys"
payload = {
"name": "devkey",
"roles": [
"ProjectEditor"
]
}
headers = {
"Authorization": "Bearer <token>",
"X-Pinecone-Api-Version": "<x-pinecone-api-version>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {method: "POST", headers: {"Authorization": "Bearer <token>", "X-Pinecone-Api-Version": "<x-pinecone-api-version>", "Content-Type": "application/json"}, body: JSON.stringify({
"name": "devkey",
"roles": [
"ProjectEditor"
]
})};
fetch("https://api.pinecone.io/admin/projects/{project_id}/api-keys", options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.pinecone.io/admin/projects/{project_id}/api-keys",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "{\"name\":\"devkey\",\"roles\":[\"ProjectEditor\"]}",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"X-Pinecone-Api-Version: <x-pinecone-api-version>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.pinecone.io/admin/projects/{project_id}/api-keys"
payload := strings.NewReader("{\"name\":\"devkey\",\"roles\":[\"ProjectEditor\"]}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("X-Pinecone-Api-Version", "<x-pinecone-api-version>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.pinecone.io/admin/projects/{project_id}/api-keys")
.header("Authorization", "Bearer <token>")
.header("X-Pinecone-Api-Version", "<x-pinecone-api-version>")
.header("Content-Type", "application/json")
.body("{\"name\":\"devkey\",\"roles\":[\"ProjectEditor\"]}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.pinecone.io/admin/projects/{project_id}/api-keys")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["X-Pinecone-Api-Version"] = '<x-pinecone-api-version>'
request["Content-Type"] = 'application/json'
request.body = "{\"name\":\"devkey\",\"roles\":[\"ProjectEditor\"]}"
response = http.request(request)
puts response.read_body{
"key": {
"id": "<string>",
"name": "<string>",
"project_id": "<string>",
"roles": [
"ProjectEditor"
]
},
"value": "<string>"
}{
"error": {
"code": "INVALID_ARGUMENT",
"message": "Bad request. The request body included invalid request parameters."
},
"status": 400
}{
"error": {
"code": "UNAUTHENTICATED",
"message": "Invalid API key."
},
"status": 401
}{
"error": {
"code": "QUOTA_EXCEEDED",
"message": "The index exceeds the project quota of 5 pods by 2 pods. Upgrade your account or change the project settings to increase the quota."
},
"status": 429
}{
"error": {
"code": "UNKNOWN",
"message": "Internal server error"
},
"status": 500
}{
"error": {
"code": "QUOTA_EXCEEDED",
"message": "The index exceeds the project quota of 5 pods by 2 pods. Upgrade your account or change the project settings to increase the quota."
},
"status": 429
}Authorizations
Section titled “Authorizations”AuthorizationstringrequiredAn access token must be provided in the Authorization header using the Bearer scheme.
Headers
Section titled “Headers”X-Pinecone-Api-VersionstringrequiredRequired date-based version header
Path Parameters
Section titled “Path Parameters”project_idstringrequiredProject ID
The details of the new API key.
namestringrequiredThe name of the API key. The name must be 1-80 characters long.
Required string length: 1 - 80. Example: devkey
roles?string[]The roles to create the API key with. Default is ['ProjectEditor'].
Response
Section titled “Response”201 — API key created successfully.
The details of an API key, including the secret. Only returned on API key creation.
keyobjectrequiredThe details of an API key, without the secret.
Show child attributes
idstringrequiredThe unique ID of the API key.
namestringrequiredThe name of the API key.
project_idstringrequiredThe ID of the project containing the API key.
rolesstring[]requiredThe roles assigned to the API key.
valuestringrequiredThe value to use as an API key. New keys will have the format "pckey_<public-label>_<unique-key>". The entire string should be used when authenticating.