curl --request PATCH \
--url https://api.scrunchai.com/v1/{brand_id}/prompts/{prompt_id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{}'import requests
url = "https://api.scrunchai.com/v1/{brand_id}/prompts/{prompt_id}"
payload = {}
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({})
};
fetch('https://api.scrunchai.com/v1/{brand_id}/prompts/{prompt_id}', 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.scrunchai.com/v1/{brand_id}/prompts/{prompt_id}",
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([
]),
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://api.scrunchai.com/v1/{brand_id}/prompts/{prompt_id}"
payload := strings.NewReader("{}")
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://api.scrunchai.com/v1/{brand_id}/prompts/{prompt_id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.scrunchai.com/v1/{brand_id}/prompts/{prompt_id}")
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 = "{}"
response = http.request(request)
puts response.read_body{
"id": 123,
"text": "<string>",
"stage": "<string>",
"persona_id": 123,
"platforms": [
"chatgpt"
],
"tags": [
"<string>"
],
"topics": [
"<string>"
],
"status": "active",
"created_at": "2023-11-07T05:31:56Z"
}Update Prompt Status
Pauses or resumes a prompt. Requires the configure scope.
Pausing (status: paused) stops collection for the prompt and releases its variants from the organization’s prompt pool. The prompt keeps its configuration and all of its collected history, and stays readable through GET /{brand_id}/prompts?status=paused.
Resuming (status: active) restores the exact deployment the prompt had when it was paused and re-checks the prompt pool, so it can return 429 quota_exceeded when the organization no longer has room for the prompt’s variants.
Both transitions are idempotent: a prompt already in the requested status returns 200 with the prompt, unchanged.
A transition the prompt’s status does not allow (resuming an archived prompt, resuming one whose persona is archived) returns 409 with a type naming the reason. To archive a prompt, use DELETE /{brand_id}/prompts/{prompt_id} instead.
curl --request PATCH \
--url https://api.scrunchai.com/v1/{brand_id}/prompts/{prompt_id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{}'import requests
url = "https://api.scrunchai.com/v1/{brand_id}/prompts/{prompt_id}"
payload = {}
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({})
};
fetch('https://api.scrunchai.com/v1/{brand_id}/prompts/{prompt_id}', 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.scrunchai.com/v1/{brand_id}/prompts/{prompt_id}",
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([
]),
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://api.scrunchai.com/v1/{brand_id}/prompts/{prompt_id}"
payload := strings.NewReader("{}")
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://api.scrunchai.com/v1/{brand_id}/prompts/{prompt_id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.scrunchai.com/v1/{brand_id}/prompts/{prompt_id}")
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 = "{}"
response = http.request(request)
puts response.read_body{
"id": 123,
"text": "<string>",
"stage": "<string>",
"persona_id": 123,
"platforms": [
"chatgpt"
],
"tags": [
"<string>"
],
"topics": [
"<string>"
],
"status": "active",
"created_at": "2023-11-07T05:31:56Z"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
The unique identifier for the brand
The unique identifier for the prompt to update
Body
Body of the prompt PATCH. status is the only mutable field - a prompt's text, platforms and labels are fixed at create time.
The lifecycle status to move the prompt to.
paused- stop collecting for this prompt and release its variants from the organization's prompt pool; its configuration and history are keptactive- resume collecting with the exact deployment the prompt had when it was paused
archived is not accepted here - archive a prompt with DELETE /{brand_id}/prompts/{prompt_id}.
active, paused Response
The prompt after the transition. Also returned when the prompt was already in the requested status.
Represents a prompt being tracked for AI visibility, including its configuration and metadata.
Unique identifier for the prompt
The prompt text being tracked
The customer journey stage this prompt represents. Returned as the display name of the brand's active stage — one of the brand's default set (Advice, Awareness, Evaluation, Comparison, Other for intent brands; Awareness, Consideration, Conversion, Loyalty, Other for funnel brands) or a custom stage name.
ID of the associated persona, if any
AI platforms this prompt is tracked on
chatgpt, claude, google_ai_overviews, perplexity, meta, google_ai_mode, google_gemini, copilot, grok Custom tags assigned to this prompt
Auto-detected or assigned topics for this prompt
Lifecycle status of the prompt (active, paused, or archived)
active, paused, archived Timestamp when the prompt was created