curl --request POST \
--url https://api.ctrl-hub.com/v3/operations/{operation_id}/allocate \
--header 'Content-Type: application/vnd.api+json' \
--header 'X-Session-Token: <api-key>' \
--data '
{
"data": {
"type": "operation-allocations",
"relationships": {
"work_order": {
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "work-orders"
}
}
}
}
}
'import requests
url = "https://api.ctrl-hub.com/v3/operations/{operation_id}/allocate"
payload = { "data": {
"type": "operation-allocations",
"relationships": { "work_order": { "data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "work-orders"
} } }
} }
headers = {
"X-Session-Token": "<api-key>",
"Content-Type": "application/vnd.api+json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-Session-Token': '<api-key>', 'Content-Type': 'application/vnd.api+json'},
body: JSON.stringify({
data: {
type: 'operation-allocations',
relationships: {
work_order: {data: {id: '3c90c3cc-0d44-4b50-8888-8dd25736052a', type: 'work-orders'}}
}
}
})
};
fetch('https://api.ctrl-hub.com/v3/operations/{operation_id}/allocate', 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/operations/{operation_id}/allocate",
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([
'data' => [
'type' => 'operation-allocations',
'relationships' => [
'work_order' => [
'data' => [
'id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'type' => 'work-orders'
]
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/vnd.api+json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.ctrl-hub.com/v3/operations/{operation_id}/allocate"
payload := strings.NewReader("{\n \"data\": {\n \"type\": \"operation-allocations\",\n \"relationships\": {\n \"work_order\": {\n \"data\": {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"type\": \"work-orders\"\n }\n }\n }\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Session-Token", "<api-key>")
req.Header.Add("Content-Type", "application/vnd.api+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.ctrl-hub.com/v3/operations/{operation_id}/allocate")
.header("X-Session-Token", "<api-key>")
.header("Content-Type", "application/vnd.api+json")
.body("{\n \"data\": {\n \"type\": \"operation-allocations\",\n \"relationships\": {\n \"work_order\": {\n \"data\": {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"type\": \"work-orders\"\n }\n }\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ctrl-hub.com/v3/operations/{operation_id}/allocate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Session-Token"] = '<api-key>'
request["Content-Type"] = 'application/vnd.api+json'
request.body = "{\n \"data\": {\n \"type\": \"operation-allocations\",\n \"relationships\": {\n \"work_order\": {\n \"data\": {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"type\": \"work-orders\"\n }\n }\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "operations",
"attributes": {
"name": "<string>",
"status": "done",
"code": "<string>",
"description": "<string>",
"requires_meter_details": false,
"dates": {
"scheduled": {
"start": "2023-11-07T05:31:56Z",
"end": "2023-11-07T05:31:56Z"
}
},
"labels": [
{
"key": "Your label key",
"value": "Your label value"
}
],
"requirements": {
"forms": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"required": true
}
]
},
"done_reason": "aborted"
},
"meta": {
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"counts": {
"streets": 0,
"properties": 0,
"locations": 0
},
"related_data": {
"properties": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"postcode": "<string>"
}
]
}
},
"relationships": {
"organisation": {
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "organisations"
}
},
"scheme": {
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "schemes"
}
},
"work_order": {
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "work-orders"
}
},
"appointment": {
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "appointments"
}
},
"permits": {
"data": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "permits"
}
]
},
"template": {
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "operation-templates"
}
},
"type": {
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "operation-types"
}
},
"teams": {
"data": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "teams"
}
]
},
"assignees": {
"data": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "users"
}
]
},
"properties": {
"data": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "properties"
}
]
},
"locations": {
"data": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "locations"
}
]
},
"streets": {
"data": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "streets"
}
]
},
"created_by_user": {
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "users"
}
},
"created_by_service_account": {
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "service-accounts"
}
}
}
},
"jsonapi": {
"version": "1.0"
},
"included": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "forms",
"attributes": {
"name": "<string>",
"description": "<string>",
"status": "draft"
},
"meta": {
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"modified_at": "2023-11-07T05:31:56Z",
"counts": {
"schemas": 0,
"categories": 0,
"submissions": 0,
"submission_versions": 0
}
},
"relationships": {
"organisation": {
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "organisations"
}
},
"categories": {
"data": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "form-categories"
}
]
},
"schemas": {
"data": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "form-schemas"
}
]
},
"author": {
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "users"
}
},
"workflow": {
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "workflow-definitions"
}
},
"latest_schema": {
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "form-schemas"
}
},
"submissions": {
"data": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "form-submissions"
}
]
}
}
}
]
}{
"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"
}{
"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."
}Allocate an operation
Allocate an unallocated operation to a work order. An operation can be allocated once: this is how an operation logged against a property, with no work order or scheme, is brought into the planned work.
The operation takes the work order’s scheme, and the work order and scheme totals are rebuilt to include it.
The work order must be in the operation’s organisation.
The request is refused with 409 Conflict if the operation already has a work order, or if the work order already holds a permit for the same Street Manager works as the operation. An operation is never moved between work orders, and never has a permit dropped to make it fit.
curl --request POST \
--url https://api.ctrl-hub.com/v3/operations/{operation_id}/allocate \
--header 'Content-Type: application/vnd.api+json' \
--header 'X-Session-Token: <api-key>' \
--data '
{
"data": {
"type": "operation-allocations",
"relationships": {
"work_order": {
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "work-orders"
}
}
}
}
}
'import requests
url = "https://api.ctrl-hub.com/v3/operations/{operation_id}/allocate"
payload = { "data": {
"type": "operation-allocations",
"relationships": { "work_order": { "data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "work-orders"
} } }
} }
headers = {
"X-Session-Token": "<api-key>",
"Content-Type": "application/vnd.api+json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-Session-Token': '<api-key>', 'Content-Type': 'application/vnd.api+json'},
body: JSON.stringify({
data: {
type: 'operation-allocations',
relationships: {
work_order: {data: {id: '3c90c3cc-0d44-4b50-8888-8dd25736052a', type: 'work-orders'}}
}
}
})
};
fetch('https://api.ctrl-hub.com/v3/operations/{operation_id}/allocate', 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/operations/{operation_id}/allocate",
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([
'data' => [
'type' => 'operation-allocations',
'relationships' => [
'work_order' => [
'data' => [
'id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'type' => 'work-orders'
]
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/vnd.api+json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.ctrl-hub.com/v3/operations/{operation_id}/allocate"
payload := strings.NewReader("{\n \"data\": {\n \"type\": \"operation-allocations\",\n \"relationships\": {\n \"work_order\": {\n \"data\": {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"type\": \"work-orders\"\n }\n }\n }\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Session-Token", "<api-key>")
req.Header.Add("Content-Type", "application/vnd.api+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.ctrl-hub.com/v3/operations/{operation_id}/allocate")
.header("X-Session-Token", "<api-key>")
.header("Content-Type", "application/vnd.api+json")
.body("{\n \"data\": {\n \"type\": \"operation-allocations\",\n \"relationships\": {\n \"work_order\": {\n \"data\": {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"type\": \"work-orders\"\n }\n }\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ctrl-hub.com/v3/operations/{operation_id}/allocate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Session-Token"] = '<api-key>'
request["Content-Type"] = 'application/vnd.api+json'
request.body = "{\n \"data\": {\n \"type\": \"operation-allocations\",\n \"relationships\": {\n \"work_order\": {\n \"data\": {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"type\": \"work-orders\"\n }\n }\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "operations",
"attributes": {
"name": "<string>",
"status": "done",
"code": "<string>",
"description": "<string>",
"requires_meter_details": false,
"dates": {
"scheduled": {
"start": "2023-11-07T05:31:56Z",
"end": "2023-11-07T05:31:56Z"
}
},
"labels": [
{
"key": "Your label key",
"value": "Your label value"
}
],
"requirements": {
"forms": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"required": true
}
]
},
"done_reason": "aborted"
},
"meta": {
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"counts": {
"streets": 0,
"properties": 0,
"locations": 0
},
"related_data": {
"properties": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"postcode": "<string>"
}
]
}
},
"relationships": {
"organisation": {
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "organisations"
}
},
"scheme": {
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "schemes"
}
},
"work_order": {
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "work-orders"
}
},
"appointment": {
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "appointments"
}
},
"permits": {
"data": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "permits"
}
]
},
"template": {
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "operation-templates"
}
},
"type": {
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "operation-types"
}
},
"teams": {
"data": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "teams"
}
]
},
"assignees": {
"data": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "users"
}
]
},
"properties": {
"data": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "properties"
}
]
},
"locations": {
"data": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "locations"
}
]
},
"streets": {
"data": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "streets"
}
]
},
"created_by_user": {
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "users"
}
},
"created_by_service_account": {
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "service-accounts"
}
}
}
},
"jsonapi": {
"version": "1.0"
},
"included": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "forms",
"attributes": {
"name": "<string>",
"description": "<string>",
"status": "draft"
},
"meta": {
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"modified_at": "2023-11-07T05:31:56Z",
"counts": {
"schemas": 0,
"categories": 0,
"submissions": 0,
"submission_versions": 0
}
},
"relationships": {
"organisation": {
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "organisations"
}
},
"categories": {
"data": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "form-categories"
}
]
},
"schemas": {
"data": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "form-schemas"
}
]
},
"author": {
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "users"
}
},
"workflow": {
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "workflow-definitions"
}
},
"latest_schema": {
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "form-schemas"
}
},
"submissions": {
"data": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "form-submissions"
}
]
}
}
}
]
}{
"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"
}{
"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
Session token for authentication.
Path Parameters
The unique identifier for the operation.
Body
The work order to allocate an unallocated operation to.
The request type is operation-allocations, but there is no such resource:
nothing of that name is stored and nothing can be fetched back by that id. It
names the action, and the response is the operation it allocated.
Show child attributes
Show child attributes
Response
An individual operation.
JSON API response object
An operation
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Related resources that can be included when an operation is returned
A form
- Option 1
- Option 2
- Option 3
- Option 4
- Option 5
- Option 6
- Option 7
- Option 8
- Option 9
- Option 10
- Option 11
- Option 12
Show child attributes
Show child attributes