AI edit questions (stateless)
curl --request POST \
--url https://api.getversive.com/api/v1/studies/{study_id}/ai-edit \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"current_message": "<string>",
"questions": [
{}
],
"language": "<string>"
}
'import requests
url = "https://api.getversive.com/api/v1/studies/{study_id}/ai-edit"
payload = {
"current_message": "<string>",
"questions": [{}],
"language": "<string>"
}
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({current_message: '<string>', questions: [{}], language: '<string>'})
};
fetch('https://api.getversive.com/api/v1/studies/{study_id}/ai-edit', 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.getversive.com/api/v1/studies/{study_id}/ai-edit",
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([
'current_message' => '<string>',
'questions' => [
[
]
],
'language' => '<string>'
]),
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.getversive.com/api/v1/studies/{study_id}/ai-edit"
payload := strings.NewReader("{\n \"current_message\": \"<string>\",\n \"questions\": [\n {}\n ],\n \"language\": \"<string>\"\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.getversive.com/api/v1/studies/{study_id}/ai-edit")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"current_message\": \"<string>\",\n \"questions\": [\n {}\n ],\n \"language\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getversive.com/api/v1/studies/{study_id}/ai-edit")
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 \"current_message\": \"<string>\",\n \"questions\": [\n {}\n ],\n \"language\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"questions": [
{}
],
"change_log": {},
"deleted_questions": [
"<string>"
]
}Studies
AI edit questions (stateless)
Transform a question list with AI, without saving
POST
/
studies
/
{study_id}
/
ai-edit
AI edit questions (stateless)
curl --request POST \
--url https://api.getversive.com/api/v1/studies/{study_id}/ai-edit \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"current_message": "<string>",
"questions": [
{}
],
"language": "<string>"
}
'import requests
url = "https://api.getversive.com/api/v1/studies/{study_id}/ai-edit"
payload = {
"current_message": "<string>",
"questions": [{}],
"language": "<string>"
}
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({current_message: '<string>', questions: [{}], language: '<string>'})
};
fetch('https://api.getversive.com/api/v1/studies/{study_id}/ai-edit', 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.getversive.com/api/v1/studies/{study_id}/ai-edit",
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([
'current_message' => '<string>',
'questions' => [
[
]
],
'language' => '<string>'
]),
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.getversive.com/api/v1/studies/{study_id}/ai-edit"
payload := strings.NewReader("{\n \"current_message\": \"<string>\",\n \"questions\": [\n {}\n ],\n \"language\": \"<string>\"\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.getversive.com/api/v1/studies/{study_id}/ai-edit")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"current_message\": \"<string>\",\n \"questions\": [\n {}\n ],\n \"language\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getversive.com/api/v1/studies/{study_id}/ai-edit")
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 \"current_message\": \"<string>\",\n \"questions\": [\n {}\n ],\n \"language\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"questions": [
{}
],
"change_log": {},
"deleted_questions": [
"<string>"
]
}A stateless AI editing endpoint: send a list of questions and an instruction, get back the transformed list. Nothing is persisted — use it to power your own editing UI, then save via the batch questions endpoint. For an agent that edits and saves the study directly, use the agent endpoint instead.
string
required
The study ID (used for context and access control).
string
required
The editing instruction.
object[]
required
The current question list to transform.
string
required
The language the questions are written in.
Response
object[]
The transformed questions. Newly added questions are flagged with
is_new: true.object
A structured description of what changed.
string[]
IDs of questions the AI removed.
⌘I