curl --request PATCH \
--url https://neo.api.projectdiscovery.io/api/v1/teams/default-spending-cap \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"default_spending_cap_credits": 1,
"apply_to_all_members": false
}
'import requests
url = "https://neo.api.projectdiscovery.io/api/v1/teams/default-spending-cap"
payload = {
"default_spending_cap_credits": 1,
"apply_to_all_members": False
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({default_spending_cap_credits: 1, apply_to_all_members: false})
};
fetch('https://neo.api.projectdiscovery.io/api/v1/teams/default-spending-cap', 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://neo.api.projectdiscovery.io/api/v1/teams/default-spending-cap",
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([
'default_spending_cap_credits' => 1,
'apply_to_all_members' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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://neo.api.projectdiscovery.io/api/v1/teams/default-spending-cap"
payload := strings.NewReader("{\n \"default_spending_cap_credits\": 1,\n \"apply_to_all_members\": false\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://neo.api.projectdiscovery.io/api/v1/teams/default-spending-cap")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"default_spending_cap_credits\": 1,\n \"apply_to_all_members\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://neo.api.projectdiscovery.io/api/v1/teams/default-spending-cap")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"default_spending_cap_credits\": 1,\n \"apply_to_all_members\": false\n}"
response = http.request(request)
puts response.read_body{
"default_spending_cap_credits": 123
}{
"error": "Bad request",
"code": "user_spending_cap_reached",
"error_id": "<string>",
"kind": "forbidden request",
"message": "<string>",
"turnstile_site_key": "<string>"
}{
"error": "Bad request",
"code": "user_spending_cap_reached",
"error_id": "<string>",
"kind": "forbidden request",
"message": "<string>",
"turnstile_site_key": "<string>"
}{
"error": "Bad request",
"code": "user_spending_cap_reached",
"error_id": "<string>",
"kind": "forbidden request",
"message": "<string>",
"turnstile_site_key": "<string>"
}Set or clear the team-wide default spending cap
Team admin only. The default applies to every member without an explicit override (including the owner). null clears the default. Must not exceed the team’s issued credits (returns 400). Applies retroactively to new tasks; never interrupts in-flight tasks.
curl --request PATCH \
--url https://neo.api.projectdiscovery.io/api/v1/teams/default-spending-cap \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"default_spending_cap_credits": 1,
"apply_to_all_members": false
}
'import requests
url = "https://neo.api.projectdiscovery.io/api/v1/teams/default-spending-cap"
payload = {
"default_spending_cap_credits": 1,
"apply_to_all_members": False
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({default_spending_cap_credits: 1, apply_to_all_members: false})
};
fetch('https://neo.api.projectdiscovery.io/api/v1/teams/default-spending-cap', 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://neo.api.projectdiscovery.io/api/v1/teams/default-spending-cap",
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([
'default_spending_cap_credits' => 1,
'apply_to_all_members' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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://neo.api.projectdiscovery.io/api/v1/teams/default-spending-cap"
payload := strings.NewReader("{\n \"default_spending_cap_credits\": 1,\n \"apply_to_all_members\": false\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://neo.api.projectdiscovery.io/api/v1/teams/default-spending-cap")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"default_spending_cap_credits\": 1,\n \"apply_to_all_members\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://neo.api.projectdiscovery.io/api/v1/teams/default-spending-cap")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"default_spending_cap_credits\": 1,\n \"apply_to_all_members\": false\n}"
response = http.request(request)
puts response.read_body{
"default_spending_cap_credits": 123
}{
"error": "Bad request",
"code": "user_spending_cap_reached",
"error_id": "<string>",
"kind": "forbidden request",
"message": "<string>",
"turnstile_site_key": "<string>"
}{
"error": "Bad request",
"code": "user_spending_cap_reached",
"error_id": "<string>",
"kind": "forbidden request",
"message": "<string>",
"turnstile_site_key": "<string>"
}{
"error": "Bad request",
"code": "user_spending_cap_reached",
"error_id": "<string>",
"kind": "forbidden request",
"message": "<string>",
"turnstile_site_key": "<string>"
}Authorizations
JWT authentication token
Body
Team-wide default cap in credits applied to members without an explicit override (including the owner). null clears the default. 0 blocks all such members.
x >= 0When true, clear every team member's individual spending-cap override so they all inherit this team default. A one-time bulk action applied at save time. If default_spending_cap_credits is null, all overrides are cleared too (everyone becomes pool-only / unlimited). Default false leaves existing overrides intact.
Response
Default updated
Current team-wide default cap in credits, or null if unset.

