curl --request POST \
--url 'https://api.flashcat.cloud/safari/artifact/gallery/update?app_key=' \
--header 'Content-Type: application/json' \
--data '
{
"artifact_id": "art_VnfrWic8UbB9q3EfYR4Gmg",
"title": "Checkout API latency postmortem (final)"
}
'import requests
url = "https://api.flashcat.cloud/safari/artifact/gallery/update?app_key="
payload = {
"artifact_id": "art_VnfrWic8UbB9q3EfYR4Gmg",
"title": "Checkout API latency postmortem (final)"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
artifact_id: 'art_VnfrWic8UbB9q3EfYR4Gmg',
title: 'Checkout API latency postmortem (final)'
})
};
fetch('https://api.flashcat.cloud/safari/artifact/gallery/update?app_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://api.flashcat.cloud/safari/artifact/gallery/update?app_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([
'artifact_id' => 'art_VnfrWic8UbB9q3EfYR4Gmg',
'title' => 'Checkout API latency postmortem (final)'
]),
CURLOPT_HTTPHEADER => [
"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://api.flashcat.cloud/safari/artifact/gallery/update?app_key="
payload := strings.NewReader("{\n \"artifact_id\": \"art_VnfrWic8UbB9q3EfYR4Gmg\",\n \"title\": \"Checkout API latency postmortem (final)\"\n}")
req, _ := http.NewRequest("POST", url, payload)
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://api.flashcat.cloud/safari/artifact/gallery/update?app_key=")
.header("Content-Type", "application/json")
.body("{\n \"artifact_id\": \"art_VnfrWic8UbB9q3EfYR4Gmg\",\n \"title\": \"Checkout API latency postmortem (final)\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.flashcat.cloud/safari/artifact/gallery/update?app_key=")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"artifact_id\": \"art_VnfrWic8UbB9q3EfYR4Gmg\",\n \"title\": \"Checkout API latency postmortem (final)\"\n}"
response = http.request(request)
puts response.read_body{
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
"data": {
"artifact_id": "art_VnfrWic8UbB9q3EfYR4Gmg",
"title": "Checkout API latency postmortem (final)",
"team_id": 4012,
"team_name": "SRE",
"person_id": 2476001,
"creator_name": "Alice",
"is_mine": true,
"can_edit": true,
"session_id": "sess_VCbVPZrq9YoyBu8sNCmqUy",
"session_title": "Investigate checkout API latency spike",
"file_id": "pf_SdhEA5fbZJGnHzwrNJMMSB",
"name": "checkout-latency-postmortem.html",
"size": 18996,
"content_type": "text/html",
"created_at": 1785293373899,
"updated_at": 1785829000000,
"pinned_at": 1785750000000,
"share_enabled": true,
"public_url": "https://console.flashcat.cloud/share/artifact/art_VnfrWic8UbB9q3EfYR4Gmg",
"shared_by": 2476001,
"shared_at": 1785747928665,
"share_file_id": "pf_SdhEA5fbZJGnHzwrNJMMSB"
}
}{
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
"error": {
"code": "InvalidParameter",
"message": "The specified parameter skill_id is not valid."
}
}{
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
"error": {
"code": "Unauthorized",
"message": "You are unauthorized."
}
}{
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
"error": {
"code": "AccessDenied",
"message": "Access Denied."
}
}{
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
"error": {
"code": "RequestTooFrequently",
"message": "Request too frequently."
}
}{
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
"error": {
"code": "InternalError",
"message": "We encountered an internal error, and it has been reported. Please try again later."
}
}Update artifact
Rename an artifact or transfer it between personal and team scope.
curl --request POST \
--url 'https://api.flashcat.cloud/safari/artifact/gallery/update?app_key=' \
--header 'Content-Type: application/json' \
--data '
{
"artifact_id": "art_VnfrWic8UbB9q3EfYR4Gmg",
"title": "Checkout API latency postmortem (final)"
}
'import requests
url = "https://api.flashcat.cloud/safari/artifact/gallery/update?app_key="
payload = {
"artifact_id": "art_VnfrWic8UbB9q3EfYR4Gmg",
"title": "Checkout API latency postmortem (final)"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
artifact_id: 'art_VnfrWic8UbB9q3EfYR4Gmg',
title: 'Checkout API latency postmortem (final)'
})
};
fetch('https://api.flashcat.cloud/safari/artifact/gallery/update?app_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://api.flashcat.cloud/safari/artifact/gallery/update?app_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([
'artifact_id' => 'art_VnfrWic8UbB9q3EfYR4Gmg',
'title' => 'Checkout API latency postmortem (final)'
]),
CURLOPT_HTTPHEADER => [
"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://api.flashcat.cloud/safari/artifact/gallery/update?app_key="
payload := strings.NewReader("{\n \"artifact_id\": \"art_VnfrWic8UbB9q3EfYR4Gmg\",\n \"title\": \"Checkout API latency postmortem (final)\"\n}")
req, _ := http.NewRequest("POST", url, payload)
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://api.flashcat.cloud/safari/artifact/gallery/update?app_key=")
.header("Content-Type", "application/json")
.body("{\n \"artifact_id\": \"art_VnfrWic8UbB9q3EfYR4Gmg\",\n \"title\": \"Checkout API latency postmortem (final)\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.flashcat.cloud/safari/artifact/gallery/update?app_key=")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"artifact_id\": \"art_VnfrWic8UbB9q3EfYR4Gmg\",\n \"title\": \"Checkout API latency postmortem (final)\"\n}"
response = http.request(request)
puts response.read_body{
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
"data": {
"artifact_id": "art_VnfrWic8UbB9q3EfYR4Gmg",
"title": "Checkout API latency postmortem (final)",
"team_id": 4012,
"team_name": "SRE",
"person_id": 2476001,
"creator_name": "Alice",
"is_mine": true,
"can_edit": true,
"session_id": "sess_VCbVPZrq9YoyBu8sNCmqUy",
"session_title": "Investigate checkout API latency spike",
"file_id": "pf_SdhEA5fbZJGnHzwrNJMMSB",
"name": "checkout-latency-postmortem.html",
"size": 18996,
"content_type": "text/html",
"created_at": 1785293373899,
"updated_at": 1785829000000,
"pinned_at": 1785750000000,
"share_enabled": true,
"public_url": "https://console.flashcat.cloud/share/artifact/art_VnfrWic8UbB9q3EfYR4Gmg",
"shared_by": 2476001,
"shared_at": 1785747928665,
"share_file_id": "pf_SdhEA5fbZJGnHzwrNJMMSB"
}
}{
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
"error": {
"code": "InvalidParameter",
"message": "The specified parameter skill_id is not valid."
}
}{
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
"error": {
"code": "Unauthorized",
"message": "You are unauthorized."
}
}{
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
"error": {
"code": "AccessDenied",
"message": "Access Denied."
}
}{
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
"error": {
"code": "RequestTooFrequently",
"message": "Request too frequently."
}
}{
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
"error": {
"code": "InternalError",
"message": "We encountered an internal error, and it has been reported. Please try again later."
}
}Restrictions
| Aspect | Value |
|---|---|
| Rate limits | 300 requests/minute; 20 requests/second per account |
| Permissions | None — any valid app_key can call this operation |
Usage
- Only the provided fields change; omit
titleorteam_idto keep them. - Requires
can_editon the artifact (the creator, any member of its owning team, or anyone who can manage its source session); otherwise the call fails withAccessDenied. team_id: 0(move to personal) is allowed only for the creator; a positiveteam_idrequires the caller (forapp_keycalls, the key owner) to be a member of that team.- Returns the full artifact after the update.
- Every call is recorded in the account audit log.
Authorizations
APP Key created in the Flashduty console under My → APP Key. Send it as the app_key query parameter or in the Fd-App-Key request header. Its effective access is the intersection of the key's permission scope and the creator's current role permissions. Keep it secret.
Body
Partial update of a gallery artifact. Only provided fields change.
Artifact ID (art_ prefix). Also the key of the public-share link.
New title. Leading and trailing spaces are trimmed; a blank value fails with InvalidParameter. Omit or send null to keep the current title.
Transfer target. 0 moves the artifact to personal scope and only its creator may do that; a positive value moves it to that team, and the caller must be a member of the team; a negative value fails with InvalidParameter. Omit or send null to keep the current scope. The creator (person_id) never changes.
Response
Success
Standard response envelope used by every Flashduty public API. On success data contains the endpoint-specific payload and error is absent. On failure error is present and data is absent. request_id is always present and is also mirrored in the Flashcat-Request-Id response header.
Unique ID for this request. Mirrored in the Flashcat-Request-Id header. Include it when reporting issues.
"01HK8XQE3Z7JM2NTFQ5YJ8P9R4"
Error payload inside the response envelope. Present only on non-2xx responses.
Show child attributes
Show child attributes
One published artifact in the gallery. Time fields are Unix timestamps in milliseconds.
Show child attributes
Show child attributes
Was this page helpful?