: "${REFLECTIONS_KEY:?Set REFLECTIONS_KEY before running this example}"
curl --fail-with-body --max-time 30 'https://app.reflections.ai/v1/generations?limit=10' \
-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/generations?limit=10", {
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/generations?limit=10",
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/generations?limit=10", 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": "list",
"data": [
{
"id": "gen_27anw6frbr27snr28r4rtby65t",
"object": "generation_summary",
"livemode": true,
"license": "lic_k5zba2q8v1m3n7p4r6s9t0wxyh",
"status": "held",
"decision": "escalate",
"receipt": null,
"release_status": "awaiting_release",
"created_at": "2026-10-17T18:04:10Z",
"decided_at": null
},
{
"id": "gen_t6v8w0x2y4z6a8b0c2d4e6f8g0",
"object": "generation_summary",
"livemode": true,
"license": "lic_k5zba2q8v1m3n7p4r6s9t0wxyh",
"status": "released",
"decision": "allow",
"receipt": "rcpt_w0x2y4z6a8b0c2d4e6f8g0h2j4",
"release_status": "released",
"created_at": "2026-10-17T18:02:40Z",
"decided_at": "2026-10-17T19:12:05Z"
}
],
"has_more": false,
"next_cursor": null
}List generations
Test mode available. Live mode available for one license. Test keys use fictional sandbox data; see Sandbox for the supported forms and limits.
A live key must send license, for a license it holds or issued as talent, and may not
filter by talent, check or status. release_status=awaiting_release lists only the
finals waiting for the talent’s release. Releasing or declining a final through the API is
planned, with the talent-side escalation queue; today she decides in the Talent Portal. Live results are generation_summary objects for
the outputs submitted through the API under that license: their state, decision, receipt ID
and release status, with no prompt, reference, bytes, execution or metadata. The public
receipt a summary names shows its request_digest and artifact_sha256. status is the
recorded state: a decision the licensee has not yet read stays checking until it is
sealed. Retrieve a generation by ID, as its licensee, for the full object. A summary
outlives that detail: after the 24-hour private window the retrieve returns 404, and the
summary stays listed. A license nobody has accepted lists no outputs.
Lists your generations. A representative whose mandate has review_outputs or
receive_statements sees every generation under the talent’s licenses, for audit.
Restricted keys need generations:write or generations:read.
: "${REFLECTIONS_KEY:?Set REFLECTIONS_KEY before running this example}"
curl --fail-with-body --max-time 30 'https://app.reflections.ai/v1/generations?limit=10' \
-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/generations?limit=10", {
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/generations?limit=10",
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/generations?limit=10", 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": "list",
"data": [
{
"id": "gen_27anw6frbr27snr28r4rtby65t",
"object": "generation_summary",
"livemode": true,
"license": "lic_k5zba2q8v1m3n7p4r6s9t0wxyh",
"status": "held",
"decision": "escalate",
"receipt": null,
"release_status": "awaiting_release",
"created_at": "2026-10-17T18:04:10Z",
"decided_at": null
},
{
"id": "gen_t6v8w0x2y4z6a8b0c2d4e6f8g0",
"object": "generation_summary",
"livemode": true,
"license": "lic_k5zba2q8v1m3n7p4r6s9t0wxyh",
"status": "released",
"decision": "allow",
"receipt": "rcpt_w0x2y4z6a8b0c2d4e6f8g0h2j4",
"release_status": "released",
"created_at": "2026-10-17T18:02:40Z",
"decided_at": "2026-10-17T19:12:05Z"
}
],
"has_more": false,
"next_cursor": null
}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}$Query Parameters
Only generations checked for this talent.
^tal_[0-9a-hjkmnp-tv-z]{26}$Only generations made under this license. Required in live mode.
^lic_[0-9a-hjkmnp-tv-z]{26}$Only generations made under this check.
^chk_[0-9a-hjkmnp-tv-z]{26}$Only generations with this status, such as held.
checking: not decided yet. allowed: deliver. denied: never deliver. held: waiting
for release. released: a reviewer released it; deliver. expired: never reviewed.
withdrawn: you withdrew it.
checking, allowed, denied, held, released, expired, withdrawn Live mode only, with license: awaiting_release lists only the finals waiting for the
talent to release or decline them. Test mode filters with status=held instead.
awaiting_release Number of objects to return, 1 to 100.
1 <= x <= 100The next_cursor from the previous page.
Response
A page of generations.
Always list.
"list"Whether another page exists.
Pass as cursor to read the next page.
The generations on this page, newest first: generation objects in test mode,
generation_summary objects in live mode.
- Option 1
- Option 2
Show child attributes
Show child attributes