curl --request GET \
--url https://api.fourthwall.com/open-api/v1.0/product-templates/{productId}import requests
url = "https://api.fourthwall.com/open-api/v1.0/product-templates/{productId}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.fourthwall.com/open-api/v1.0/product-templates/{productId}', 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.fourthwall.com/open-api/v1.0/product-templates/{productId}",
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.fourthwall.com/open-api/v1.0/product-templates/{productId}"
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.fourthwall.com/open-api/v1.0/product-templates/{productId}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fourthwall.com/open-api/v1.0/product-templates/{productId}")
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{
"productId": "pro_k66ZW4fsRm6c2def3itltA",
"slug": "classic-t-shirt",
"name": "Classic T-Shirt",
"category": "apparel/t-shirts",
"brand": "Bella+Canvas",
"productionMethod": "DTG",
"colorVariants": [
{
"color": {
"name": "Navy Blue",
"hex": "#000080"
},
"photos": [
{
"url": "<string>",
"designOverlay": "<string>"
}
],
"sizeVariants": [
{
"variantId": "var_abc123",
"size": "L",
"price": {
"amount": 24.99,
"currency": "USD"
},
"available": true
}
],
"status": "AVAILABLE",
"available": true
}
],
"customizableAreas": [
{
"name": "Front",
"type": "print",
"available": true,
"placements": [
{
"id": "stickerSlotOne",
"name": "Sticker Slot One"
}
],
"regionId": "front",
"productionMethod": "DTG",
"supportsBackendRendering": true,
"dimensions": {
"dpi": 300,
"pixelsWidth": 4500,
"pixelsHeight": 5400,
"inchesWidth": 15,
"inchesHeight": 18
}
}
],
"supportsBackendRendering": true,
"description": "<string>",
"minimumOrdersNumber": 10,
"priceFrom": {
"amount": 24.99,
"currency": "USD"
},
"priceTo": {
"amount": 24.99,
"currency": "USD"
},
"sizeGuide": {
"url": "<string>",
"content": "<string>"
}
}Get product template details
Get detailed information about a specific product template.
This endpoint is public and does not require authentication. Returns full product details including variants, customizable areas, size guide, and images.
curl --request GET \
--url https://api.fourthwall.com/open-api/v1.0/product-templates/{productId}import requests
url = "https://api.fourthwall.com/open-api/v1.0/product-templates/{productId}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.fourthwall.com/open-api/v1.0/product-templates/{productId}', 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.fourthwall.com/open-api/v1.0/product-templates/{productId}",
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.fourthwall.com/open-api/v1.0/product-templates/{productId}"
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.fourthwall.com/open-api/v1.0/product-templates/{productId}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fourthwall.com/open-api/v1.0/product-templates/{productId}")
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{
"productId": "pro_k66ZW4fsRm6c2def3itltA",
"slug": "classic-t-shirt",
"name": "Classic T-Shirt",
"category": "apparel/t-shirts",
"brand": "Bella+Canvas",
"productionMethod": "DTG",
"colorVariants": [
{
"color": {
"name": "Navy Blue",
"hex": "#000080"
},
"photos": [
{
"url": "<string>",
"designOverlay": "<string>"
}
],
"sizeVariants": [
{
"variantId": "var_abc123",
"size": "L",
"price": {
"amount": 24.99,
"currency": "USD"
},
"available": true
}
],
"status": "AVAILABLE",
"available": true
}
],
"customizableAreas": [
{
"name": "Front",
"type": "print",
"available": true,
"placements": [
{
"id": "stickerSlotOne",
"name": "Sticker Slot One"
}
],
"regionId": "front",
"productionMethod": "DTG",
"supportsBackendRendering": true,
"dimensions": {
"dpi": 300,
"pixelsWidth": 4500,
"pixelsHeight": 5400,
"inchesWidth": 15,
"inchesHeight": 18
}
}
],
"supportsBackendRendering": true,
"description": "<string>",
"minimumOrdersNumber": 10,
"priceFrom": {
"amount": 24.99,
"currency": "USD"
},
"priceTo": {
"amount": 24.99,
"currency": "USD"
},
"sizeGuide": {
"url": "<string>",
"content": "<string>"
}
}colorVariants[].photos[].url) are generated on demand by imgproxy and are not durable — they may change or expire. Fetch them fresh from this endpoint when you need to display images rather than storing or hardcoding them.Path Parameters
Product template ID
Response
OK
Detailed product template information
Product template ID
"pro_k66ZW4fsRm6c2def3itltA"
URL slug for this product
"classic-t-shirt"
Product name
"Classic T-Shirt"
Product category path
"apparel/t-shirts"
Brand name
"Bella+Canvas"
Production method (e.g. DTG, EMBROIDERY, DTFX, KNITTING, SUBLIMATION)
"DTG"
Product variants grouped by color
Show child attributes
Show child attributes
Customizable areas on the product
Show child attributes
Show child attributes
Whether this product can be rendered by the backend rendering pipeline (V3 Instant Designer, excluding KNITWISE). Products where this is false may have null regionIds on customizable areas and cannot be used with the design pipeline.
true
Product description
Minimum orders required to produce this product, if any
10
Lowest available variant price, or null if no variants are available
Show child attributes
Show child attributes
Highest available variant price, or null if no variants are available
Show child attributes
Show child attributes
Size guide information
Show child attributes
Show child attributes