Consumer printing
Create a single-use 30-minute browser handoff
All responses are no-store and no-referrer. Shipping supports all 50 U.S. states and DC; Alaska and Hawaii require Expedited. Territories are unsupported.
POST
/
v1
/
consumer
/
sessions
/
{session_id}
/
handoffs
Create a single-use 30-minute browser handoff
curl --request POST \
--url https://api.batchrelay.com/v1/consumer/sessions/{session_id}/handoffs \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{}'import requests
url = "https://api.batchrelay.com/v1/consumer/sessions/{session_id}/handoffs"
payload = {}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({})
};
fetch('https://api.batchrelay.com/v1/consumer/sessions/{session_id}/handoffs', 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/consumer/sessions/{session_id}/handoffs",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.batchrelay.com/v1/consumer/sessions/{session_id}/handoffs"
payload := strings.NewReader("{}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.batchrelay.com/v1/consumer/sessions/{session_id}/handoffs")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.batchrelay.com/v1/consumer/sessions/{session_id}/handoffs")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{}"
response = http.request(request)
puts response.read_body{
"expires_at": "2023-11-07T05:31:56Z",
"handoff_code": "<string>",
"session_id": "<string>"
}{
"code": "price_changed",
"docs_url": "<string>",
"error": "<string>",
"message": "<string>",
"next_action": "refresh_catalog",
"request_id": "<string>",
"retryable": true,
"details": {}
}{
"code": "price_changed",
"docs_url": "<string>",
"error": "<string>",
"message": "<string>",
"next_action": "refresh_catalog",
"request_id": "<string>",
"retryable": true,
"details": {}
}{
"code": "price_changed",
"docs_url": "<string>",
"error": "<string>",
"message": "<string>",
"next_action": "refresh_catalog",
"request_id": "<string>",
"retryable": true,
"details": {}
}{
"code": "price_changed",
"docs_url": "<string>",
"error": "<string>",
"message": "<string>",
"next_action": "refresh_catalog",
"request_id": "<string>",
"retryable": true,
"details": {}
}{
"code": "price_changed",
"docs_url": "<string>",
"error": "<string>",
"message": "<string>",
"next_action": "refresh_catalog",
"request_id": "<string>",
"retryable": true,
"details": {}
}{
"code": "price_changed",
"docs_url": "<string>",
"error": "<string>",
"message": "<string>",
"next_action": "refresh_catalog",
"request_id": "<string>",
"retryable": true,
"details": {}
}{
"code": "price_changed",
"docs_url": "<string>",
"error": "<string>",
"message": "<string>",
"next_action": "refresh_catalog",
"request_id": "<string>",
"retryable": true,
"details": {}
}{
"code": "price_changed",
"docs_url": "<string>",
"error": "<string>",
"message": "<string>",
"next_action": "refresh_catalog",
"request_id": "<string>",
"retryable": true,
"details": {}
}Authorizations
Dedicated expiring guest-session capability. Never a developer API key. No Batch Relay account or Studio membership required.
Headers
Untrusted optional analytics hint naming the calling client surface. It never affects authorization, routing, pricing, or behavior.
Required string length:
1 - 100Untrusted optional analytics hint naming the calling client version. It never affects authorization, routing, pricing, or behavior.
Required string length:
1 - 100Untrusted optional analytics hint naming the invocation mode. It never affects authorization, routing, pricing, or behavior.
Required string length:
1 - 100Path Parameters
Maximum string length:
100Body
application/json
The body is of type object.
⌘I
Create a single-use 30-minute browser handoff
curl --request POST \
--url https://api.batchrelay.com/v1/consumer/sessions/{session_id}/handoffs \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{}'import requests
url = "https://api.batchrelay.com/v1/consumer/sessions/{session_id}/handoffs"
payload = {}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({})
};
fetch('https://api.batchrelay.com/v1/consumer/sessions/{session_id}/handoffs', 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/consumer/sessions/{session_id}/handoffs",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.batchrelay.com/v1/consumer/sessions/{session_id}/handoffs"
payload := strings.NewReader("{}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.batchrelay.com/v1/consumer/sessions/{session_id}/handoffs")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.batchrelay.com/v1/consumer/sessions/{session_id}/handoffs")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{}"
response = http.request(request)
puts response.read_body{
"expires_at": "2023-11-07T05:31:56Z",
"handoff_code": "<string>",
"session_id": "<string>"
}{
"code": "price_changed",
"docs_url": "<string>",
"error": "<string>",
"message": "<string>",
"next_action": "refresh_catalog",
"request_id": "<string>",
"retryable": true,
"details": {}
}{
"code": "price_changed",
"docs_url": "<string>",
"error": "<string>",
"message": "<string>",
"next_action": "refresh_catalog",
"request_id": "<string>",
"retryable": true,
"details": {}
}{
"code": "price_changed",
"docs_url": "<string>",
"error": "<string>",
"message": "<string>",
"next_action": "refresh_catalog",
"request_id": "<string>",
"retryable": true,
"details": {}
}{
"code": "price_changed",
"docs_url": "<string>",
"error": "<string>",
"message": "<string>",
"next_action": "refresh_catalog",
"request_id": "<string>",
"retryable": true,
"details": {}
}{
"code": "price_changed",
"docs_url": "<string>",
"error": "<string>",
"message": "<string>",
"next_action": "refresh_catalog",
"request_id": "<string>",
"retryable": true,
"details": {}
}{
"code": "price_changed",
"docs_url": "<string>",
"error": "<string>",
"message": "<string>",
"next_action": "refresh_catalog",
"request_id": "<string>",
"retryable": true,
"details": {}
}{
"code": "price_changed",
"docs_url": "<string>",
"error": "<string>",
"message": "<string>",
"next_action": "refresh_catalog",
"request_id": "<string>",
"retryable": true,
"details": {}
}{
"code": "price_changed",
"docs_url": "<string>",
"error": "<string>",
"message": "<string>",
"next_action": "refresh_catalog",
"request_id": "<string>",
"retryable": true,
"details": {}
}