: "${REFLECTIONS_KEY:?Set REFLECTIONS_KEY before running this example}"
curl --fail-with-body --max-time 30 'https://app.reflections.ai/v1/license_requests/lrq_py3xqfvbjjcdhvf33y6c2w26jm' \
-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/license_requests/lrq_py3xqfvbjjcdhvf33y6c2w26jm", {
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/license_requests/lrq_py3xqfvbjjcdhvf33y6c2w26jm",
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/license_requests/lrq_py3xqfvbjjcdhvf33y6c2w26jm", 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))
}
{
"id": "lrq_py3xqfvbjjcdhvf33y6c2w26jm",
"object": "license_request",
"livemode": true,
"kind": "change",
"status": "signed",
"talent": "tal_9t0wxyhk5zba2q8v1m3n7p4r6s",
"licensee": "acct_2q8v1m3n7p4r6s9t0wxyhk5zba",
"license": "lic_k5zba2q8v1m3n7p4r6s9t0wxyh",
"license_revision": "lrv_5ecwa673wbbej5a0zkz2vxnk49",
"check": "chk_8v1m3n7p4r6s9t0wxyhk5zba2q",
"requested_scope": {
"channels": [
"social",
"web",
"tv"
],
"final_deliverables": 30
},
"offer": {
"type": "flat",
"flat": {
"amount": 1000000,
"currency": "usd"
},
"schedule": "on_acceptance"
},
"note": "We would like to run the trail campaign images in a TV spot in the US and Canada, with six more final outputs.",
"decision_note": "TV is approved. The total stays at 24 final outputs.",
"signed_at": "2026-10-20T15:30:00Z",
"declined_at": null,
"withdrawn_at": null,
"metadata": {
"campaign": "trail-winter-tv"
},
"created_at": "2026-10-17T18:10:00Z"
}{
"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 a license request
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 a license request you sent or, with a mandate that has issue_licenses, one
addressed to a talent you represent. Once it is signed, license_revision names the
revision the talent’s side signed, which may differ from requested_scope.
Restricted keys need license_requests:write.
: "${REFLECTIONS_KEY:?Set REFLECTIONS_KEY before running this example}"
curl --fail-with-body --max-time 30 'https://app.reflections.ai/v1/license_requests/lrq_py3xqfvbjjcdhvf33y6c2w26jm' \
-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/license_requests/lrq_py3xqfvbjjcdhvf33y6c2w26jm", {
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/license_requests/lrq_py3xqfvbjjcdhvf33y6c2w26jm",
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/license_requests/lrq_py3xqfvbjjcdhvf33y6c2w26jm", 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))
}
{
"id": "lrq_py3xqfvbjjcdhvf33y6c2w26jm",
"object": "license_request",
"livemode": true,
"kind": "change",
"status": "signed",
"talent": "tal_9t0wxyhk5zba2q8v1m3n7p4r6s",
"licensee": "acct_2q8v1m3n7p4r6s9t0wxyhk5zba",
"license": "lic_k5zba2q8v1m3n7p4r6s9t0wxyh",
"license_revision": "lrv_5ecwa673wbbej5a0zkz2vxnk49",
"check": "chk_8v1m3n7p4r6s9t0wxyhk5zba2q",
"requested_scope": {
"channels": [
"social",
"web",
"tv"
],
"final_deliverables": 30
},
"offer": {
"type": "flat",
"flat": {
"amount": 1000000,
"currency": "usd"
},
"schedule": "on_acceptance"
},
"note": "We would like to run the trail campaign images in a TV spot in the US and Canada, with six more final outputs.",
"decision_note": "TV is approved. The total stays at 24 final outputs.",
"signed_at": "2026-10-20T15:30:00Z",
"declined_at": null,
"withdrawn_at": null,
"metadata": {
"campaign": "trail-winter-tv"
},
"created_at": "2026-10-17T18:10:00Z"
}{
"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 license request's ID.
^lrq_[0-9a-hjkmnp-tv-z]{26}$Response
The license request.
Unique identifier for the request, lrq_….
^lrq_[0-9a-hjkmnp-tv-z]{26}$Always license_request.
"license_request"true for a live-mode request, false for a test-mode one.
new for a new license, or change for a new revision of license.
new, change Where the request stands. Only a sent request can be withdrawn or declined.
sent, signed, declined, withdrawn The talent the request asks.
^tal_[0-9a-hjkmnp-tv-z]{26}$The account that would hold the license: the sender, or the connected licensee a platform sent it for.
^acct_[0-9a-hjkmnp-tv-z]{26}$The terms asked for, as sent.
Show child attributes
Show child attributes
When the request was sent.
For change, the license to change. When signed, the license it became.
^lic_[0-9a-hjkmnp-tv-z]{26}$The revision the talent's side signed. It may differ from what you asked.
^lrv_[0-9a-hjkmnp-tv-z]{26}$The denied check that prompted the request. null if none was named.
^chk_[0-9a-hjkmnp-tv-z]{26}$The compensation offered. null if the request made no offer.
Show child attributes
Show child attributes
The note to the talent, as written. null if none was sent.
The talent's note when they declined or signed.
When the talent's side signed a license or revision from the request. null unless
signed.
When the talent's side declined the request. null unless declined.
When the licensee withdrew the request. null unless withdrawn.
The key-value pairs sent with the request.
Show child attributes
Show child attributes