: "${REFLECTIONS_KEY:?Set REFLECTIONS_KEY before running this example}"
curl --fail-with-body --max-time 30 'https://app.reflections.ai/v1/checks?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/checks?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/checks?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/checks?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": "chk_3pg20xkepkscyp0qbpc4yq7ad2",
"object": "check",
"livemode": true,
"status": "escalated",
"decision": "escalate",
"talent": [
{
"talent": "tal_9t0wxyhk5zba2q8v1m3n7p4r6s",
"name": "Maya Okafor",
"matched_by": "name",
"confidence": "high",
"decision": "escalate",
"facets": [
"fct_5zba2q8v1m3n7p4r6s9t0wxyhk"
],
"license": "lic_k5zba2q8v1m3n7p4r6s9t0wxyh",
"license_revision": "lrv_p4r6s9t0wxyhk5zba2q8v1m3n7",
"terms_digest": "sha256:39f18c8bef02b5226b9feaa92e526ed30b81b91650d8a10b503281b169f44431",
"escalation": "esc_7nr5ftgs8c3aqh9w2fbp0sbdw7"
}
],
"use": {
"modality": "image",
"kind": "depiction",
"purpose": "advertising",
"commercial": true,
"channels": [
"social",
"web"
],
"territories": [
"US",
"CA"
]
},
"reasons": [
{
"code": "evaluation_unavailable",
"stage": "check",
"talent": "tal_9t0wxyhk5zba2q8v1m3n7p4r6s",
"sentence": "This request could not be checked in time, so Maya Okafor's side will review it."
}
],
"obligations": [],
"authorization": null,
"escalation": {
"id": "esc_7nr5ftgs8c3aqh9w2fbp0sbdw7",
"reason": "evaluation_unavailable",
"reviewer": "talent",
"status": "open",
"expires_at": "2026-10-27T09:41:00Z",
"resolved_at": null,
"note": null
},
"remedy": null,
"request_digest": "sha256:bf94817766d56d92211d12f5ff51a3dc1a6d5cb4be2877417b08251fe38c386a",
"licensee": "acct_2q8v1m3n7p4r6s9t0wxyhk5zba",
"platform": "acct_7p4r6s9t0wxyhk5zba2q8v1m3n",
"session": null,
"receipt": null,
"metadata": {},
"created_at": "2026-10-20T09:41:00Z"
},
{
"id": "chk_x3n8earfjvqsnts9ryqtzet3a4",
"object": "check",
"livemode": true,
"status": "escalated",
"decision": "escalate",
"talent": [
{
"talent": "tal_9t0wxyhk5zba2q8v1m3n7p4r6s",
"name": "Maya Okafor",
"matched_by": "name",
"confidence": "high",
"decision": "escalate",
"facets": [
"fct_5zba2q8v1m3n7p4r6s9t0wxyhk"
],
"license": "lic_k5zba2q8v1m3n7p4r6s9t0wxyh",
"license_revision": "lrv_p4r6s9t0wxyhk5zba2q8v1m3n7",
"terms_digest": "sha256:39f18c8bef02b5226b9feaa92e526ed30b81b91650d8a10b503281b169f44431",
"escalation": "esc_0m3es8rwstwndrxyxkv3z856zr"
}
],
"use": {
"modality": "image",
"kind": "depiction",
"purpose": "advertising",
"commercial": true,
"channels": [
"social"
],
"territories": [
"US"
]
},
"reasons": [
{
"code": "unverifiable_request",
"stage": "check",
"talent": "tal_9t0wxyhk5zba2q8v1m3n7p4r6s",
"term": "license:lic_k5zba2q8v1m3n7p4r6s9t0wxyh/terms.requiredAttributes",
"sentence": "Keep Maya Okafor the same person: face, skin tone and build unchanged."
}
],
"obligations": [],
"authorization": null,
"escalation": {
"id": "esc_0m3es8rwstwndrxyxkv3z856zr",
"reason": "unverifiable",
"reviewer": "talent",
"status": "open",
"expires_at": "2026-10-26T16:05:00Z",
"resolved_at": null,
"note": null
},
"remedy": null,
"request_digest": "sha256:3ae7c80e6bc98eda19b2727e30df26d51342e7a60bacf27c63f25636136c2ae3",
"licensee": "acct_2q8v1m3n7p4r6s9t0wxyhk5zba",
"platform": "acct_7p4r6s9t0wxyhk5zba2q8v1m3n",
"session": null,
"receipt": null,
"metadata": {},
"created_at": "2026-10-19T16:05:00Z"
}
],
"has_more": false,
"next_cursor": null
}{
"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/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>"
}List checks
Test mode available. Live mode unavailable. Uses fictional sandbox data only. See Sandbox for the supported forms and limits.
Returns your checks, newest first. Filter by decision, status, talent or
created_after; status=escalated lists the checks still waiting for a person.
Restricted keys need checks:write.
: "${REFLECTIONS_KEY:?Set REFLECTIONS_KEY before running this example}"
curl --fail-with-body --max-time 30 'https://app.reflections.ai/v1/checks?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/checks?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/checks?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/checks?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": "chk_3pg20xkepkscyp0qbpc4yq7ad2",
"object": "check",
"livemode": true,
"status": "escalated",
"decision": "escalate",
"talent": [
{
"talent": "tal_9t0wxyhk5zba2q8v1m3n7p4r6s",
"name": "Maya Okafor",
"matched_by": "name",
"confidence": "high",
"decision": "escalate",
"facets": [
"fct_5zba2q8v1m3n7p4r6s9t0wxyhk"
],
"license": "lic_k5zba2q8v1m3n7p4r6s9t0wxyh",
"license_revision": "lrv_p4r6s9t0wxyhk5zba2q8v1m3n7",
"terms_digest": "sha256:39f18c8bef02b5226b9feaa92e526ed30b81b91650d8a10b503281b169f44431",
"escalation": "esc_7nr5ftgs8c3aqh9w2fbp0sbdw7"
}
],
"use": {
"modality": "image",
"kind": "depiction",
"purpose": "advertising",
"commercial": true,
"channels": [
"social",
"web"
],
"territories": [
"US",
"CA"
]
},
"reasons": [
{
"code": "evaluation_unavailable",
"stage": "check",
"talent": "tal_9t0wxyhk5zba2q8v1m3n7p4r6s",
"sentence": "This request could not be checked in time, so Maya Okafor's side will review it."
}
],
"obligations": [],
"authorization": null,
"escalation": {
"id": "esc_7nr5ftgs8c3aqh9w2fbp0sbdw7",
"reason": "evaluation_unavailable",
"reviewer": "talent",
"status": "open",
"expires_at": "2026-10-27T09:41:00Z",
"resolved_at": null,
"note": null
},
"remedy": null,
"request_digest": "sha256:bf94817766d56d92211d12f5ff51a3dc1a6d5cb4be2877417b08251fe38c386a",
"licensee": "acct_2q8v1m3n7p4r6s9t0wxyhk5zba",
"platform": "acct_7p4r6s9t0wxyhk5zba2q8v1m3n",
"session": null,
"receipt": null,
"metadata": {},
"created_at": "2026-10-20T09:41:00Z"
},
{
"id": "chk_x3n8earfjvqsnts9ryqtzet3a4",
"object": "check",
"livemode": true,
"status": "escalated",
"decision": "escalate",
"talent": [
{
"talent": "tal_9t0wxyhk5zba2q8v1m3n7p4r6s",
"name": "Maya Okafor",
"matched_by": "name",
"confidence": "high",
"decision": "escalate",
"facets": [
"fct_5zba2q8v1m3n7p4r6s9t0wxyhk"
],
"license": "lic_k5zba2q8v1m3n7p4r6s9t0wxyh",
"license_revision": "lrv_p4r6s9t0wxyhk5zba2q8v1m3n7",
"terms_digest": "sha256:39f18c8bef02b5226b9feaa92e526ed30b81b91650d8a10b503281b169f44431",
"escalation": "esc_0m3es8rwstwndrxyxkv3z856zr"
}
],
"use": {
"modality": "image",
"kind": "depiction",
"purpose": "advertising",
"commercial": true,
"channels": [
"social"
],
"territories": [
"US"
]
},
"reasons": [
{
"code": "unverifiable_request",
"stage": "check",
"talent": "tal_9t0wxyhk5zba2q8v1m3n7p4r6s",
"term": "license:lic_k5zba2q8v1m3n7p4r6s9t0wxyh/terms.requiredAttributes",
"sentence": "Keep Maya Okafor the same person: face, skin tone and build unchanged."
}
],
"obligations": [],
"authorization": null,
"escalation": {
"id": "esc_0m3es8rwstwndrxyxkv3z856zr",
"reason": "unverifiable",
"reviewer": "talent",
"status": "open",
"expires_at": "2026-10-26T16:05:00Z",
"resolved_at": null,
"note": null
},
"remedy": null,
"request_digest": "sha256:3ae7c80e6bc98eda19b2727e30df26d51342e7a60bacf27c63f25636136c2ae3",
"licensee": "acct_2q8v1m3n7p4r6s9t0wxyhk5zba",
"platform": "acct_7p4r6s9t0wxyhk5zba2q8v1m3n",
"session": null,
"receipt": null,
"metadata": {},
"created_at": "2026-10-19T16:05:00Z"
}
],
"has_more": false,
"next_cursor": null
}{
"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/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}$Query Parameters
Only checks with this decision.
allow: proceed and meet the obligations. deny: do not proceed. escalate: wait; a
person with authority will decide, and an unanswered escalation becomes deny.
allow, deny, escalate Only checks with this status, such as escalated.
checking: live evaluation has not finished; there is no decision yet.
allowed, denied: decided. escalated: waiting for a person; it ends allowed, or
denied with review_declined or, after escalation.expires_at, hold_expired.
consumed: every allowed generation was used. expired: an allowed check's authorization
expired unused. cancelled: you cancelled it.
checking, allowed, denied, escalated, consumed, expired, cancelled Only checks that invoked this talent.
^tal_[0-9a-hjkmnp-tv-z]{26}$Only checks created after this time.
Number of objects to return, 1 to 100.
1 <= x <= 100The next_cursor from the previous page.