curl --request PATCH \
--url https://{host}/primula/api/v3/students/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"transition_date": "2030-09-01",
"transition_room_override_id": null
}
'import requests
url = "https://{host}/primula/api/v3/students/{id}"
payload = {
"transition_date": "2030-09-01",
"transition_room_override_id": None
}
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({transition_date: '2030-09-01', transition_room_override_id: null})
};
fetch('https://{host}/primula/api/v3/students/{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://{host}/primula/api/v3/students/{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([
'transition_date' => '2030-09-01',
'transition_room_override_id' => null
]),
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://{host}/primula/api/v3/students/{id}"
payload := strings.NewReader("{\n \"transition_date\": \"2030-09-01\",\n \"transition_room_override_id\": null\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://{host}/primula/api/v3/students/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"transition_date\": \"2030-09-01\",\n \"transition_room_override_id\": null\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{host}/primula/api/v3/students/{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 \"transition_date\": \"2030-09-01\",\n \"transition_room_override_id\": null\n}"
response = http.request(request)
puts response.read_bodyUpdate student dates and transition rooms
Requires school_id assigned to the session and an authenticated user belonging to company_id. Attribution comes from that user; updated_by_email is accepted but ignored. At least one update property is required. Unknown properties return 400. Dates and room UUIDs may be cleared with null or an empty string; omission leaves them unchanged.
Validation uses the resulting student state, including existing values:
- transition_date_2 requires transition_date.
- transition_room_override_id requires transition_date.
- transition_room_2_id requires transition_date_2.
- Effective start date must precede transition_date; transition_date must precede transition_date_2 when present; both transitions must precede the effective withdrawal date.
- Specified room IDs must be active rooms in the student’s school.
Returns an update summary containing student_data, not the full GET representation. Unlike the shared write decoder, this handler does not enforce Content-Type. A post-update retrieval failure can return 404 or 500 after the write has executed.
curl --request PATCH \
--url https://{host}/primula/api/v3/students/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"transition_date": "2030-09-01",
"transition_room_override_id": null
}
'import requests
url = "https://{host}/primula/api/v3/students/{id}"
payload = {
"transition_date": "2030-09-01",
"transition_room_override_id": None
}
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({transition_date: '2030-09-01', transition_room_override_id: null})
};
fetch('https://{host}/primula/api/v3/students/{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://{host}/primula/api/v3/students/{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([
'transition_date' => '2030-09-01',
'transition_room_override_id' => null
]),
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://{host}/primula/api/v3/students/{id}"
payload := strings.NewReader("{\n \"transition_date\": \"2030-09-01\",\n \"transition_room_override_id\": null\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://{host}/primula/api/v3/students/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"transition_date\": \"2030-09-01\",\n \"transition_room_override_id\": null\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{host}/primula/api/v3/students/{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 \"transition_date\": \"2030-09-01\",\n \"transition_room_override_id\": null\n}"
response = http.request(request)
puts response.read_bodyAuthorizations
Access token issued by POST /sessions and associated with a valid server-side session.
Path Parameters
UUID identifying this resource.
Query Parameters
Company UUID. Must equal the authenticated session company when that session has a company assigned; the equality check is skipped for sessions without one.
School UUID. Must be assigned to the authenticated session.
Body
- Option 1
- Option 2
- Option 3
- Option 4
- Option 5
- Option 6
- Option 7
Update Student Request.
Omit to retain the existing value. Null or an empty/whitespace-only string clears it. Nonempty strings are trimmed.
Accepted for compatibility, but attribution uses the authenticated session user and ignores this value.
Omit to retain the existing value. Null or an empty/whitespace-only string clears it. Nonempty strings are trimmed.
Omit to retain the existing value. Null or an empty/whitespace-only string clears it. Nonempty strings are trimmed.
Omit to retain the existing value. Null or an empty/whitespace-only string clears it. Nonempty strings are trimmed.
Omit to retain the existing value. Null or an empty/whitespace-only string clears it. Nonempty strings are trimmed.
Omit to retain the existing value. Null or an empty/whitespace-only string clears it. Nonempty strings are trimmed.
Omit to retain the existing value. Null or an empty/whitespace-only string clears it. Nonempty strings are trimmed.
Response
Successful response.