Hand over a construction phase plan
curl --request POST \
--url https://api.ctrl-hub.com/v3/construction-phase-plans/{construction_phase_plan_id}/handover \
--header 'X-Session-Token: <api-key>'import requests
url = "https://api.ctrl-hub.com/v3/construction-phase-plans/{construction_phase_plan_id}/handover"
headers = {"X-Session-Token": "<api-key>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {'X-Session-Token': '<api-key>'}};
fetch('https://api.ctrl-hub.com/v3/construction-phase-plans/{construction_phase_plan_id}/handover', 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.ctrl-hub.com/v3/construction-phase-plans/{construction_phase_plan_id}/handover",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"X-Session-Token: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.ctrl-hub.com/v3/construction-phase-plans/{construction_phase_plan_id}/handover"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("X-Session-Token", "<api-key>")
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.ctrl-hub.com/v3/construction-phase-plans/{construction_phase_plan_id}/handover")
.header("X-Session-Token", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ctrl-hub.com/v3/construction-phase-plans/{construction_phase_plan_id}/handover")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Session-Token"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "construction-phase-plan-revisions",
"attributes": {
"number": 2,
"cause": "handover",
"proposer": {
"acting_role": "client_and_principal_designer",
"organisation_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"at": "2023-11-07T05:31:56Z",
"principal_type": "users",
"principal_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
},
"recipient": {
"acting_role": "client_and_principal_designer",
"organisation_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"at": "2023-11-07T05:31:56Z",
"principal_type": "users",
"principal_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
},
"minted_at": "2023-11-07T05:31:56Z",
"document": {
"health_and_safety_aims": {
"aims": "<string>"
},
"site_rules": {
"rules": [
"<string>"
]
},
"induction": {
"points": [
"<string>"
],
"declarations": [
"<string>"
]
},
"welfare": {
"toilets": "<string>",
"washing": "<string>",
"drinking_water": "<string>",
"rest_and_eating": "<string>",
"changing_and_drying": "<string>",
"location": "<string>"
},
"emergency_arrangements": {
"emergency_procedures": "<string>",
"fire_arrangements": "<string>",
"first_aid_arrangements": "<string>",
"first_aiders": [
{
"name": "<string>",
"user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"nearest_hospital": "<string>"
},
"monitoring_and_review": {
"arrangements": "<string>",
"review_frequency": "<string>"
},
"key_operatives": [
{
"name": "<string>",
"role": "<string>",
"phone": "<string>",
"user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"job_role_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"client_checklist": {
"management_arrangements": {
"answer": "yes",
"comments": "<string>"
},
"time_and_resources": {
"answer": "yes",
"comments": "<string>"
},
"pre_construction_information": {
"answer": "yes",
"comments": "<string>"
},
"principal_designer_appointed": {
"answer": "yes",
"comments": "<string>"
},
"principal_contractor_appointed": {
"answer": "yes",
"comments": "<string>"
},
"construction_phase_plan_in_place": {
"answer": "yes",
"comments": "<string>"
},
"welfare_provided": {
"answer": "yes",
"comments": "<string>"
},
"health_and_safety_file_arranged": {
"answer": "yes",
"comments": "<string>"
},
"notification_made": {
"answer": "yes",
"comments": "<string>"
},
"competence_checked": {
"answer": "yes",
"comments": "<string>"
}
}
},
"risks": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"hazard_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"hazard_ref": "<string>",
"hazard_version": 123,
"hazard_snapshot": {
"description": "<string>",
"associated_activity": "<string>"
},
"control_measure": "<string>",
"responsible_party": "<string>",
"responsible_party_user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"responsible_party_organisation_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"implemented_on": "2023-12-25"
}
],
"attestations": [
{
"section": "<string>",
"acting_role": "client_and_principal_designer",
"attested_at": "2023-11-07T05:31:56Z",
"attested_by_type": "users",
"attested_by_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"revision": 123,
"organisation_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
]
},
"relationships": {
"construction_phase_plan": {
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "construction-phase-plans"
}
},
"proposed_change": {
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "construction-phase-plan-proposed-changes"
}
},
"pre_construction_information_proposed_change": {
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "pre-construction-information-proposed-changes"
}
}
}
},
"jsonapi": {
"version": "1.0"
}
}{
"id": "98ca4a78-b66f-4234-9719-aaf832ee6669",
"status": "400",
"title": "A validation error was encountered",
"source": {
"parameter": "include"
},
"meta": {
"resource": "wrong_value"
}
}{
"id": "05fc9c8d-73b9-4697-9337-57f7a567a48f",
"status": "401",
"title": "You are not authorised to access this resource",
"detail": "In order to access this resource, you need the 'admin' role.",
"code": "AUTH.001"
}{
"errors": [
{
"id": "1b3f2c30-2d56-4d3a-9c44-9be9c2cbf2f0",
"status": "403",
"title": "Forbidden",
"detail": "You do not hold the grant required for this action.",
"code": "AUTH.002"
}
]
}{
"id": "7b4c8f12-3e9a-4d5b-8c6f-1a2b3c4d5e6f",
"status": "404",
"title": "Resource not found",
"detail": "The requested resource could not be found or does not exist.",
"code": "NOT_FOUND.001"
}{
"id": "8e2f9a34-b5c6-4d7e-9f8a-2b3c4d5e6f7g",
"status": "409",
"title": "Conflict",
"detail": "The request conflicts with the current state of the resource.",
"code": "CONFLICT.001"
}{
"id": "fe9d9a69-f0a7-4fdc-bb2c-176027f316c5",
"status": "500",
"title": "Internal Server Error",
"detail": "An unexpected error occurred on the server."
}Construction Phase Plans
Hand over a construction phase plan
Hand the document over to the other party, which mints revision 1. Only the Principal Contractor can, and only once. The handing-over principal comes from the request, and the recipient is the Client. After handover every change goes through a proposed change.
POST
/
v3
/
construction-phase-plans
/
{construction_phase_plan_id}
/
handover
Hand over a construction phase plan
curl --request POST \
--url https://api.ctrl-hub.com/v3/construction-phase-plans/{construction_phase_plan_id}/handover \
--header 'X-Session-Token: <api-key>'import requests
url = "https://api.ctrl-hub.com/v3/construction-phase-plans/{construction_phase_plan_id}/handover"
headers = {"X-Session-Token": "<api-key>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {'X-Session-Token': '<api-key>'}};
fetch('https://api.ctrl-hub.com/v3/construction-phase-plans/{construction_phase_plan_id}/handover', 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.ctrl-hub.com/v3/construction-phase-plans/{construction_phase_plan_id}/handover",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"X-Session-Token: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.ctrl-hub.com/v3/construction-phase-plans/{construction_phase_plan_id}/handover"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("X-Session-Token", "<api-key>")
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.ctrl-hub.com/v3/construction-phase-plans/{construction_phase_plan_id}/handover")
.header("X-Session-Token", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ctrl-hub.com/v3/construction-phase-plans/{construction_phase_plan_id}/handover")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Session-Token"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "construction-phase-plan-revisions",
"attributes": {
"number": 2,
"cause": "handover",
"proposer": {
"acting_role": "client_and_principal_designer",
"organisation_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"at": "2023-11-07T05:31:56Z",
"principal_type": "users",
"principal_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
},
"recipient": {
"acting_role": "client_and_principal_designer",
"organisation_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"at": "2023-11-07T05:31:56Z",
"principal_type": "users",
"principal_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
},
"minted_at": "2023-11-07T05:31:56Z",
"document": {
"health_and_safety_aims": {
"aims": "<string>"
},
"site_rules": {
"rules": [
"<string>"
]
},
"induction": {
"points": [
"<string>"
],
"declarations": [
"<string>"
]
},
"welfare": {
"toilets": "<string>",
"washing": "<string>",
"drinking_water": "<string>",
"rest_and_eating": "<string>",
"changing_and_drying": "<string>",
"location": "<string>"
},
"emergency_arrangements": {
"emergency_procedures": "<string>",
"fire_arrangements": "<string>",
"first_aid_arrangements": "<string>",
"first_aiders": [
{
"name": "<string>",
"user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"nearest_hospital": "<string>"
},
"monitoring_and_review": {
"arrangements": "<string>",
"review_frequency": "<string>"
},
"key_operatives": [
{
"name": "<string>",
"role": "<string>",
"phone": "<string>",
"user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"job_role_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"client_checklist": {
"management_arrangements": {
"answer": "yes",
"comments": "<string>"
},
"time_and_resources": {
"answer": "yes",
"comments": "<string>"
},
"pre_construction_information": {
"answer": "yes",
"comments": "<string>"
},
"principal_designer_appointed": {
"answer": "yes",
"comments": "<string>"
},
"principal_contractor_appointed": {
"answer": "yes",
"comments": "<string>"
},
"construction_phase_plan_in_place": {
"answer": "yes",
"comments": "<string>"
},
"welfare_provided": {
"answer": "yes",
"comments": "<string>"
},
"health_and_safety_file_arranged": {
"answer": "yes",
"comments": "<string>"
},
"notification_made": {
"answer": "yes",
"comments": "<string>"
},
"competence_checked": {
"answer": "yes",
"comments": "<string>"
}
}
},
"risks": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"hazard_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"hazard_ref": "<string>",
"hazard_version": 123,
"hazard_snapshot": {
"description": "<string>",
"associated_activity": "<string>"
},
"control_measure": "<string>",
"responsible_party": "<string>",
"responsible_party_user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"responsible_party_organisation_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"implemented_on": "2023-12-25"
}
],
"attestations": [
{
"section": "<string>",
"acting_role": "client_and_principal_designer",
"attested_at": "2023-11-07T05:31:56Z",
"attested_by_type": "users",
"attested_by_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"revision": 123,
"organisation_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
]
},
"relationships": {
"construction_phase_plan": {
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "construction-phase-plans"
}
},
"proposed_change": {
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "construction-phase-plan-proposed-changes"
}
},
"pre_construction_information_proposed_change": {
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "pre-construction-information-proposed-changes"
}
}
}
},
"jsonapi": {
"version": "1.0"
}
}{
"id": "98ca4a78-b66f-4234-9719-aaf832ee6669",
"status": "400",
"title": "A validation error was encountered",
"source": {
"parameter": "include"
},
"meta": {
"resource": "wrong_value"
}
}{
"id": "05fc9c8d-73b9-4697-9337-57f7a567a48f",
"status": "401",
"title": "You are not authorised to access this resource",
"detail": "In order to access this resource, you need the 'admin' role.",
"code": "AUTH.001"
}{
"errors": [
{
"id": "1b3f2c30-2d56-4d3a-9c44-9be9c2cbf2f0",
"status": "403",
"title": "Forbidden",
"detail": "You do not hold the grant required for this action.",
"code": "AUTH.002"
}
]
}{
"id": "7b4c8f12-3e9a-4d5b-8c6f-1a2b3c4d5e6f",
"status": "404",
"title": "Resource not found",
"detail": "The requested resource could not be found or does not exist.",
"code": "NOT_FOUND.001"
}{
"id": "8e2f9a34-b5c6-4d7e-9f8a-2b3c4d5e6f7g",
"status": "409",
"title": "Conflict",
"detail": "The request conflicts with the current state of the resource.",
"code": "CONFLICT.001"
}{
"id": "fe9d9a69-f0a7-4fdc-bb2c-176027f316c5",
"status": "500",
"title": "Internal Server Error",
"detail": "An unexpected error occurred on the server."
}Authorizations
SessionOAuth2Cookie
Session token for authentication.
Path Parameters
The unique identifier for the construction phase plan resource.
Query Parameters
The organisation you are acting for. It must be one you are a member of. A person in more than one organisation takes the role of the one named here, so a member of both a scheme's owner and its Principal Contractor is the Client when acting for the owner and the Principal Contractor when acting for the contractor. Naming an organisation you are not a member of is answered as not found.