Queue Customize Study Plan
Queue one planning turn and return immediately with a durable job ID.
curl --request POST \
--url https://api.userintuition.ai/api/public/v1/studies/{study_id}/customize-plan/jobs \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"message": "Understand why recent buyers abandoned checkout and what reassurance they needed.",
"decisions": "human",
"execution_policy": "review_before_fieldwork"
}
'import requests
url = "https://api.userintuition.ai/api/public/v1/studies/{study_id}/customize-plan/jobs"
payload = {
"message": "Understand why recent buyers abandoned checkout and what reassurance they needed.",
"decisions": "human",
"execution_policy": "review_before_fieldwork"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
message: 'Understand why recent buyers abandoned checkout and what reassurance they needed.',
decisions: 'human',
execution_policy: 'review_before_fieldwork'
})
};
fetch('https://api.userintuition.ai/api/public/v1/studies/{study_id}/customize-plan/jobs', 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.userintuition.ai/api/public/v1/studies/{study_id}/customize-plan/jobs",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'message' => 'Understand why recent buyers abandoned checkout and what reassurance they needed.',
'decisions' => 'human',
'execution_policy' => 'review_before_fieldwork'
]),
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.userintuition.ai/api/public/v1/studies/{study_id}/customize-plan/jobs"
payload := strings.NewReader("{\n \"message\": \"Understand why recent buyers abandoned checkout and what reassurance they needed.\",\n \"decisions\": \"human\",\n \"execution_policy\": \"review_before_fieldwork\"\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.userintuition.ai/api/public/v1/studies/{study_id}/customize-plan/jobs")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"message\": \"Understand why recent buyers abandoned checkout and what reassurance they needed.\",\n \"decisions\": \"human\",\n \"execution_policy\": \"review_before_fieldwork\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.userintuition.ai/api/public/v1/studies/{study_id}/customize-plan/jobs")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"message\": \"Understand why recent buyers abandoned checkout and what reassurance they needed.\",\n \"decisions\": \"human\",\n \"execution_policy\": \"review_before_fieldwork\"\n}"
response = http.request(request)
puts response.read_body{
"job_id": "<string>",
"status": "pending",
"completed": true,
"result_url": "<string>",
"total_count": 123,
"error": "<string>",
"result": {
"message": "<string>",
"response_type": "question",
"study": {
"id": "<string>",
"study_type": "in-depth-interview",
"provisioning_status": "draft",
"fielding_status": "not_started",
"name": "<string>",
"use_case": "<string>",
"recruiting_method": "panel",
"interview_format": "chat",
"voice": "male",
"language": "<string>",
"expected_duration_seconds": 900,
"byop_config": {
"incentive_amount": 123,
"is_incentives_enabled": true,
"auto_send_incentives": true
},
"study_link": "<string>",
"dashboard_url": "<string>",
"missing_requirements": [
"<string>"
],
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"interview_count": 123,
"report_status": "available"
},
"questions": [
{
"id": "<string>",
"text": "<string>",
"options": [
"<string>"
],
"default": "<string>"
}
],
"assumptions": [
"<string>"
],
"execution_policy": "review_before_fieldwork"
}
}{
"detail": "<unknown>",
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"outcome": "not_started",
"recovery_action": "<string>",
"docs_url": "<string>"
}
}{
"detail": "<unknown>",
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"outcome": "not_started",
"recovery_action": "<string>",
"docs_url": "<string>"
}
}Authorizations
Authenticate with an API key (prefixed ui_sk_) or a JWT token from the dashboard.
Headers
Platform admins only: choose an organization for scoped reads and writes. Required to change another organization's study or use its wallet.
128Path Parameters
Body
One user turn for the stateful Customize Plan conversation.
1 - 20000human relays required decisions; agent makes reviewable assumptions when possible.
human, agent Caller workflow constraint, kept separate from participant-facing research content. This endpoint never launches recruitment.
review_before_fieldwork, draft_only Optional native concept-image attachment for this turn. The backend validates, stores, and makes it available to Customize Plan.
Show child attributes
Show child attributes
Response
Successful Response
pending, running, succeeded, failed True when work has finished successfully
Fetch the created resource after success
Requested participant count for a batch
A safe failure summary; internal details are never returned
The completed planning turn; null until the job succeeds
Show child attributes
Show child attributes
Was this page helpful?
curl --request POST \
--url https://api.userintuition.ai/api/public/v1/studies/{study_id}/customize-plan/jobs \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"message": "Understand why recent buyers abandoned checkout and what reassurance they needed.",
"decisions": "human",
"execution_policy": "review_before_fieldwork"
}
'import requests
url = "https://api.userintuition.ai/api/public/v1/studies/{study_id}/customize-plan/jobs"
payload = {
"message": "Understand why recent buyers abandoned checkout and what reassurance they needed.",
"decisions": "human",
"execution_policy": "review_before_fieldwork"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
message: 'Understand why recent buyers abandoned checkout and what reassurance they needed.',
decisions: 'human',
execution_policy: 'review_before_fieldwork'
})
};
fetch('https://api.userintuition.ai/api/public/v1/studies/{study_id}/customize-plan/jobs', 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.userintuition.ai/api/public/v1/studies/{study_id}/customize-plan/jobs",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'message' => 'Understand why recent buyers abandoned checkout and what reassurance they needed.',
'decisions' => 'human',
'execution_policy' => 'review_before_fieldwork'
]),
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.userintuition.ai/api/public/v1/studies/{study_id}/customize-plan/jobs"
payload := strings.NewReader("{\n \"message\": \"Understand why recent buyers abandoned checkout and what reassurance they needed.\",\n \"decisions\": \"human\",\n \"execution_policy\": \"review_before_fieldwork\"\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.userintuition.ai/api/public/v1/studies/{study_id}/customize-plan/jobs")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"message\": \"Understand why recent buyers abandoned checkout and what reassurance they needed.\",\n \"decisions\": \"human\",\n \"execution_policy\": \"review_before_fieldwork\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.userintuition.ai/api/public/v1/studies/{study_id}/customize-plan/jobs")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"message\": \"Understand why recent buyers abandoned checkout and what reassurance they needed.\",\n \"decisions\": \"human\",\n \"execution_policy\": \"review_before_fieldwork\"\n}"
response = http.request(request)
puts response.read_body{
"job_id": "<string>",
"status": "pending",
"completed": true,
"result_url": "<string>",
"total_count": 123,
"error": "<string>",
"result": {
"message": "<string>",
"response_type": "question",
"study": {
"id": "<string>",
"study_type": "in-depth-interview",
"provisioning_status": "draft",
"fielding_status": "not_started",
"name": "<string>",
"use_case": "<string>",
"recruiting_method": "panel",
"interview_format": "chat",
"voice": "male",
"language": "<string>",
"expected_duration_seconds": 900,
"byop_config": {
"incentive_amount": 123,
"is_incentives_enabled": true,
"auto_send_incentives": true
},
"study_link": "<string>",
"dashboard_url": "<string>",
"missing_requirements": [
"<string>"
],
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"interview_count": 123,
"report_status": "available"
},
"questions": [
{
"id": "<string>",
"text": "<string>",
"options": [
"<string>"
],
"default": "<string>"
}
],
"assumptions": [
"<string>"
],
"execution_policy": "review_before_fieldwork"
}
}{
"detail": "<unknown>",
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"outcome": "not_started",
"recovery_action": "<string>",
"docs_url": "<string>"
}
}{
"detail": "<unknown>",
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"outcome": "not_started",
"recovery_action": "<string>",
"docs_url": "<string>"
}
}
