curl --request PATCH \
--url https://api.dev.purplelabelmd.com/v1/account/offerings/{offering_ref}/qualification/questions/{question_id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"copy": {},
"option_labels": {},
"options": [
"<string>"
],
"required": true
}
'import requests
url = "https://api.dev.purplelabelmd.com/v1/account/offerings/{offering_ref}/qualification/questions/{question_id}"
payload = {
"copy": {},
"option_labels": {},
"options": ["<string>"],
"required": True
}
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({copy: {}, option_labels: {}, options: ['<string>'], required: true})
};
fetch('https://api.dev.purplelabelmd.com/v1/account/offerings/{offering_ref}/qualification/questions/{question_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.dev.purplelabelmd.com/v1/account/offerings/{offering_ref}/qualification/questions/{question_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([
'copy' => [
],
'option_labels' => [
],
'options' => [
'<string>'
],
'required' => true
]),
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.dev.purplelabelmd.com/v1/account/offerings/{offering_ref}/qualification/questions/{question_id}"
payload := strings.NewReader("{\n \"copy\": {},\n \"option_labels\": {},\n \"options\": [\n \"<string>\"\n ],\n \"required\": true\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://api.dev.purplelabelmd.com/v1/account/offerings/{offering_ref}/qualification/questions/{question_id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"copy\": {},\n \"option_labels\": {},\n \"options\": [\n \"<string>\"\n ],\n \"required\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.dev.purplelabelmd.com/v1/account/offerings/{offering_ref}/qualification/questions/{question_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 = "{\n \"copy\": {},\n \"option_labels\": {},\n \"options\": [\n \"<string>\"\n ],\n \"required\": true\n}"
response = http.request(request)
puts response.read_body{
"data": {
"control": "single_select_cards",
"fact": "<string>",
"id": "<string>",
"copy": {},
"option_labels": {},
"options": [
"<string>"
],
"required": true,
"when": {
"kind": "compare"
}
},
"warnings": [
{
"code": "DUPLICATE_FACT",
"fact": "<string>",
"message": "<string>"
}
]
}{
"status": 123,
"title": "<string>",
"issues": [
{
"code": "<string>",
"message": "<string>",
"where": "<string>"
}
]
}{
"status": 123,
"title": "<string>",
"issues": [
{
"code": "<string>",
"message": "<string>",
"where": "<string>"
}
]
}{
"status": 123,
"title": "<string>",
"issues": [
{
"code": "<string>",
"message": "<string>",
"where": "<string>"
}
]
}{
"status": 123,
"title": "<string>",
"issues": [
{
"code": "<string>",
"message": "<string>",
"where": "<string>"
}
]
}Edit an offering's qualification question
Updates this offering’s copy of a question. Edits stay local to the offering; omitted fields are unchanged, and the bound fact and control are fixed at creation.
curl --request PATCH \
--url https://api.dev.purplelabelmd.com/v1/account/offerings/{offering_ref}/qualification/questions/{question_id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"copy": {},
"option_labels": {},
"options": [
"<string>"
],
"required": true
}
'import requests
url = "https://api.dev.purplelabelmd.com/v1/account/offerings/{offering_ref}/qualification/questions/{question_id}"
payload = {
"copy": {},
"option_labels": {},
"options": ["<string>"],
"required": True
}
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({copy: {}, option_labels: {}, options: ['<string>'], required: true})
};
fetch('https://api.dev.purplelabelmd.com/v1/account/offerings/{offering_ref}/qualification/questions/{question_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.dev.purplelabelmd.com/v1/account/offerings/{offering_ref}/qualification/questions/{question_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([
'copy' => [
],
'option_labels' => [
],
'options' => [
'<string>'
],
'required' => true
]),
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.dev.purplelabelmd.com/v1/account/offerings/{offering_ref}/qualification/questions/{question_id}"
payload := strings.NewReader("{\n \"copy\": {},\n \"option_labels\": {},\n \"options\": [\n \"<string>\"\n ],\n \"required\": true\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://api.dev.purplelabelmd.com/v1/account/offerings/{offering_ref}/qualification/questions/{question_id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"copy\": {},\n \"option_labels\": {},\n \"options\": [\n \"<string>\"\n ],\n \"required\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.dev.purplelabelmd.com/v1/account/offerings/{offering_ref}/qualification/questions/{question_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 = "{\n \"copy\": {},\n \"option_labels\": {},\n \"options\": [\n \"<string>\"\n ],\n \"required\": true\n}"
response = http.request(request)
puts response.read_body{
"data": {
"control": "single_select_cards",
"fact": "<string>",
"id": "<string>",
"copy": {},
"option_labels": {},
"options": [
"<string>"
],
"required": true,
"when": {
"kind": "compare"
}
},
"warnings": [
{
"code": "DUPLICATE_FACT",
"fact": "<string>",
"message": "<string>"
}
]
}{
"status": 123,
"title": "<string>",
"issues": [
{
"code": "<string>",
"message": "<string>",
"where": "<string>"
}
]
}{
"status": 123,
"title": "<string>",
"issues": [
{
"code": "<string>",
"message": "<string>",
"where": "<string>"
}
]
}{
"status": 123,
"title": "<string>",
"issues": [
{
"code": "<string>",
"message": "<string>",
"where": "<string>"
}
]
}{
"status": 123,
"title": "<string>",
"issues": [
{
"code": "<string>",
"message": "<string>",
"where": "<string>"
}
]
}Authorizations
Per-client API key (M2M). Presented as Authorization: Bearer <key>.
Body
edit body for an existing qualification question — every field optional; omitted fields are unchanged. The bound fact and control are fixed at creation (delete and recreate to change them).
Response
the updated forked question
the saved question under data, plus non-blocking duplicate notices when another question already collects the same fact (the write still succeeds — warnings never block)
A client-authored screening question — a library definition or an offering-local copy. It binds a fact by its stable code (the code must resolve in your authoring fact catalog) and a display control, and carries your own wording. Copy and option labels are yours to author.
Show child attributes
Show child attributes
Show child attributes
Show child attributes