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",
"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",
"pricebook_id": "ff0e8400-e29b-41d4-a716-446655440031",
"pricebook_api_name": "standard",
"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",
"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",
"pricebook_id": "ff0e8400-e29b-41d4-a716-446655440031",
"pricebook_api_name": "standard",
"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
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",
"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",
"pricebook_id": "ff0e8400-e29b-41d4-a716-446655440031",
"pricebook_api_name": "standard",
"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 API 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}
Was this page helpful?
⌘I

