Get a studio-scoped checkout link
Requires checkout_links:read and print_orders:read plus access to the explicit studio. The response never returns the checkout token, recipient identity, or payment-provider data.
curl --request GET \
--url https://api.batchrelay.com/v1/studios/{studio_id}/checkout-links/{link_id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.batchrelay.com/v1/studios/{studio_id}/checkout-links/{link_id}"
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}/checkout-links/{link_id}', 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}/checkout-links/{link_id}",
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}/checkout-links/{link_id}"
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}/checkout-links/{link_id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.batchrelay.com/v1/studios/{studio_id}/checkout-links/{link_id}")
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{
"expires_at": "2023-11-07T05:31:56Z",
"id": "<string>",
"revocable": true,
"status": "active",
"checkout_intent_id": "<string>",
"currency": "USD",
"discount_cents": 1,
"gross_subtotal_cents": 1,
"guest_checkout_link_id": "<string>",
"net_subtotal_cents": 1,
"offer": {
"id": "<string>",
"revision_id": "<string>",
"code": "<string>",
"label": "<string>",
"revision": 2
},
"payment_state": "not_prepared",
"payment_url": "<string>",
"preview_status": "non_payable",
"promotion": {
"application": "checkout_session",
"currency": "USD",
"discount_type": "percent",
"discount_value": 123,
"offer_id": "<string>",
"revision_id": "<string>",
"code": "<string>",
"discount_cents": 1,
"gross_merchandise_cents": 1,
"net_merchandise_cents": 1
},
"share_url": "<string>",
"stripe_checkout_session_id": "<string>",
"subtotal_cents": 1
}{
"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
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_-]+$1 - 240Response
Checkout-link lifecycle record
Safe lifecycle projection. It excludes the token and recipient context. Machine prepare and recover may include opaque server-owned checkout session, intent, guest-link, and promotion identifiers; payment_url is returned only by a successful Live Mode prepare or recover response.
active, checkout_created, fulfilled, revoked, expired Opaque server-owned checkout intent identifier.
"USD"x >= 0x >= 0Opaque server-owned guest checkout-link identifier.
x >= 0Show child attributes
Show child attributes
not_prepared, open, processing, paid, expired, revoked, non_payable Private Live Mode Stripe Checkout capability. Never log or persist it.
Present only in a Test Mode response. It is an explicit non-payable result, not a browser URL or checkout capability.
"non_payable"Server-owned proof of the promotion applied to the checkout session.
Show child attributes
Show child attributes
Live Mode bearer URL, returned only once in the first successful creation response. Treat as a secret.
Opaque server-owned Stripe Checkout Session identifier.
x >= 0curl --request GET \
--url https://api.batchrelay.com/v1/studios/{studio_id}/checkout-links/{link_id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.batchrelay.com/v1/studios/{studio_id}/checkout-links/{link_id}"
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}/checkout-links/{link_id}', 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}/checkout-links/{link_id}",
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}/checkout-links/{link_id}"
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}/checkout-links/{link_id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.batchrelay.com/v1/studios/{studio_id}/checkout-links/{link_id}")
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{
"expires_at": "2023-11-07T05:31:56Z",
"id": "<string>",
"revocable": true,
"status": "active",
"checkout_intent_id": "<string>",
"currency": "USD",
"discount_cents": 1,
"gross_subtotal_cents": 1,
"guest_checkout_link_id": "<string>",
"net_subtotal_cents": 1,
"offer": {
"id": "<string>",
"revision_id": "<string>",
"code": "<string>",
"label": "<string>",
"revision": 2
},
"payment_state": "not_prepared",
"payment_url": "<string>",
"preview_status": "non_payable",
"promotion": {
"application": "checkout_session",
"currency": "USD",
"discount_type": "percent",
"discount_value": 123,
"offer_id": "<string>",
"revision_id": "<string>",
"code": "<string>",
"discount_cents": 1,
"gross_merchandise_cents": 1,
"net_merchandise_cents": 1
},
"share_url": "<string>",
"stripe_checkout_session_id": "<string>",
"subtotal_cents": 1
}{
"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>"
}