curl --request POST \
--url 'https://api.flashcat.cloud/safari/artifact/gallery/share/sync?app_key=' \
--header 'Content-Type: application/json' \
--data '
{
"artifact_id": "art_VnfrWic8UbB9q3EfYR4Gmg"
}
'import requests
url = "https://api.flashcat.cloud/safari/artifact/gallery/share/sync?app_key="
payload = { "artifact_id": "art_VnfrWic8UbB9q3EfYR4Gmg" }
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'})
};
fetch('https://api.flashcat.cloud/safari/artifact/gallery/share/sync?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/share/sync?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'
]),
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/share/sync?app_key="
payload := strings.NewReader("{\n \"artifact_id\": \"art_VnfrWic8UbB9q3EfYR4Gmg\"\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/share/sync?app_key=")
.header("Content-Type", "application/json")
.body("{\n \"artifact_id\": \"art_VnfrWic8UbB9q3EfYR4Gmg\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.flashcat.cloud/safari/artifact/gallery/share/sync?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}"
response = http.request(request)
puts response.read_body{
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
"data": {
"artifact_id": "art_VnfrWic8UbB9q3EfYR4Gmg",
"share_enabled": true,
"public_url": "https://console.flashcat.cloud/share/artifact/art_VnfrWic8UbB9q3EfYR4Gmg",
"shared_by": 2476001,
"shared_at": 1785829900000
}
}{
"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 shared snapshot
Refresh the public snapshot of a shared artifact with its latest content.
curl --request POST \
--url 'https://api.flashcat.cloud/safari/artifact/gallery/share/sync?app_key=' \
--header 'Content-Type: application/json' \
--data '
{
"artifact_id": "art_VnfrWic8UbB9q3EfYR4Gmg"
}
'import requests
url = "https://api.flashcat.cloud/safari/artifact/gallery/share/sync?app_key="
payload = { "artifact_id": "art_VnfrWic8UbB9q3EfYR4Gmg" }
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'})
};
fetch('https://api.flashcat.cloud/safari/artifact/gallery/share/sync?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/share/sync?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'
]),
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/share/sync?app_key="
payload := strings.NewReader("{\n \"artifact_id\": \"art_VnfrWic8UbB9q3EfYR4Gmg\"\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/share/sync?app_key=")
.header("Content-Type", "application/json")
.body("{\n \"artifact_id\": \"art_VnfrWic8UbB9q3EfYR4Gmg\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.flashcat.cloud/safari/artifact/gallery/share/sync?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}"
response = http.request(request)
puts response.read_body{
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
"data": {
"artifact_id": "art_VnfrWic8UbB9q3EfYR4Gmg",
"share_enabled": true,
"public_url": "https://console.flashcat.cloud/share/artifact/art_VnfrWic8UbB9q3EfYR4Gmg",
"shared_by": 2476001,
"shared_at": 1785829900000
}
}{
"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
- Fails with
InvalidParameterwhen sharing is not enabled; enable it first. On deployments where public sharing is not configured, the call fails withInternalError. - 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. - The link never changes; only the snapshot content and
shared_atare refreshed, andshared_bykeeps the member who enabled sharing. - Check
share_file_id != file_idon the artifact detail to detect a stale snapshot before syncing. - 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
Identify one gallery artifact.
Artifact ID (art_ prefix). Also the key of the public-share link.
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
Public-share state of an artifact.
Show child attributes
Show child attributes
Was this page helpful?