Create a workspace
Create a Nexus workspace. The workspace name must be unique within the project.
Workspaces are created asynchronously. On success the workspace is returned in the Initializing state with ready set to false. Poll Describe workspace until the workspace reaches the Ready state before using it.
POST /workspaces
curl --request POST \
--url https://api.pinecone.io/workspaces \
--header 'Api-Key: <api-key>' \
--header 'X-Pinecone-Api-Version: <x-pinecone-api-version>' \
--header 'Content-Type: application/json' \
--data '{
"name": "production",
"spec": {
"byoc": {
"environment": "aws-us-east-1-b921.byoc"
}
}
}'import requests
url = "https://api.pinecone.io/workspaces"
payload = {
"name": "production",
"spec": {
"byoc": {
"environment": "aws-us-east-1-b921.byoc"
}
}
}
headers = {
"Api-Key": "<api-key>",
"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: {"Api-Key": "<api-key>", "X-Pinecone-Api-Version": "<x-pinecone-api-version>", "Content-Type": "application/json"}, body: JSON.stringify({
"name": "production",
"spec": {
"byoc": {
"environment": "aws-us-east-1-b921.byoc"
}
}
})};
fetch("https://api.pinecone.io/workspaces", 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/workspaces",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "{\"name\":\"production\",\"spec\":{\"byoc\":{\"environment\":\"aws-us-east-1-b921.byoc\"}}}",
CURLOPT_HTTPHEADER => [
"Api-Key: <api-key>",
"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/workspaces"
payload := strings.NewReader("{\"name\":\"production\",\"spec\":{\"byoc\":{\"environment\":\"aws-us-east-1-b921.byoc\"}}}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Api-Key", "<api-key>")
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/workspaces")
.header("Api-Key", "<api-key>")
.header("X-Pinecone-Api-Version", "<x-pinecone-api-version>")
.header("Content-Type", "application/json")
.body("{\"name\":\"production\",\"spec\":{\"byoc\":{\"environment\":\"aws-us-east-1-b921.byoc\"}}}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.pinecone.io/workspaces")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Api-Key"] = '<api-key>'
request["X-Pinecone-Api-Version"] = '<x-pinecone-api-version>'
request["Content-Type"] = 'application/json'
request.body = "{\"name\":\"production\",\"spec\":{\"byoc\":{\"environment\":\"aws-us-east-1-b921.byoc\"}}}"
response = http.request(request)
puts response.read_body{
"created_at": "2026-06-01T00:00:00.000Z",
"host": "production-c01b5b5.wksp.aws-us-east-1-b921.byoc.pinecone.io",
"name": "production",
"spec": {
"byoc": {
"environment": "aws-us-east-1-b921.byoc"
}
},
"status": {
"ready": false,
"state": "Initializing"
},
"updated_at": "2026-06-01T00:00:00.000Z"
}{
"error": {
"code": "INVALID_ARGUMENT",
"message": "Workspace name must be 1-45 characters, contain only lowercase alphanumeric characters or '-', and start and end with an alphanumeric character."
},
"status": 400
}{
"error": {
"code": "UNAUTHENTICATED",
"message": "Invalid API key."
},
"status": 401
}{
"error": {
"code": "FORBIDDEN",
"message": "This project has reached its workspace limit. Delete an existing workspace or contact support to raise the limit."
},
"status": 403
}{
"error": {
"code": "ALREADY_EXISTS",
"message": "A workspace named 'production' already exists in this project. Choose a different name."
},
"status": 409
}{
"error": {
"code": "UNPROCESSABLE_ENTITY",
"message": "Failed to deserialize the JSON body into the target type: missing field `spec` at line 1 column 20"
},
"status": 422
}{
"error": {
"code": "UNKNOWN",
"message": "Internal server error"
},
"status": 500
}Authorizations
Section titled “Authorizations”Api-KeystringrequiredAn API Key is required to call Pinecone APIs. Get yours from the console.
Headers
Section titled “Headers”X-Pinecone-Api-VersionstringrequiredRequired date-based version header
The desired configuration for the workspace.
namestringrequiredThe name of the workspace. Resource name must be 1-45 characters long, start and end with an alphanumeric character, and consist only of lower case alphanumeric characters or '-'.
Required string length: 1 - 45. Example: example-workspace
specobjectrequiredThe spec object defines the environment in which the workspace's contexts are created. Workspaces are created in a customer-managed BYOC (Bring Your Own Cloud) environment.
Show child attributes
byocobjectrequiredConfiguration needed to create a workspace in a BYOC (Bring Your Own Cloud) environment.
Show child attributes
environmentstringrequiredThe BYOC environment where the workspace's contexts are hosted.
Example: aws-us-east-1-b921.byoc
Response
Section titled “Response”201 — The workspace create request has been accepted. The workspace is being provisioned asynchronously and starts in the Initializing state.
Describes a workspace, a project-scoped grouping of contexts.
namestringrequiredThe name of the workspace. Resource name must be 1-45 characters long, start and end with an alphanumeric character, and consist only of lower case alphanumeric characters or '-'.
Required string length: 1 - 45. Example: example-workspace
specobjectrequiredThe spec object defines the environment in which the workspace's contexts are created. Workspaces are created in a customer-managed BYOC (Bring Your Own Cloud) environment.
Show child attributes
byocobjectrequiredConfiguration needed to create a workspace in a BYOC (Bring Your Own Cloud) environment.
Show child attributes
environmentstringrequiredThe BYOC environment where the workspace's contexts are hosted.
Example: aws-us-east-1-b921.byoc
hoststringrequiredThe URL address where the workspace is hosted.
Example: production-c01b5b5.wksp.prod.pinecone.io
created_atstringrequiredThe date and time the workspace was created.
Example: 2026-06-21T00:00:00.000Z
updated_atstringrequiredThe date and time the workspace was last updated.
Example: 2026-06-21T00:00:00.000Z
statusobjectrequiredThe current status of the workspace.
Show child attributes
readybooleanrequiredWhether the workspace is ready for use.
statestringrequiredThe state of the workspace. Possible values: Initializing, InitializationFailed, Ready, or Terminating.