curl --request POST \
--url https://use.hoop.dev/api/sidecars/handshake \
--header 'Content-Type: application/json' \
--header 'hoop-sidecar-token: <hoop-sidecar-token>' \
--data '
{
"version": "1.0.0",
"applied_revision": "8f14e45fceea167a5a36dedd4bea2543",
"last_outcome": "applied"
}
'import requests
url = "https://use.hoop.dev/api/sidecars/handshake"
payload = {
"version": "1.0.0",
"applied_revision": "8f14e45fceea167a5a36dedd4bea2543",
"last_outcome": "applied"
}
headers = {
"hoop-sidecar-token": "<hoop-sidecar-token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'hoop-sidecar-token': '<hoop-sidecar-token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
version: '1.0.0',
applied_revision: '8f14e45fceea167a5a36dedd4bea2543',
last_outcome: 'applied'
})
};
fetch('https://use.hoop.dev/api/sidecars/handshake', 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://use.hoop.dev/api/sidecars/handshake",
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([
'version' => '1.0.0',
'applied_revision' => '8f14e45fceea167a5a36dedd4bea2543',
'last_outcome' => 'applied'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"hoop-sidecar-token: <hoop-sidecar-token>"
],
]);
$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://use.hoop.dev/api/sidecars/handshake"
payload := strings.NewReader("{\n \"version\": \"1.0.0\",\n \"applied_revision\": \"8f14e45fceea167a5a36dedd4bea2543\",\n \"last_outcome\": \"applied\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("hoop-sidecar-token", "<hoop-sidecar-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.post("https://use.hoop.dev/api/sidecars/handshake")
.header("hoop-sidecar-token", "<hoop-sidecar-token>")
.header("Content-Type", "application/json")
.body("{\n \"version\": \"1.0.0\",\n \"applied_revision\": \"8f14e45fceea167a5a36dedd4bea2543\",\n \"last_outcome\": \"applied\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://use.hoop.dev/api/sidecars/handshake")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["hoop-sidecar-token"] = '<hoop-sidecar-token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"version\": \"1.0.0\",\n \"applied_revision\": \"8f14e45fceea167a5a36dedd4bea2543\",\n \"last_outcome\": \"applied\"\n}"
response = http.request(request)
puts response.read_body{}{
"message": "the error description"
}{
"message": "the error description"
}{
"message": "the error description"
}{
"message": "the error description"
}{
"message": "the error description"
}{
"message": "the error description"
}Sidecar Handshake
Authenticated with the hoop-sidecar-token header. Records the reported version and returns the configuration the sidecar must serve. A sidecar whose stored configuration sets load_from_disk receives only that flag and its license, and runs its own config file. Answers 412 while no configuration with listeners is assigned, recording nothing: a sidecar that cannot run must not show up as recently seen. Answers 422 when the configuration uses a feature the hoop-sidecar-capabilities header does not list. The answer carries the organization’s license in its “license” key; the sidecar verifies that signature itself and the license is never stored per sidecar.
curl --request POST \
--url https://use.hoop.dev/api/sidecars/handshake \
--header 'Content-Type: application/json' \
--header 'hoop-sidecar-token: <hoop-sidecar-token>' \
--data '
{
"version": "1.0.0",
"applied_revision": "8f14e45fceea167a5a36dedd4bea2543",
"last_outcome": "applied"
}
'import requests
url = "https://use.hoop.dev/api/sidecars/handshake"
payload = {
"version": "1.0.0",
"applied_revision": "8f14e45fceea167a5a36dedd4bea2543",
"last_outcome": "applied"
}
headers = {
"hoop-sidecar-token": "<hoop-sidecar-token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'hoop-sidecar-token': '<hoop-sidecar-token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
version: '1.0.0',
applied_revision: '8f14e45fceea167a5a36dedd4bea2543',
last_outcome: 'applied'
})
};
fetch('https://use.hoop.dev/api/sidecars/handshake', 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://use.hoop.dev/api/sidecars/handshake",
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([
'version' => '1.0.0',
'applied_revision' => '8f14e45fceea167a5a36dedd4bea2543',
'last_outcome' => 'applied'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"hoop-sidecar-token: <hoop-sidecar-token>"
],
]);
$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://use.hoop.dev/api/sidecars/handshake"
payload := strings.NewReader("{\n \"version\": \"1.0.0\",\n \"applied_revision\": \"8f14e45fceea167a5a36dedd4bea2543\",\n \"last_outcome\": \"applied\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("hoop-sidecar-token", "<hoop-sidecar-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.post("https://use.hoop.dev/api/sidecars/handshake")
.header("hoop-sidecar-token", "<hoop-sidecar-token>")
.header("Content-Type", "application/json")
.body("{\n \"version\": \"1.0.0\",\n \"applied_revision\": \"8f14e45fceea167a5a36dedd4bea2543\",\n \"last_outcome\": \"applied\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://use.hoop.dev/api/sidecars/handshake")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["hoop-sidecar-token"] = '<hoop-sidecar-token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"version\": \"1.0.0\",\n \"applied_revision\": \"8f14e45fceea167a5a36dedd4bea2543\",\n \"last_outcome\": \"applied\"\n}"
response = http.request(request)
puts response.read_body{}{
"message": "the error description"
}{
"message": "the error description"
}{
"message": "the error description"
}{
"message": "the error description"
}{
"message": "the error description"
}{
"message": "the error description"
}Headers
The token returned when the sidecar was created
Comma-separated served-document features this sidecar decodes, such as review_mode. Absent means a build too old to report.
Body
The request body resource
Version of the sidecar binary
"1.0.0"
AppliedRevision is the hoop-sidecar-config-revision of the last configuration this sidecar actually took on, which is not necessarily the last one it was served: a document it refused, or one needing a restart, leaves this at the revision still running.
Optional. A sidecar too old to report it, or one that has handled no document yet, sends nothing and is reported as unknown rather than as converged.
"8f14e45fceea167a5a36dedd4bea2543"
LastOutcome is what this sidecar concluded about that configuration: applied, restart, refused, unchanged or retry. It is the only way to tell a sidecar enforcing the current rules from one that refused them and kept the old ones while still handshaking on time.
Optional, for the same reason as AppliedRevision.
"applied"
Response
OK
The response is of type object.
Was this page helpful?