curl --request PUT \
--url 'https://api.upsolve.ai/v2/api/projects/{projectId}/workspaces/{workspaceId}/draft/default-view?apiKey=' \
--header 'Content-Type: application/json' \
--data '
{
"apiKey": "up_embed_************",
"organizationId": "123e4567-e89b-12d3-a456-426614174000"
}
'import requests
url = "https://api.upsolve.ai/v2/api/projects/{projectId}/workspaces/{workspaceId}/draft/default-view?apiKey="
payload = {
"apiKey": "up_embed_************",
"organizationId": "123e4567-e89b-12d3-a456-426614174000"
}
headers = {"Content-Type": "application/json"}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
apiKey: 'up_embed_************',
organizationId: '123e4567-e89b-12d3-a456-426614174000'
})
};
fetch('https://api.upsolve.ai/v2/api/projects/{projectId}/workspaces/{workspaceId}/draft/default-view?apiKey=', 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.upsolve.ai/v2/api/projects/{projectId}/workspaces/{workspaceId}/draft/default-view?apiKey=",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'apiKey' => 'up_embed_************',
'organizationId' => '123e4567-e89b-12d3-a456-426614174000'
]),
CURLOPT_HTTPHEADER => [
"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.upsolve.ai/v2/api/projects/{projectId}/workspaces/{workspaceId}/draft/default-view?apiKey="
payload := strings.NewReader("{\n \"apiKey\": \"up_embed_************\",\n \"organizationId\": \"123e4567-e89b-12d3-a456-426614174000\"\n}")
req, _ := http.NewRequest("PUT", url, payload)
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.put("https://api.upsolve.ai/v2/api/projects/{projectId}/workspaces/{workspaceId}/draft/default-view?apiKey=")
.header("Content-Type", "application/json")
.body("{\n \"apiKey\": \"up_embed_************\",\n \"organizationId\": \"123e4567-e89b-12d3-a456-426614174000\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.upsolve.ai/v2/api/projects/{projectId}/workspaces/{workspaceId}/draft/default-view?apiKey=")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"apiKey\": \"up_embed_************\",\n \"organizationId\": \"123e4567-e89b-12d3-a456-426614174000\"\n}"
response = http.request(request)
puts response.read_body{
"status": "success",
"data": {
"canvasId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"canvas": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"visibility": "<string>"
},
"lockVersion": 123
}
}{
"status": "error",
"error": {
"message": "<string>",
"code": "<string>",
"details": {}
}
}Set Draft Default View
Set the workspace draft’s default view. Pass a canvasId to open that canvas for everyone who opens the workspace, or null to open the AI chat. The canvas must belong to this workspace and be shared with the whole workspace, or the call is refused with DEFAULT_VIEW_CANVAS_NOT_SHARED. Saved to the draft: end users get it once the draft is published to production, and the Playground shows it on the draft.
curl --request PUT \
--url 'https://api.upsolve.ai/v2/api/projects/{projectId}/workspaces/{workspaceId}/draft/default-view?apiKey=' \
--header 'Content-Type: application/json' \
--data '
{
"apiKey": "up_embed_************",
"organizationId": "123e4567-e89b-12d3-a456-426614174000"
}
'import requests
url = "https://api.upsolve.ai/v2/api/projects/{projectId}/workspaces/{workspaceId}/draft/default-view?apiKey="
payload = {
"apiKey": "up_embed_************",
"organizationId": "123e4567-e89b-12d3-a456-426614174000"
}
headers = {"Content-Type": "application/json"}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
apiKey: 'up_embed_************',
organizationId: '123e4567-e89b-12d3-a456-426614174000'
})
};
fetch('https://api.upsolve.ai/v2/api/projects/{projectId}/workspaces/{workspaceId}/draft/default-view?apiKey=', 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.upsolve.ai/v2/api/projects/{projectId}/workspaces/{workspaceId}/draft/default-view?apiKey=",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'apiKey' => 'up_embed_************',
'organizationId' => '123e4567-e89b-12d3-a456-426614174000'
]),
CURLOPT_HTTPHEADER => [
"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.upsolve.ai/v2/api/projects/{projectId}/workspaces/{workspaceId}/draft/default-view?apiKey="
payload := strings.NewReader("{\n \"apiKey\": \"up_embed_************\",\n \"organizationId\": \"123e4567-e89b-12d3-a456-426614174000\"\n}")
req, _ := http.NewRequest("PUT", url, payload)
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.put("https://api.upsolve.ai/v2/api/projects/{projectId}/workspaces/{workspaceId}/draft/default-view?apiKey=")
.header("Content-Type", "application/json")
.body("{\n \"apiKey\": \"up_embed_************\",\n \"organizationId\": \"123e4567-e89b-12d3-a456-426614174000\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.upsolve.ai/v2/api/projects/{projectId}/workspaces/{workspaceId}/draft/default-view?apiKey=")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"apiKey\": \"up_embed_************\",\n \"organizationId\": \"123e4567-e89b-12d3-a456-426614174000\"\n}"
response = http.request(request)
puts response.read_body{
"status": "success",
"data": {
"canvasId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"canvas": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"visibility": "<string>"
},
"lockVersion": 123
}
}{
"status": "error",
"error": {
"message": "<string>",
"code": "<string>",
"details": {}
}
}Authorizations
apiKey MUST be supplied within the request body instead of query
Path Parameters
The project the workspace belongs to.
^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$The workspace (data model) id.
^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$Body
PUT /v2/api/projects/:projectId/workspaces/:workspaceId/draft/default-view Request body
^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$Upsolve API key, generated under Account → Developer settings in the Upsolve Hub. Keys are user-scoped: pass organizationId alongside the key to select which org to act on.
1"up_embed_************"
Your Upsolve organization's UUID — the org that owns the API key and project. This is NOT a project organization: do not pass a value registered via /projects/register-organization, and do not pass an externalId (only projectOrganizationId accepts those). Omit it when using an org-bound API key — the org is read from the key and any value sent here is ignored. Required only for user-scoped API keys (created under Account → Developer settings) and for the Supabase JWT path, where the org is ambiguous and membership is verified against it.
^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"123e4567-e89b-12d3-a456-426614174000"
The lockVersion the default view was read at; a stale value yields 412. Omit it only when the draft has never set a default view.
0 <= x <= 9007199254740991Was this page helpful?