curl --request POST \
--url https://customer-api.mountthor.com/compute/v2/eventsubscriptions/{name}/key \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"requestId": "<string>",
"gracePeriod": "<string>"
}
'import requests
url = "https://customer-api.mountthor.com/compute/v2/eventsubscriptions/{name}/key"
payload = {
"requestId": "<string>",
"gracePeriod": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({requestId: '<string>', gracePeriod: '<string>'})
};
fetch('https://customer-api.mountthor.com/compute/v2/eventsubscriptions/{name}/key', 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://customer-api.mountthor.com/compute/v2/eventsubscriptions/{name}/key",
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([
'requestId' => '<string>',
'gracePeriod' => '<string>'
]),
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://customer-api.mountthor.com/compute/v2/eventsubscriptions/{name}/key"
payload := strings.NewReader("{\n \"requestId\": \"<string>\",\n \"gracePeriod\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", 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.post("https://customer-api.mountthor.com/compute/v2/eventsubscriptions/{name}/key")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"requestId\": \"<string>\",\n \"gracePeriod\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://customer-api.mountthor.com/compute/v2/eventsubscriptions/{name}/key")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"requestId\": \"<string>\",\n \"gracePeriod\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"hmacKey": "<string>",
"previousKeyExpireAt": "2023-11-07T05:31:56Z"
}{
"error": {
"code": 123,
"status": "<string>",
"reason": "<string>",
"message": "<string>"
}
}{
"error": {
"code": 123,
"status": "<string>",
"reason": "<string>",
"message": "<string>"
}
}{
"error": {
"code": 123,
"status": "<string>",
"reason": "<string>",
"message": "<string>"
}
}{
"error": {
"code": 123,
"status": "<string>",
"reason": "<string>",
"message": "<string>"
}
}{
"error": {
"code": 123,
"status": "<string>",
"reason": "<string>",
"message": "<string>"
}
}{
"error": {
"code": 123,
"status": "<string>",
"reason": "<string>",
"message": "<string>"
}
}{
"error": {
"code": 123,
"status": "<string>",
"reason": "<string>",
"message": "<string>"
}
}{
"error": {
"code": 123,
"status": "<string>",
"reason": "<string>",
"message": "<string>"
}
}Rotate signing key
Generates a new signing key for a subscription. The previous key keeps signing deliveries alongside it for gracePeriod: 24 hours when omitted, or "0s" to retire every earlier key at once. Send a new requestId (a UUID) for each rotation. To recover a lost answer, repeat the request with the same requestId and the same gracePeriod (omitted counts as 24 hours). For 24 hours after the rotation succeeded, that returns the same key and previousKeyExpireAt instead of generating another, unless a later rotation has replaced that key. Every account can use event subscriptions. In an account whose Macs your organization manages, they need the events capability.
Service accounts can call it with the compute:RotateEventSubscriptionKey permission.
curl --request POST \
--url https://customer-api.mountthor.com/compute/v2/eventsubscriptions/{name}/key \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"requestId": "<string>",
"gracePeriod": "<string>"
}
'import requests
url = "https://customer-api.mountthor.com/compute/v2/eventsubscriptions/{name}/key"
payload = {
"requestId": "<string>",
"gracePeriod": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({requestId: '<string>', gracePeriod: '<string>'})
};
fetch('https://customer-api.mountthor.com/compute/v2/eventsubscriptions/{name}/key', 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://customer-api.mountthor.com/compute/v2/eventsubscriptions/{name}/key",
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([
'requestId' => '<string>',
'gracePeriod' => '<string>'
]),
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://customer-api.mountthor.com/compute/v2/eventsubscriptions/{name}/key"
payload := strings.NewReader("{\n \"requestId\": \"<string>\",\n \"gracePeriod\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", 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.post("https://customer-api.mountthor.com/compute/v2/eventsubscriptions/{name}/key")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"requestId\": \"<string>\",\n \"gracePeriod\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://customer-api.mountthor.com/compute/v2/eventsubscriptions/{name}/key")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"requestId\": \"<string>\",\n \"gracePeriod\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"hmacKey": "<string>",
"previousKeyExpireAt": "2023-11-07T05:31:56Z"
}{
"error": {
"code": 123,
"status": "<string>",
"reason": "<string>",
"message": "<string>"
}
}{
"error": {
"code": 123,
"status": "<string>",
"reason": "<string>",
"message": "<string>"
}
}{
"error": {
"code": 123,
"status": "<string>",
"reason": "<string>",
"message": "<string>"
}
}{
"error": {
"code": 123,
"status": "<string>",
"reason": "<string>",
"message": "<string>"
}
}{
"error": {
"code": 123,
"status": "<string>",
"reason": "<string>",
"message": "<string>"
}
}{
"error": {
"code": 123,
"status": "<string>",
"reason": "<string>",
"message": "<string>"
}
}{
"error": {
"code": 123,
"status": "<string>",
"reason": "<string>",
"message": "<string>"
}
}{
"error": {
"code": 123,
"status": "<string>",
"reason": "<string>",
"message": "<string>"
}
}Authorizations
Send Authorization: Bearer <credential> to https://customer-api.mountthor.com. People use the session that mthr login stores (a token starting mt_session_, valid for up to 12 hours). Automation uses a service-account credential (starting mt_sa_v1_, valid for 90 days) from Create credential. Each operation names the permission it needs. Service accounts hold permissions through custom roles, and some operations refuse them; those operations say so.
Path Parameters
The subscription's name.
Body
The rotation to make.
A UUID you generate for this rotation. Use it again only to retry the same rotation.
Optional. How long the previous key keeps signing beside the new one, as a duration such as "3600s". 24 hours when omitted, and at most 24 hours. "0s" retires every earlier key at once.
^-?(?:0|[1-9][0-9]{0,11})(?:\.[0-9]{1,9})?s$Response
OK
The new signing key.
The new signing key, base64-encoded. Treat it as a secret.
When the previous key stops signing deliveries. Until then each delivery carries a signature from both keys. It is the rotation time when gracePeriod was "0s". Stop trusting the previous key after it.