Get one active product
Returns active products only. Deprecated product IDs return product_not_found.
curl --request GET \
--url https://api.batchrelay.com/v1/catalog/products/{product_id}import requests
url = "https://api.batchrelay.com/v1/catalog/products/{product_id}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.batchrelay.com/v1/catalog/products/{product_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/catalog/products/{product_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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/catalog/products/{product_id}"
req, _ := http.NewRequest("GET", url, nil)
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/catalog/products/{product_id}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.batchrelay.com/v1/catalog/products/{product_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"fulfillment_type": "print",
"tax_category": "physical_print",
"asset_requirements": [
{
"aspect_ratio": {
"height": 2,
"width": 2
},
"required": true,
"role": "artwork",
"rotation_policy": "fixed"
}
],
"category": "prints",
"description": "<string>",
"family": {
"id": "<string>",
"name": "<string>"
},
"id": "<string>",
"lifecycle": {
"status": "active",
"replacement_product_id": "<string>"
},
"name": "<string>",
"options": [
{
"affects_price": true,
"default_value": "<string>",
"id": "<string>",
"name": "<string>",
"values": [
"<string>"
],
"description": "<string>",
"value_descriptions": [
{
"description": "<string>",
"value": "<string>"
}
]
}
],
"physical_output": {
"height": 123,
"unit": "inches",
"width": 123
},
"revision": 2,
"template_requirement": "required",
"unit_costs": [
{
"option_values": [
{
"option_id": "<string>",
"value": "<string>"
}
],
"pricing_status": "unverified",
"unit_cost_cents": 1
}
],
"units_per_quantity": 2,
"variant_attributes": {},
"consumer_quantity": {
"unit_plural": "<string>",
"unit_singular": "<string>",
"container_plural": "<string>",
"container_singular": "<string>"
},
"fulfillment_target": {
"id": "<string>",
"revision": 2
},
"prepared_artwork": {
"finished_area": {
"kind": "rectangle",
"center_in": {
"x": 1,
"y": 1
},
"diameter_in": 123,
"inset_in": {
"bottom": 1,
"left": 1,
"right": 1,
"top": 1
}
},
"important_content_area": {
"kind": "rectangle",
"center_in": {
"x": 1,
"y": 1
},
"diameter_in": 123,
"inset_in": {
"bottom": 1,
"left": 1,
"right": 1,
"top": 1
}
},
"output_bounds_in": {
"height": 123,
"width": 123
},
"output_dpi": 636,
"supported_output_dpis": [
636
]
},
"print_safety_profile": {
"expected_trim_fraction_per_edge": 1,
"id": "<string>",
"important_content_inset_in": 1,
"minimum_border_inset_in": 1,
"trim_bottom_in": 1,
"trim_left_in": 1,
"trim_right_in": 1,
"trim_top_in": 1,
"version": 2,
"mounted": true
},
"text_requirements": [
{
"allow_blank": true,
"name": "<string>",
"slot": "text-1"
}
]
}{
"code": "<string>",
"docs_url": "<string>",
"error": "<string>",
"message": "<string>",
"request_id": "<string>"
}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
1Response
Canonical product
- Option 1
- Option 2
print, digital "print"physical_print, digital_download "physical_print"Show child attributes
Show child attributes
prints, keepsakes, trader-products, composites, digital-downloads Discovery grouping shared by related immutable products. Do not use a family ID in an order.
Show child attributes
Show child attributes
Stable canonical product identifier.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Required for physical print products and omitted for digital products.
Show child attributes
Show child attributes
Immutable fulfillment-contract revision.
x >= 1Product-specific template policy. required accepts only artwork from a succeeded Batch Relay template render; optional accepts either a compatible rendered output or direct prepared artwork; unsupported has no template workflow.
required, optional, unsupported Show child attributes
Show child attributes
Units produced or delivered by one line quantity.
x >= 1Display and filtering attributes for one immutable variant. These values do not replace the product ID and revision in an order.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
The standard physical product used for provider-neutral routing after a composed product has flattened to finished artwork.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Provider-neutral ordered text slots supported by this product. The current catalog publishes six generic Memory Mate slots while final visual/provider field labels are under verification; clients must use the returned slot IDs rather than infer provider node IDs.
Show child attributes
Show child attributes
curl --request GET \
--url https://api.batchrelay.com/v1/catalog/products/{product_id}import requests
url = "https://api.batchrelay.com/v1/catalog/products/{product_id}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.batchrelay.com/v1/catalog/products/{product_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/catalog/products/{product_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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/catalog/products/{product_id}"
req, _ := http.NewRequest("GET", url, nil)
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/catalog/products/{product_id}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.batchrelay.com/v1/catalog/products/{product_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"fulfillment_type": "print",
"tax_category": "physical_print",
"asset_requirements": [
{
"aspect_ratio": {
"height": 2,
"width": 2
},
"required": true,
"role": "artwork",
"rotation_policy": "fixed"
}
],
"category": "prints",
"description": "<string>",
"family": {
"id": "<string>",
"name": "<string>"
},
"id": "<string>",
"lifecycle": {
"status": "active",
"replacement_product_id": "<string>"
},
"name": "<string>",
"options": [
{
"affects_price": true,
"default_value": "<string>",
"id": "<string>",
"name": "<string>",
"values": [
"<string>"
],
"description": "<string>",
"value_descriptions": [
{
"description": "<string>",
"value": "<string>"
}
]
}
],
"physical_output": {
"height": 123,
"unit": "inches",
"width": 123
},
"revision": 2,
"template_requirement": "required",
"unit_costs": [
{
"option_values": [
{
"option_id": "<string>",
"value": "<string>"
}
],
"pricing_status": "unverified",
"unit_cost_cents": 1
}
],
"units_per_quantity": 2,
"variant_attributes": {},
"consumer_quantity": {
"unit_plural": "<string>",
"unit_singular": "<string>",
"container_plural": "<string>",
"container_singular": "<string>"
},
"fulfillment_target": {
"id": "<string>",
"revision": 2
},
"prepared_artwork": {
"finished_area": {
"kind": "rectangle",
"center_in": {
"x": 1,
"y": 1
},
"diameter_in": 123,
"inset_in": {
"bottom": 1,
"left": 1,
"right": 1,
"top": 1
}
},
"important_content_area": {
"kind": "rectangle",
"center_in": {
"x": 1,
"y": 1
},
"diameter_in": 123,
"inset_in": {
"bottom": 1,
"left": 1,
"right": 1,
"top": 1
}
},
"output_bounds_in": {
"height": 123,
"width": 123
},
"output_dpi": 636,
"supported_output_dpis": [
636
]
},
"print_safety_profile": {
"expected_trim_fraction_per_edge": 1,
"id": "<string>",
"important_content_inset_in": 1,
"minimum_border_inset_in": 1,
"trim_bottom_in": 1,
"trim_left_in": 1,
"trim_right_in": 1,
"trim_top_in": 1,
"version": 2,
"mounted": true
},
"text_requirements": [
{
"allow_blank": true,
"name": "<string>",
"slot": "text-1"
}
]
}{
"code": "<string>",
"docs_url": "<string>",
"error": "<string>",
"message": "<string>",
"request_id": "<string>"
}