Notifications
Update notification settings
Updates one or more durable notification-policy sections. Enabling auto top-up requires an existing saved payment method identifier and verified two-factor authentication. An existing auto top-up configuration may be updated without repeating the MFA acknowledgement. To enable auto top-up without MFA, clients must explicitly set mfa_bypass_acknowledged to true and provide the exact mfa_bypass_phrase value I ACCEPT THE RISK; payment collection remains an interactive account flow.
PATCH
/
notifications
/
settings
Update workspace notification settings
const options = {
method: 'PATCH',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
email_preferences: {
auto_top_up_failure: true,
payment_method_expiring: true,
model_deprecation: true
},
spend: {billing_time_zone: 'Europe/London', report_include_admins: true}
})
};
fetch('https://api.phaseo.app/v1/notifications/settings', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.phaseo.app/v1/notifications/settings"
payload = {
"email_preferences": {
"auto_top_up_failure": True,
"payment_method_expiring": True,
"model_deprecation": True
},
"spend": {
"billing_time_zone": "Europe/London",
"report_include_admins": True
}
}
headers = {"Content-Type": "application/json"}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)curl --request PATCH \
--url https://api.phaseo.app/v1/notifications/settings \
--header 'Content-Type: application/json' \
--data '
{
"email_preferences": {
"auto_top_up_failure": true,
"payment_method_expiring": true,
"model_deprecation": true
},
"spend": {
"billing_time_zone": "Europe/London",
"report_include_admins": true
}
}
'package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.phaseo.app/v1/notifications/settings"
payload := strings.NewReader("{\n \"email_preferences\": {\n \"auto_top_up_failure\": true,\n \"payment_method_expiring\": true,\n \"model_deprecation\": true\n },\n \"spend\": {\n \"billing_time_zone\": \"Europe/London\",\n \"report_include_admins\": true\n }\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://api.phaseo.app/v1/notifications/settings")
.header("Content-Type", "application/json")
.body("{\n \"email_preferences\": {\n \"auto_top_up_failure\": true,\n \"payment_method_expiring\": true,\n \"model_deprecation\": true\n },\n \"spend\": {\n \"billing_time_zone\": \"Europe/London\",\n \"report_include_admins\": true\n }\n}")
.asString();<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.phaseo.app/v1/notifications/settings",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'email_preferences' => [
'auto_top_up_failure' => true,
'payment_method_expiring' => true,
'model_deprecation' => true
],
'spend' => [
'billing_time_zone' => 'Europe/London',
'report_include_admins' => true
]
]),
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;
}require 'uri'
require 'net/http'
url = URI("https://api.phaseo.app/v1/notifications/settings")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"email_preferences\": {\n \"auto_top_up_failure\": true,\n \"payment_method_expiring\": true,\n \"model_deprecation\": true\n },\n \"spend\": {\n \"billing_time_zone\": \"Europe/London\",\n \"report_include_admins\": true\n }\n}"
response = http.request(request)
puts response.read_body{
"data": {
"auto_top_up": {
"enabled": true,
"balance_threshold_nanos": 1,
"amount_nanos": 1,
"payment_method_id": "<string>"
},
"low_balance_email": {
"enabled": true,
"threshold_usd": 1
},
"email_preferences": {
"auto_top_up_failure": true,
"payment_method_expiring": true,
"model_deprecation": true
},
"spend": {
"department_attribution": "all",
"billing_time_zone": "Europe/London",
"report_cadence": "off",
"report_include_admins": true
}
}
}{
"error": {
"code": "validation_error",
"message": "Unknown parameter: foo",
"type": "invalid_request_error",
"param": "foo"
},
"ok": false,
"code": "validation_error",
"message": "Human-readable error message",
"description": "Additional error details.",
"generation_id": "G-abc123",
"status_code": 502,
"error_type": "system",
"error_origin": "upstream",
"reason": "all_candidates_failed",
"attempt_count": 2,
"failed_providers": [
"google-ai-studio",
"openai"
],
"failed_statuses": [
403,
429
],
"upstream_error": {
"code": "PERMISSION_DENIED",
"message": "The caller does not have permission.",
"description": "<string>",
"param": "<string>"
},
"failure_sample": [
{
"provider": "<string>",
"type": "<string>",
"status": 123,
"upstream_error_code": "<string>",
"upstream_error_message": "<string>",
"upstream_error_description": "<string>",
"upstream_error_param": "<string>",
"upstream_payload_preview": "<string>",
"retryable": true
}
],
"provider_failure_diagnostics": {
"category": "credentials_not_configured",
"hint": "<string>",
"provider": "<string>"
},
"routing_diagnostics": {
"filterStages": [
{
"stage": "<string>",
"beforeCount": 123,
"afterCount": 123,
"droppedProviders": [
{
"providerId": "<string>",
"reason": "<string>"
}
]
}
]
},
"provider_candidate_diagnostics": {
"totalProviders": 123,
"supportsEndpointCount": 123,
"candidateCount": 123,
"droppedUnsupportedEndpoint": [
"<string>"
],
"droppedMissingAdapter": [
{
"providerId": "<string>",
"endpoint": "<string>"
}
]
},
"provider_enablement": {
"capability": "<string>",
"providersBefore": [
"<string>"
],
"providersAfter": [
"<string>"
],
"dropped": [
{
"providerId": "<string>",
"reason": "<string>"
}
]
},
"missing_pricing_providers": [
"<string>"
],
"provider_payment_required_provider": "openai",
"provider_payment_required_support_notice": "Our upstream provider billing appears to be unavailable. If this persists, contact support.",
"details": [
{}
]
}Workspace notification administration requires an owner or admin identity and the matching settings scope. Destination targets are encrypted and never returned.
Last modified on October 18, 2026
Was this page helpful?
⌘I
Update workspace notification settings
const options = {
method: 'PATCH',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
email_preferences: {
auto_top_up_failure: true,
payment_method_expiring: true,
model_deprecation: true
},
spend: {billing_time_zone: 'Europe/London', report_include_admins: true}
})
};
fetch('https://api.phaseo.app/v1/notifications/settings', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.phaseo.app/v1/notifications/settings"
payload = {
"email_preferences": {
"auto_top_up_failure": True,
"payment_method_expiring": True,
"model_deprecation": True
},
"spend": {
"billing_time_zone": "Europe/London",
"report_include_admins": True
}
}
headers = {"Content-Type": "application/json"}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)curl --request PATCH \
--url https://api.phaseo.app/v1/notifications/settings \
--header 'Content-Type: application/json' \
--data '
{
"email_preferences": {
"auto_top_up_failure": true,
"payment_method_expiring": true,
"model_deprecation": true
},
"spend": {
"billing_time_zone": "Europe/London",
"report_include_admins": true
}
}
'package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.phaseo.app/v1/notifications/settings"
payload := strings.NewReader("{\n \"email_preferences\": {\n \"auto_top_up_failure\": true,\n \"payment_method_expiring\": true,\n \"model_deprecation\": true\n },\n \"spend\": {\n \"billing_time_zone\": \"Europe/London\",\n \"report_include_admins\": true\n }\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://api.phaseo.app/v1/notifications/settings")
.header("Content-Type", "application/json")
.body("{\n \"email_preferences\": {\n \"auto_top_up_failure\": true,\n \"payment_method_expiring\": true,\n \"model_deprecation\": true\n },\n \"spend\": {\n \"billing_time_zone\": \"Europe/London\",\n \"report_include_admins\": true\n }\n}")
.asString();<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.phaseo.app/v1/notifications/settings",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'email_preferences' => [
'auto_top_up_failure' => true,
'payment_method_expiring' => true,
'model_deprecation' => true
],
'spend' => [
'billing_time_zone' => 'Europe/London',
'report_include_admins' => true
]
]),
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;
}require 'uri'
require 'net/http'
url = URI("https://api.phaseo.app/v1/notifications/settings")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"email_preferences\": {\n \"auto_top_up_failure\": true,\n \"payment_method_expiring\": true,\n \"model_deprecation\": true\n },\n \"spend\": {\n \"billing_time_zone\": \"Europe/London\",\n \"report_include_admins\": true\n }\n}"
response = http.request(request)
puts response.read_body{
"data": {
"auto_top_up": {
"enabled": true,
"balance_threshold_nanos": 1,
"amount_nanos": 1,
"payment_method_id": "<string>"
},
"low_balance_email": {
"enabled": true,
"threshold_usd": 1
},
"email_preferences": {
"auto_top_up_failure": true,
"payment_method_expiring": true,
"model_deprecation": true
},
"spend": {
"department_attribution": "all",
"billing_time_zone": "Europe/London",
"report_cadence": "off",
"report_include_admins": true
}
}
}{
"error": {
"code": "validation_error",
"message": "Unknown parameter: foo",
"type": "invalid_request_error",
"param": "foo"
},
"ok": false,
"code": "validation_error",
"message": "Human-readable error message",
"description": "Additional error details.",
"generation_id": "G-abc123",
"status_code": 502,
"error_type": "system",
"error_origin": "upstream",
"reason": "all_candidates_failed",
"attempt_count": 2,
"failed_providers": [
"google-ai-studio",
"openai"
],
"failed_statuses": [
403,
429
],
"upstream_error": {
"code": "PERMISSION_DENIED",
"message": "The caller does not have permission.",
"description": "<string>",
"param": "<string>"
},
"failure_sample": [
{
"provider": "<string>",
"type": "<string>",
"status": 123,
"upstream_error_code": "<string>",
"upstream_error_message": "<string>",
"upstream_error_description": "<string>",
"upstream_error_param": "<string>",
"upstream_payload_preview": "<string>",
"retryable": true
}
],
"provider_failure_diagnostics": {
"category": "credentials_not_configured",
"hint": "<string>",
"provider": "<string>"
},
"routing_diagnostics": {
"filterStages": [
{
"stage": "<string>",
"beforeCount": 123,
"afterCount": 123,
"droppedProviders": [
{
"providerId": "<string>",
"reason": "<string>"
}
]
}
]
},
"provider_candidate_diagnostics": {
"totalProviders": 123,
"supportsEndpointCount": 123,
"candidateCount": 123,
"droppedUnsupportedEndpoint": [
"<string>"
],
"droppedMissingAdapter": [
{
"providerId": "<string>",
"endpoint": "<string>"
}
]
},
"provider_enablement": {
"capability": "<string>",
"providersBefore": [
"<string>"
],
"providersAfter": [
"<string>"
],
"dropped": [
{
"providerId": "<string>",
"reason": "<string>"
}
]
},
"missing_pricing_providers": [
"<string>"
],
"provider_payment_required_provider": "openai",
"provider_payment_required_support_notice": "Our upstream provider billing appears to be unavailable. If this persists, contact support.",
"details": [
{}
]
}