: "${REFLECTIONS_KEY:?Set REFLECTIONS_KEY before running this example}"
curl --fail-with-body --max-time 30 'https://app.reflections.ai/v1/facets/fct_v1m3n7p4r6s9t0wxyhk5zba2q8/material?license=lic_ba2q8v1m3n7p4r6s9t0wxyhk5z' \
-H "Authorization: Bearer $REFLECTIONS_KEY" \
-H "Reflections-Version: 2026-10-15"import { env, exit } from "node:process";
const apiKey = env.REFLECTIONS_KEY;
if (!apiKey) throw new Error("Set REFLECTIONS_KEY before running this example");
const response = await fetch("https://app.reflections.ai/v1/facets/fct_v1m3n7p4r6s9t0wxyhk5zba2q8/material?license=lic_ba2q8v1m3n7p4r6s9t0wxyhk5z", {
method: "GET",
headers: {
Authorization: `Bearer ${apiKey}`,
"Reflections-Version": "2026-10-15",
},
signal: AbortSignal.timeout(30_000),
});
const responseBody = await response.text();
if (!response.ok) {
console.error(`HTTP ${response.status}: ${responseBody}`);
exit(1);
}
console.log(responseBody);
import os
from urllib.error import HTTPError
from urllib.request import Request, urlopen
apiKey = os.environ["REFLECTIONS_KEY"]
if not apiKey:
raise ValueError("Set REFLECTIONS_KEY before running this example")
headers = {
"Authorization": f"Bearer {apiKey}",
"Reflections-Version": "2026-10-15",
}
request = Request("https://app.reflections.ai/v1/facets/fct_v1m3n7p4r6s9t0wxyhk5zba2q8/material?license=lic_ba2q8v1m3n7p4r6s9t0wxyhk5z",
method="GET", headers=headers)
try:
with urlopen(request, timeout=30) as response:
print(response.read().decode("utf-8"))
except HTTPError as error:
error_body = error.read().decode("utf-8")
raise RuntimeError(f"HTTP {error.code}: {error_body}") from error
package main
import (
"fmt"
"io"
"net/http"
"os"
"time"
)
func main() {
apiKey := os.Getenv("REFLECTIONS_KEY")
if apiKey == "" {
panic("Set REFLECTIONS_KEY before running this example")
}
request, err := http.NewRequest("GET", "https://app.reflections.ai/v1/facets/fct_v1m3n7p4r6s9t0wxyhk5zba2q8/material?license=lic_ba2q8v1m3n7p4r6s9t0wxyhk5z", nil)
if err != nil {
panic(err)
}
request.Header.Set("Authorization", "Bearer " + apiKey)
request.Header.Set("Reflections-Version", "2026-10-15")
client := &http.Client{Timeout: 30 * time.Second}
response, err := client.Do(request)
if err != nil {
panic(err)
}
defer response.Body.Close()
responseBody, err := io.ReadAll(response.Body)
if err != nil {
panic(err)
}
if response.StatusCode < 200 || response.StatusCode >= 300 {
panic(fmt.Sprintf("HTTP %d: %s", response.StatusCode, responseBody))
}
fmt.Print(string(responseBody))
}
{
"object": "facet_material",
"facet": "fct_v1m3n7p4r6s9t0wxyhk5zba2q8",
"license": "lic_ba2q8v1m3n7p4r6s9t0wxyhk5z",
"expires_at": "2026-10-14T16:25:03Z",
"items": [
{
"id": "mat_zffz7aewxkb1hpdma9m5w37zb8",
"kind": "voice_sample",
"media_type": "audio/wav",
"sha256": "4cebb1df0b0005098a1e13cbde6de657fb496d868f34b0ba550f0eb632770118",
"size": 4585004,
"duration_ms": 31840,
"url": "https://files.reflections.ai/m/mat_zffz7aewxkb1hpdma9m5w37zb8?expires=1791995103&signature=3ce6286e18accc8b0f8c3db4eb17aee9fff44609612"
},
{
"id": "mat_fpzq0ggr5sg91sv7dzrptmrw1n",
"kind": "voice_sample",
"media_type": "audio/wav",
"sha256": "ecff26300951e866c0c7a6db07e7dcb0d92d0874305dcb5dd854e35947734078",
"size": 4091084,
"duration_ms": 28410,
"url": "https://files.reflections.ai/m/mat_fpzq0ggr5sg91sv7dzrptmrw1n?expires=1791995103&signature=c0e46f6a18a2bac3f6bb7eae02f4d2679982ef0045f"
},
{
"id": "mat_38p2v2zpjm0sezg5be59w5nww2",
"kind": "voice_sample",
"media_type": "audio/wav",
"sha256": "d643198403c86054c97007384ac6c1ffe93558519c5d23d7721a27c5796da6cc",
"size": 6353324,
"duration_ms": 44120,
"url": "https://files.reflections.ai/m/mat_38p2v2zpjm0sezg5be59w5nww2?expires=1791995103&signature=c34784730b7c58af5b8e5622929bbaac955611b6344"
},
{
"id": "mat_ath88yzbkn61qx00prngj4ymxy",
"kind": "voice_sample",
"media_type": "audio/wav",
"sha256": "f368b0a14013c48123544b4fe55b32b73174c560966e33acb01646ccb5fb7330",
"size": 2845484,
"duration_ms": 19760,
"url": "https://files.reflections.ai/m/mat_ath88yzbkn61qx00prngj4ymxy?expires=1791995103&signature=935302111354709e8f27d08a12e86c755a8f7013e05"
},
{
"id": "mat_vhv37k68efgaqvab2qkyw6wzcj",
"kind": "voice_sample",
"media_type": "audio/wav",
"sha256": "5aff701e270e674472ae1dafee8dad826d612bbb509dc7122deddd9660defcc5",
"size": 5224364,
"duration_ms": 36280,
"url": "https://files.reflections.ai/m/mat_vhv37k68efgaqvab2qkyw6wzcj?expires=1791995103&signature=2c2b08700888b6dc59d597a56f4a0db84fff6ed1a09"
},
{
"id": "mat_p07weqpc3gn7zas5p8wtnjynen",
"kind": "voice_sample",
"media_type": "audio/wav",
"sha256": "186036056134c4da77b51a4c5820e5918b762310bad0cca7913a9363cafb002c",
"size": 3733964,
"duration_ms": 25930,
"url": "https://files.reflections.ai/m/mat_p07weqpc3gn7zas5p8wtnjynen?expires=1791995103&signature=70b3a88d8e6f01ced2c40eb3eaa5ae75469a754c287"
},
{
"id": "mat_wa5zww7pz1qqy32rpw1nrzyptb",
"kind": "voice_sample",
"media_type": "audio/wav",
"sha256": "6b60e779aabf89f0cdaeba96198506816cdf9eeb5c0935fe66aa4ceb6f78c1c6",
"size": 5813324,
"duration_ms": 40370,
"url": "https://files.reflections.ai/m/mat_wa5zww7pz1qqy32rpw1nrzyptb?expires=1791995103&signature=b6537d459bf82b5aae3b5409341f472a2e10ca14a0c"
},
{
"id": "mat_dmk84vfvnvys94g12h9wrkc7yg",
"kind": "voice_sample",
"media_type": "audio/wav",
"sha256": "7e6371a08f501785586ab6bf9b397ac1f91f98bbe4da598074cb68ce54a13324",
"size": 3261644,
"duration_ms": 22650,
"url": "https://files.reflections.ai/m/mat_dmk84vfvnvys94g12h9wrkc7yg?expires=1791995103&signature=c62d97161f66a74cc442606d139bea604b5ced6af71"
},
{
"id": "mat_g9s62txt5wajscqskyews8pk4k",
"kind": "voice_sample",
"media_type": "audio/wav",
"sha256": "3a47d9aa9bf8f504813867835a3bd4c556087bc18c23d093c1dad213c7d40264",
"size": 4825484,
"duration_ms": 33510,
"url": "https://files.reflections.ai/m/mat_g9s62txt5wajscqskyews8pk4k?expires=1791995103&signature=095074067f83cf5ae5efebb1eab8366e539e351a94a"
},
{
"id": "mat_ns8wtd4qqq1adaz6vex49s9f27",
"kind": "voice_sample",
"media_type": "audio/wav",
"sha256": "e3039eef0d0a60a54a114ce50a9d3214b31ee75a4222c5977261b155b6dbcf7a",
"size": 4302764,
"duration_ms": 29880,
"url": "https://files.reflections.ai/m/mat_ns8wtd4qqq1adaz6vex49s9f27?expires=1791995103&signature=286161c373b22354115329ed66686f605106c88ebb9"
},
{
"id": "mat_0axxrdtfj5p9f0rcchv6pq8f0m",
"kind": "voice_sample",
"media_type": "audio/wav",
"sha256": "8fc5abd51bea465771aa4f17eb04f1d7d287879f7ee41716c5fbf44f2393b348",
"size": 5474924,
"duration_ms": 38020,
"url": "https://files.reflections.ai/m/mat_0axxrdtfj5p9f0rcchv6pq8f0m?expires=1791995103&signature=0acf7b5aed66e692bbf5e500c95911832371ebacca5"
},
{
"id": "mat_mxvpmjs64neggm8s4ytea3rkwz",
"kind": "voice_sample",
"media_type": "audio/wav",
"sha256": "359683c5c6d90e4ca0f820be6d0b390474314ab1fba3c31de52ab4da0ef26143",
"size": 3922604,
"duration_ms": 27240,
"url": "https://files.reflections.ai/m/mat_mxvpmjs64neggm8s4ytea3rkwz?expires=1791995103&signature=a028b4303c8775e43def06193f67404232d4b002f4e"
}
],
"obligations": [
{
"type": "no_training",
"material": "voice"
},
{
"type": "delete_material",
"material": "voice",
"within": "P30D"
}
]
}{
"type": "https://docs.reflections.ai/errors/parameter_invalid",
"title": "A parameter is invalid",
"status": 400,
"code": "parameter_invalid",
"param": "use.territories[1]",
"detail": "\"UK\" is not an ISO 3166-1 alpha-2 code. Use \"GB\".",
"request_id": "req_8f2k4m6p8r0t2v4x6z8b0d2f4h"
}{
"type": "https://docs.reflections.ai/errors/invalid_api_key",
"title": "The API key is not valid",
"status": 401,
"code": "invalid_api_key",
"request_id": "req_8f2k4m6p8r0t2v4x6z8b0d2f4h"
}{
"type": "https://docs.reflections.ai/errors/account_not_connected",
"title": "The licensee has not connected your platform",
"status": 403,
"code": "account_not_connected",
"detail": "acct_2q8v1m3n7p4r6s9t0wxyhk5zba has no active connection with your account.",
"request_id": "req_8f2k4m6p8r0t2v4x6z8b0d2f4h"
}{
"type": "https://docs.reflections.ai/errors/resource_not_found",
"title": "No such object",
"status": 404,
"code": "resource_not_found",
"request_id": "req_8f2k4m6p8r0t2v4x6z8b0d2f4h"
}{
"type": "https://docs.reflections.ai/errors/rate_limited",
"title": "Too many requests",
"status": 429,
"code": "rate_limited",
"request_id": "req_8f2k4m6p8r0t2v4x6z8b0d2f4h"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"code": "invalid_request",
"request_id": "<string>",
"detail": "<string>",
"param": "<string>",
"doc_url": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"code": "invalid_request",
"request_id": "<string>",
"detail": "<string>",
"param": "<string>",
"doc_url": "<string>"
}Retrieve licensed material
Planned contract — unavailable in test and live modes. This operation is a protocol reference, not a callable endpoint. Start with the working sandbox quickstart.
Returns short-lived download URLs for the reference material a license lets the licensee
send to a model, such as the reference stills of a likeness. Each item carries its
sha256; send exactly those bytes. Requires a license whose scope includes
material_access for this facet. URLs expire after 5 minutes and every download is
recorded on the talent’s record.
Restricted keys need licenses:read.
: "${REFLECTIONS_KEY:?Set REFLECTIONS_KEY before running this example}"
curl --fail-with-body --max-time 30 'https://app.reflections.ai/v1/facets/fct_v1m3n7p4r6s9t0wxyhk5zba2q8/material?license=lic_ba2q8v1m3n7p4r6s9t0wxyhk5z' \
-H "Authorization: Bearer $REFLECTIONS_KEY" \
-H "Reflections-Version: 2026-10-15"import { env, exit } from "node:process";
const apiKey = env.REFLECTIONS_KEY;
if (!apiKey) throw new Error("Set REFLECTIONS_KEY before running this example");
const response = await fetch("https://app.reflections.ai/v1/facets/fct_v1m3n7p4r6s9t0wxyhk5zba2q8/material?license=lic_ba2q8v1m3n7p4r6s9t0wxyhk5z", {
method: "GET",
headers: {
Authorization: `Bearer ${apiKey}`,
"Reflections-Version": "2026-10-15",
},
signal: AbortSignal.timeout(30_000),
});
const responseBody = await response.text();
if (!response.ok) {
console.error(`HTTP ${response.status}: ${responseBody}`);
exit(1);
}
console.log(responseBody);
import os
from urllib.error import HTTPError
from urllib.request import Request, urlopen
apiKey = os.environ["REFLECTIONS_KEY"]
if not apiKey:
raise ValueError("Set REFLECTIONS_KEY before running this example")
headers = {
"Authorization": f"Bearer {apiKey}",
"Reflections-Version": "2026-10-15",
}
request = Request("https://app.reflections.ai/v1/facets/fct_v1m3n7p4r6s9t0wxyhk5zba2q8/material?license=lic_ba2q8v1m3n7p4r6s9t0wxyhk5z",
method="GET", headers=headers)
try:
with urlopen(request, timeout=30) as response:
print(response.read().decode("utf-8"))
except HTTPError as error:
error_body = error.read().decode("utf-8")
raise RuntimeError(f"HTTP {error.code}: {error_body}") from error
package main
import (
"fmt"
"io"
"net/http"
"os"
"time"
)
func main() {
apiKey := os.Getenv("REFLECTIONS_KEY")
if apiKey == "" {
panic("Set REFLECTIONS_KEY before running this example")
}
request, err := http.NewRequest("GET", "https://app.reflections.ai/v1/facets/fct_v1m3n7p4r6s9t0wxyhk5zba2q8/material?license=lic_ba2q8v1m3n7p4r6s9t0wxyhk5z", nil)
if err != nil {
panic(err)
}
request.Header.Set("Authorization", "Bearer " + apiKey)
request.Header.Set("Reflections-Version", "2026-10-15")
client := &http.Client{Timeout: 30 * time.Second}
response, err := client.Do(request)
if err != nil {
panic(err)
}
defer response.Body.Close()
responseBody, err := io.ReadAll(response.Body)
if err != nil {
panic(err)
}
if response.StatusCode < 200 || response.StatusCode >= 300 {
panic(fmt.Sprintf("HTTP %d: %s", response.StatusCode, responseBody))
}
fmt.Print(string(responseBody))
}
{
"object": "facet_material",
"facet": "fct_v1m3n7p4r6s9t0wxyhk5zba2q8",
"license": "lic_ba2q8v1m3n7p4r6s9t0wxyhk5z",
"expires_at": "2026-10-14T16:25:03Z",
"items": [
{
"id": "mat_zffz7aewxkb1hpdma9m5w37zb8",
"kind": "voice_sample",
"media_type": "audio/wav",
"sha256": "4cebb1df0b0005098a1e13cbde6de657fb496d868f34b0ba550f0eb632770118",
"size": 4585004,
"duration_ms": 31840,
"url": "https://files.reflections.ai/m/mat_zffz7aewxkb1hpdma9m5w37zb8?expires=1791995103&signature=3ce6286e18accc8b0f8c3db4eb17aee9fff44609612"
},
{
"id": "mat_fpzq0ggr5sg91sv7dzrptmrw1n",
"kind": "voice_sample",
"media_type": "audio/wav",
"sha256": "ecff26300951e866c0c7a6db07e7dcb0d92d0874305dcb5dd854e35947734078",
"size": 4091084,
"duration_ms": 28410,
"url": "https://files.reflections.ai/m/mat_fpzq0ggr5sg91sv7dzrptmrw1n?expires=1791995103&signature=c0e46f6a18a2bac3f6bb7eae02f4d2679982ef0045f"
},
{
"id": "mat_38p2v2zpjm0sezg5be59w5nww2",
"kind": "voice_sample",
"media_type": "audio/wav",
"sha256": "d643198403c86054c97007384ac6c1ffe93558519c5d23d7721a27c5796da6cc",
"size": 6353324,
"duration_ms": 44120,
"url": "https://files.reflections.ai/m/mat_38p2v2zpjm0sezg5be59w5nww2?expires=1791995103&signature=c34784730b7c58af5b8e5622929bbaac955611b6344"
},
{
"id": "mat_ath88yzbkn61qx00prngj4ymxy",
"kind": "voice_sample",
"media_type": "audio/wav",
"sha256": "f368b0a14013c48123544b4fe55b32b73174c560966e33acb01646ccb5fb7330",
"size": 2845484,
"duration_ms": 19760,
"url": "https://files.reflections.ai/m/mat_ath88yzbkn61qx00prngj4ymxy?expires=1791995103&signature=935302111354709e8f27d08a12e86c755a8f7013e05"
},
{
"id": "mat_vhv37k68efgaqvab2qkyw6wzcj",
"kind": "voice_sample",
"media_type": "audio/wav",
"sha256": "5aff701e270e674472ae1dafee8dad826d612bbb509dc7122deddd9660defcc5",
"size": 5224364,
"duration_ms": 36280,
"url": "https://files.reflections.ai/m/mat_vhv37k68efgaqvab2qkyw6wzcj?expires=1791995103&signature=2c2b08700888b6dc59d597a56f4a0db84fff6ed1a09"
},
{
"id": "mat_p07weqpc3gn7zas5p8wtnjynen",
"kind": "voice_sample",
"media_type": "audio/wav",
"sha256": "186036056134c4da77b51a4c5820e5918b762310bad0cca7913a9363cafb002c",
"size": 3733964,
"duration_ms": 25930,
"url": "https://files.reflections.ai/m/mat_p07weqpc3gn7zas5p8wtnjynen?expires=1791995103&signature=70b3a88d8e6f01ced2c40eb3eaa5ae75469a754c287"
},
{
"id": "mat_wa5zww7pz1qqy32rpw1nrzyptb",
"kind": "voice_sample",
"media_type": "audio/wav",
"sha256": "6b60e779aabf89f0cdaeba96198506816cdf9eeb5c0935fe66aa4ceb6f78c1c6",
"size": 5813324,
"duration_ms": 40370,
"url": "https://files.reflections.ai/m/mat_wa5zww7pz1qqy32rpw1nrzyptb?expires=1791995103&signature=b6537d459bf82b5aae3b5409341f472a2e10ca14a0c"
},
{
"id": "mat_dmk84vfvnvys94g12h9wrkc7yg",
"kind": "voice_sample",
"media_type": "audio/wav",
"sha256": "7e6371a08f501785586ab6bf9b397ac1f91f98bbe4da598074cb68ce54a13324",
"size": 3261644,
"duration_ms": 22650,
"url": "https://files.reflections.ai/m/mat_dmk84vfvnvys94g12h9wrkc7yg?expires=1791995103&signature=c62d97161f66a74cc442606d139bea604b5ced6af71"
},
{
"id": "mat_g9s62txt5wajscqskyews8pk4k",
"kind": "voice_sample",
"media_type": "audio/wav",
"sha256": "3a47d9aa9bf8f504813867835a3bd4c556087bc18c23d093c1dad213c7d40264",
"size": 4825484,
"duration_ms": 33510,
"url": "https://files.reflections.ai/m/mat_g9s62txt5wajscqskyews8pk4k?expires=1791995103&signature=095074067f83cf5ae5efebb1eab8366e539e351a94a"
},
{
"id": "mat_ns8wtd4qqq1adaz6vex49s9f27",
"kind": "voice_sample",
"media_type": "audio/wav",
"sha256": "e3039eef0d0a60a54a114ce50a9d3214b31ee75a4222c5977261b155b6dbcf7a",
"size": 4302764,
"duration_ms": 29880,
"url": "https://files.reflections.ai/m/mat_ns8wtd4qqq1adaz6vex49s9f27?expires=1791995103&signature=286161c373b22354115329ed66686f605106c88ebb9"
},
{
"id": "mat_0axxrdtfj5p9f0rcchv6pq8f0m",
"kind": "voice_sample",
"media_type": "audio/wav",
"sha256": "8fc5abd51bea465771aa4f17eb04f1d7d287879f7ee41716c5fbf44f2393b348",
"size": 5474924,
"duration_ms": 38020,
"url": "https://files.reflections.ai/m/mat_0axxrdtfj5p9f0rcchv6pq8f0m?expires=1791995103&signature=0acf7b5aed66e692bbf5e500c95911832371ebacca5"
},
{
"id": "mat_mxvpmjs64neggm8s4ytea3rkwz",
"kind": "voice_sample",
"media_type": "audio/wav",
"sha256": "359683c5c6d90e4ca0f820be6d0b390474314ab1fba3c31de52ab4da0ef26143",
"size": 3922604,
"duration_ms": 27240,
"url": "https://files.reflections.ai/m/mat_mxvpmjs64neggm8s4ytea3rkwz?expires=1791995103&signature=a028b4303c8775e43def06193f67404232d4b002f4e"
}
],
"obligations": [
{
"type": "no_training",
"material": "voice"
},
{
"type": "delete_material",
"material": "voice",
"within": "P30D"
}
]
}{
"type": "https://docs.reflections.ai/errors/parameter_invalid",
"title": "A parameter is invalid",
"status": 400,
"code": "parameter_invalid",
"param": "use.territories[1]",
"detail": "\"UK\" is not an ISO 3166-1 alpha-2 code. Use \"GB\".",
"request_id": "req_8f2k4m6p8r0t2v4x6z8b0d2f4h"
}{
"type": "https://docs.reflections.ai/errors/invalid_api_key",
"title": "The API key is not valid",
"status": 401,
"code": "invalid_api_key",
"request_id": "req_8f2k4m6p8r0t2v4x6z8b0d2f4h"
}{
"type": "https://docs.reflections.ai/errors/account_not_connected",
"title": "The licensee has not connected your platform",
"status": 403,
"code": "account_not_connected",
"detail": "acct_2q8v1m3n7p4r6s9t0wxyhk5zba has no active connection with your account.",
"request_id": "req_8f2k4m6p8r0t2v4x6z8b0d2f4h"
}{
"type": "https://docs.reflections.ai/errors/resource_not_found",
"title": "No such object",
"status": 404,
"code": "resource_not_found",
"request_id": "req_8f2k4m6p8r0t2v4x6z8b0d2f4h"
}{
"type": "https://docs.reflections.ai/errors/rate_limited",
"title": "Too many requests",
"status": 429,
"code": "rate_limited",
"request_id": "req_8f2k4m6p8r0t2v4x6z8b0d2f4h"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"code": "invalid_request",
"request_id": "<string>",
"detail": "<string>",
"param": "<string>",
"doc_url": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"code": "invalid_request",
"request_id": "<string>",
"detail": "<string>",
"param": "<string>",
"doc_url": "<string>"
}Authorizations
Your secret key, rk_test_… or rk_live_…, sent as Authorization: Bearer <key>. Keep it
on your server. Restricted keys carry only the scopes you give them.
Headers
The dated API version. Defaults to the version your account is pinned to.
"2026-10-15"
Act for a connected licensee. The value is the licensee's account ID. Requires an active connection between that account and yours.
^acct_[0-9a-hjkmnp-tv-z]{26}$Path Parameters
The facet's ID, fct_….
^fct_[0-9a-hjkmnp-tv-z]{26}$Query Parameters
The license that grants material access.
^lic_[0-9a-hjkmnp-tv-z]{26}$Response
The material.
Always facet_material.
"facet_material"The facet the material belongs to.
^fct_[0-9a-hjkmnp-tv-z]{26}$The license that grants material access, as sent in license.
^lic_[0-9a-hjkmnp-tv-z]{26}$When the URLs stop working.
Every item of the facet's reference material, each with its download URL.
Show child attributes
Show child attributes
What you must do with the material, such as delete it after use.
Show child attributes
Show child attributes