cURL
curl --request POST \
--url https://api.ctrl-hub.com/v3/briefings/{briefing_id}/resend \
--header 'X-Session-Token: <api-key>'import requests
url = "https://api.ctrl-hub.com/v3/briefings/{briefing_id}/resend"
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/briefings/{briefing_id}/resend', 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/briefings/{briefing_id}/resend",
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/briefings/{briefing_id}/resend"
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/briefings/{briefing_id}/resend")
.header("X-Session-Token", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ctrl-hub.com/v3/briefings/{briefing_id}/resend")
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": "briefings",
"attributes": {
"title": "Gas escape procedure update",
"body": "<string>",
"status": "draft",
"source": "v3",
"acknowledge_by": "2023-11-07T05:31:56Z",
"sent_at": "2023-11-07T05:31:56Z",
"archived_at": "2023-11-07T05:31:56Z",
"attachments": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "gas-escape-procedure.pdf",
"content_type": "application/pdf",
"size": 123,
"added_at": "2023-11-07T05:31:56Z"
}
],
"targeting": {
"organisation": false,
"teams": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"job_roles": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"members": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"contractor_job_roles": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"contractor_organisations": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
]
}
},
"relationships": {
"organisation": {
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "organisations"
}
},
"author": {
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "users"
}
}
},
"meta": {
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"stats": {
"recipients": 123,
"viewed": 123,
"acknowledged": 123,
"overdue": 123
},
"recipient": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"state": "sent",
"overdue": true,
"sent_at": "2023-11-07T05:31:56Z",
"viewed_at": "2023-11-07T05:31:56Z",
"acknowledged_at": "2023-11-07T05:31:56Z"
}
}
},
"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"
}{
"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."
}Briefings
Re-send a briefing
Resolve a sent briefing’s targeting again, and add only the people who now match it and are not already recipients. Existing recipients and their acknowledgements are unchanged. Contractor targets reach only the contractors the briefing was first sent to.
Requires briefings:update on the organisation that owns the briefing.
POST
/
v3
/
briefings
/
{briefing_id}
/
resend
cURL
curl --request POST \
--url https://api.ctrl-hub.com/v3/briefings/{briefing_id}/resend \
--header 'X-Session-Token: <api-key>'import requests
url = "https://api.ctrl-hub.com/v3/briefings/{briefing_id}/resend"
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/briefings/{briefing_id}/resend', 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/briefings/{briefing_id}/resend",
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/briefings/{briefing_id}/resend"
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/briefings/{briefing_id}/resend")
.header("X-Session-Token", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ctrl-hub.com/v3/briefings/{briefing_id}/resend")
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": "briefings",
"attributes": {
"title": "Gas escape procedure update",
"body": "<string>",
"status": "draft",
"source": "v3",
"acknowledge_by": "2023-11-07T05:31:56Z",
"sent_at": "2023-11-07T05:31:56Z",
"archived_at": "2023-11-07T05:31:56Z",
"attachments": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "gas-escape-procedure.pdf",
"content_type": "application/pdf",
"size": 123,
"added_at": "2023-11-07T05:31:56Z"
}
],
"targeting": {
"organisation": false,
"teams": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"job_roles": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"members": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"contractor_job_roles": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"contractor_organisations": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
]
}
},
"relationships": {
"organisation": {
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "organisations"
}
},
"author": {
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "users"
}
}
},
"meta": {
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"stats": {
"recipients": 123,
"viewed": 123,
"acknowledged": 123,
"overdue": 123
},
"recipient": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"state": "sent",
"overdue": true,
"sent_at": "2023-11-07T05:31:56Z",
"viewed_at": "2023-11-07T05:31:56Z",
"acknowledged_at": "2023-11-07T05:31:56Z"
}
}
},
"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"
}{
"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 briefing.