Get Product
curl --request GET \
--url https://qwoty.app/api/products/{id} \
--header 'Authorization: <authorization>'import requests
url = "https://qwoty.app/api/products/{id}"
headers = {"Authorization": "<authorization>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<authorization>'}};
fetch('https://qwoty.app/api/products/{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://qwoty.app/api/products/{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: <authorization>"
],
]);
$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://qwoty.app/api/products/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<authorization>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://qwoty.app/api/products/{id}")
.header("Authorization", "<authorization>")
.asString();require 'uri'
require 'net/http'
url = URI("https://qwoty.app/api/products/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<authorization>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"product_parent_id": "660e8400-e29b-41d4-a716-446655440001",
"workspace_id": "880e8400-e29b-41d4-a716-446655440003",
"name": "Consulting Services - Senior",
"api_name": "consulting_services_senior",
"reference": "SERV-001",
"description": "Senior consultant hourly rate",
"description_inherit_from_product": true,
"primary_image_inherit_from_product": true,
"is_active": true,
"is_default": true,
"catalogs": [
{
"id": "770e8400-e29b-41d4-a716-446655440002",
"name": "Main Catalog",
"api_name": "catalog_main"
}
],
"categories": [],
"settings": {
"unit_per_pack": 1,
"product_type": "service",
"language_code": "en",
"unit_of_measure": "hour",
"recurrence_type": "recurring"
},
"shipping": {
"weight": null,
"weight_unit": null,
"height": null,
"length": null,
"width": null,
"length_unit": null,
"country_of_origin": null,
"harmonized_system_code": null
},
"inventory": {
"sku": "CONS-SEN-001"
},
"identifiers": {
"crm": "crm_123",
"accounting": "acc_789",
"erp": "erp_456"
},
"accounting": {
"ledger_account": "4010"
},
"primary_image_id": "cc0e8400-e29b-41d4-a716-446655440020",
"parent_primary_image_id": "dd0e8400-e29b-41d4-a716-446655440021",
"options": [
{
"option_id": "aa0e8400-e29b-41d4-a716-446655440010",
"option_name": "Seniority",
"option_api_name": "seniority",
"value_id": "bb0e8400-e29b-41d4-a716-446655440011",
"value_name": "Senior",
"value_api_name": "senior"
}
],
"prices": [
{
"id": "ee0e8400-e29b-41d4-a716-446655440030",
"key": "consulting_services_senior.standard",
"pricebook": { "id": "ff0e8400-e29b-41d4-a716-446655440031", "name": "Standard", "api_name": "standard", "type": "fixed" },
"billing_frequency": null,
"pricing_model": "flat",
"amount": 1990
}
],
"created_at": "2024-12-21T10:30:00Z",
"updated_at": "2024-12-21T10:30:00Z",
"created_by": "aa1e8400-e29b-41d4-a716-446655440099",
"updated_by": "aa1e8400-e29b-41d4-a716-446655440099"
}
}
Products
Get Product
Retrieve a specific product by ID
GET
/
api
/
products
/
{id}
Get Product
curl --request GET \
--url https://qwoty.app/api/products/{id} \
--header 'Authorization: <authorization>'import requests
url = "https://qwoty.app/api/products/{id}"
headers = {"Authorization": "<authorization>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<authorization>'}};
fetch('https://qwoty.app/api/products/{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://qwoty.app/api/products/{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: <authorization>"
],
]);
$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://qwoty.app/api/products/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<authorization>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://qwoty.app/api/products/{id}")
.header("Authorization", "<authorization>")
.asString();require 'uri'
require 'net/http'
url = URI("https://qwoty.app/api/products/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<authorization>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"product_parent_id": "660e8400-e29b-41d4-a716-446655440001",
"workspace_id": "880e8400-e29b-41d4-a716-446655440003",
"name": "Consulting Services - Senior",
"api_name": "consulting_services_senior",
"reference": "SERV-001",
"description": "Senior consultant hourly rate",
"description_inherit_from_product": true,
"primary_image_inherit_from_product": true,
"is_active": true,
"is_default": true,
"catalogs": [
{
"id": "770e8400-e29b-41d4-a716-446655440002",
"name": "Main Catalog",
"api_name": "catalog_main"
}
],
"categories": [],
"settings": {
"unit_per_pack": 1,
"product_type": "service",
"language_code": "en",
"unit_of_measure": "hour",
"recurrence_type": "recurring"
},
"shipping": {
"weight": null,
"weight_unit": null,
"height": null,
"length": null,
"width": null,
"length_unit": null,
"country_of_origin": null,
"harmonized_system_code": null
},
"inventory": {
"sku": "CONS-SEN-001"
},
"identifiers": {
"crm": "crm_123",
"accounting": "acc_789",
"erp": "erp_456"
},
"accounting": {
"ledger_account": "4010"
},
"primary_image_id": "cc0e8400-e29b-41d4-a716-446655440020",
"parent_primary_image_id": "dd0e8400-e29b-41d4-a716-446655440021",
"options": [
{
"option_id": "aa0e8400-e29b-41d4-a716-446655440010",
"option_name": "Seniority",
"option_api_name": "seniority",
"value_id": "bb0e8400-e29b-41d4-a716-446655440011",
"value_name": "Senior",
"value_api_name": "senior"
}
],
"prices": [
{
"id": "ee0e8400-e29b-41d4-a716-446655440030",
"key": "consulting_services_senior.standard",
"pricebook": { "id": "ff0e8400-e29b-41d4-a716-446655440031", "name": "Standard", "api_name": "standard", "type": "fixed" },
"billing_frequency": null,
"pricing_model": "flat",
"amount": 1990
}
],
"created_at": "2024-12-21T10:30:00Z",
"updated_at": "2024-12-21T10:30:00Z",
"created_by": "aa1e8400-e29b-41d4-a716-446655440099",
"updated_by": "aa1e8400-e29b-41d4-a716-446655440099"
}
}
Authorization
string
required
Bearer token for authentication. Format:
Bearer qwoty_your_tokenPath Parameters
string
required
UUID of the product
Examples
curl https://qwoty.app/api/products/550e8400-e29b-41d4-a716-446655440000 \
-H "Authorization: Bearer qwoty_your_token"
const productId = '550e8400-e29b-41d4-a716-446655440000'
const response = await fetch(`https://qwoty.app/api/products/${productId}`, {
headers: {
Authorization: 'Bearer qwoty_your_token',
},
})
const data = await response.json()
import requests
product_id = '550e8400-e29b-41d4-a716-446655440000'
response = requests.get(
f'https://qwoty.app/api/products/{product_id}',
headers={
'Authorization': 'Bearer qwoty_your_token'
}
)
data = response.json()
Response
boolean
Indicates if the request was successful
object
The product object
Show Product Object
Show Product Object
string
Unique identifier (UUID)
string
ID of parent product (UUID)
string
Workspace ID (UUID)
string
Product name (display name combining parent + variant options)
string
API identifier (creation-only)
string
Internal reference
string
Product description
boolean
Whether to inherit description from parent product
boolean
Whether to inherit primary image from parent product
boolean
Active status
boolean
Whether this is the default product
array
array
object
object
object
string
UUID of the primary media for this product. Null if none is set.
When
primary_image_inherit_from_product is true and this field is null,
use parent_primary_image_id as the effective image.string
UUID of the primary media of the parent product. Read-only.
Useful when
primary_image_inherit_from_product is true.array
array
Prices associated with this product across all pricebooks
Show Price Entry
Show Price Entry
string
Price ID (UUID)
string | null
Semantic price key (
<product_api_name>.<pricebook_api_name>[.<unit>.<period>]), same value as key on /prices and the CSV price import id columnobject
object | null
Billing frequency (
{ id, period, unit }), null for a one-off pricestring
Pricing model (
flat, volume, graduated, percent, cost_based, none)number | null
Unit price. Only populated when
pricing_model is flat, otherwise null.string
ISO 8601 timestamp
string
ISO 8601 timestamp
string
User ID who created the product
string
User ID who last updated the product
{
"success": true,
"data": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"product_parent_id": "660e8400-e29b-41d4-a716-446655440001",
"workspace_id": "880e8400-e29b-41d4-a716-446655440003",
"name": "Consulting Services - Senior",
"api_name": "consulting_services_senior",
"reference": "SERV-001",
"description": "Senior consultant hourly rate",
"description_inherit_from_product": true,
"primary_image_inherit_from_product": true,
"is_active": true,
"is_default": true,
"catalogs": [
{
"id": "770e8400-e29b-41d4-a716-446655440002",
"name": "Main Catalog",
"api_name": "catalog_main"
}
],
"categories": [],
"settings": {
"unit_per_pack": 1,
"product_type": "service",
"language_code": "en",
"unit_of_measure": "hour",
"recurrence_type": "recurring"
},
"shipping": {
"weight": null,
"weight_unit": null,
"height": null,
"length": null,
"width": null,
"length_unit": null,
"country_of_origin": null,
"harmonized_system_code": null
},
"inventory": {
"sku": "CONS-SEN-001"
},
"identifiers": {
"crm": "crm_123",
"accounting": "acc_789",
"erp": "erp_456"
},
"accounting": {
"ledger_account": "4010"
},
"primary_image_id": "cc0e8400-e29b-41d4-a716-446655440020",
"parent_primary_image_id": "dd0e8400-e29b-41d4-a716-446655440021",
"options": [
{
"option_id": "aa0e8400-e29b-41d4-a716-446655440010",
"option_name": "Seniority",
"option_api_name": "seniority",
"value_id": "bb0e8400-e29b-41d4-a716-446655440011",
"value_name": "Senior",
"value_api_name": "senior"
}
],
"prices": [
{
"id": "ee0e8400-e29b-41d4-a716-446655440030",
"key": "consulting_services_senior.standard",
"pricebook": { "id": "ff0e8400-e29b-41d4-a716-446655440031", "name": "Standard", "api_name": "standard", "type": "fixed" },
"billing_frequency": null,
"pricing_model": "flat",
"amount": 1990
}
],
"created_at": "2024-12-21T10:30:00Z",
"updated_at": "2024-12-21T10:30:00Z",
"created_by": "aa1e8400-e29b-41d4-a716-446655440099",
"updated_by": "aa1e8400-e29b-41d4-a716-446655440099"
}
}
Error Responses
{
"success": false,
"error": "Product not found"
}
{
"success": false,
"error": "Invalid or expired token"
}
{
"success": false,
"error": "Invalid product ID format"
}
Notes
This endpoint provides direct access to a product using only the product ID. For accessing products through their parent product, you can also use:GET /api/product-parents/{id}/products/{product_id}
Last modified on October 28, 2026
Was this page helpful?

