List studio packages
Forwarded delegated OAuth is independently verified for current token state, exact action scope and attributed key-creator identity. Calls without a delegated token retain existing direct API-key behavior.
curl --request GET \
--url https://api.batchrelay.com/v1/studios/{studio_id}/packages \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.batchrelay.com/v1/studios/{studio_id}/packages"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.batchrelay.com/v1/studios/{studio_id}/packages', 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.batchrelay.com/v1/studios/{studio_id}/packages",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.batchrelay.com/v1/studios/{studio_id}/packages"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.batchrelay.com/v1/studios/{studio_id}/packages")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.batchrelay.com/v1/studios/{studio_id}/packages")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"is_done": true,
"items": [
{
"add_ons": [
{
"active": true,
"price": {
"amount": 1,
"currency": "USD"
},
"product_id": "<string>",
"digital_configuration_id": "<string>",
"sort_order": 1
}
],
"availability": {
"active": true,
"as_add_on": true,
"in_packages": true,
"listed": true,
"standalone": true
},
"edit_version": 123,
"id": "<string>",
"lines": [
{
"photo_configuration": "individual",
"product_id": "<string>",
"quantity": 50,
"digital_configuration_id": "<string>"
}
],
"media_asset_ids": [
"<string>"
],
"name": "<string>",
"price": {
"amount": 1,
"currency": "USD"
},
"status": "<string>",
"description": "<string>",
"edit_fingerprint": "<string>",
"pending_draft_id": "<string>",
"sort_order": 123
}
],
"next_cursor": "<string>"
}{
"code": "<string>",
"docs_url": "<string>",
"error": "<string>",
"message": "<string>",
"request_id": "<string>"
}{
"code": "<string>",
"docs_url": "<string>",
"error": "<string>",
"message": "<string>",
"request_id": "<string>"
}{
"code": "<string>",
"docs_url": "<string>",
"error": "<string>",
"message": "<string>",
"request_id": "<string>"
}{
"code": "<string>",
"docs_url": "<string>",
"error": "<string>",
"message": "<string>",
"request_id": "<string>"
}Authorizations
Batch Relay scoped API key or an anonymous Test Mode session. Scope names document required capabilities. Anonymous sessions are sandbox-only and do not authorize studio, event, billing, or Live Mode operations.
Headers
Original delegated Clerk OAuth bearer. Go independently verifies signature/current revocation, exact resource audience, allowed OAuth client and action scope. Caller must match attributed API key creator. Never send an unverified subject header.
Untrusted optional analytics hint naming the calling client surface. It never affects authorization, routing, pricing, or behavior.
1 - 100Untrusted optional analytics hint naming the calling client version. It never affects authorization, routing, pricing, or behavior.
1 - 100Untrusted optional analytics hint naming the invocation mode. It never affects authorization, routing, pricing, or behavior.
1 - 100Path Parameters
Stable public studio ID beginning with stu_. The API never selects a studio implicitly; a local CLI profile name is not a studio ID.
5 - 256^stu_[A-Za-z0-9_-]+$Query Parameters
Opaque cursor returned by next_cursor. Do not construct or interpret it.
1 - 1024Maximum management records to return. Defaults are server-owned.
1 <= x <= 100curl --request GET \
--url https://api.batchrelay.com/v1/studios/{studio_id}/packages \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.batchrelay.com/v1/studios/{studio_id}/packages"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.batchrelay.com/v1/studios/{studio_id}/packages', 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.batchrelay.com/v1/studios/{studio_id}/packages",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.batchrelay.com/v1/studios/{studio_id}/packages"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.batchrelay.com/v1/studios/{studio_id}/packages")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.batchrelay.com/v1/studios/{studio_id}/packages")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"is_done": true,
"items": [
{
"add_ons": [
{
"active": true,
"price": {
"amount": 1,
"currency": "USD"
},
"product_id": "<string>",
"digital_configuration_id": "<string>",
"sort_order": 1
}
],
"availability": {
"active": true,
"as_add_on": true,
"in_packages": true,
"listed": true,
"standalone": true
},
"edit_version": 123,
"id": "<string>",
"lines": [
{
"photo_configuration": "individual",
"product_id": "<string>",
"quantity": 50,
"digital_configuration_id": "<string>"
}
],
"media_asset_ids": [
"<string>"
],
"name": "<string>",
"price": {
"amount": 1,
"currency": "USD"
},
"status": "<string>",
"description": "<string>",
"edit_fingerprint": "<string>",
"pending_draft_id": "<string>",
"sort_order": 123
}
],
"next_cursor": "<string>"
}{
"code": "<string>",
"docs_url": "<string>",
"error": "<string>",
"message": "<string>",
"request_id": "<string>"
}{
"code": "<string>",
"docs_url": "<string>",
"error": "<string>",
"message": "<string>",
"request_id": "<string>"
}{
"code": "<string>",
"docs_url": "<string>",
"error": "<string>",
"message": "<string>",
"request_id": "<string>"
}{
"code": "<string>",
"docs_url": "<string>",
"error": "<string>",
"message": "<string>",
"request_id": "<string>"
}