curl --request PUT \
--url 'https://api.upsolve.ai/v2/api/projects/{projectId}/workspaces/{workspaceId}/rule-settings?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}/rule-settings?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}/rule-settings?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}/rule-settings?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}/rule-settings?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}/rule-settings?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}/rule-settings?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": {
"available": true,
"reason": "not_cloud",
"enabled": true,
"emailFallbackSender": true,
"emailSender": {
"from": "<string>",
"source": "organization"
}
}
}{
"status": "error",
"error": {
"message": "<string>",
"code": "<string>",
"details": {}
}
}Update Rule Settings
Switch Rules & Actions on or off for this workspace, and whether its email rules may send from Upsolve’s address while the organization has no verified sending domain. Switching on is refused for an organization that can never have rules. Returns the settings as they now stand
curl --request PUT \
--url 'https://api.upsolve.ai/v2/api/projects/{projectId}/workspaces/{workspaceId}/rule-settings?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}/rule-settings?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}/rule-settings?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}/rule-settings?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}/rule-settings?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}/rule-settings?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}/rule-settings?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": {
"available": true,
"reason": "not_cloud",
"enabled": true,
"emailFallbackSender": true,
"emailSender": {
"from": "<string>",
"source": "organization"
}
}
}{
"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 to read or change.
^([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/rule-settings Request body
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"
Switch Rules & Actions on or off for this workspace. On by default. Switching on is refused for an organization that can never have rules. Unchanged when omitted.
Let this workspace's email rules send from Upsolve's own address while the organization has no verified sending domain. Off by default; the organization's own domain always wins. Unchanged when omitted.
Was this page helpful?