List Products
curl --request GET \
--url https://qwoty.app/api/products \
--header 'Authorization: <authorization>'import requests
url = "https://qwoty.app/api/products"
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', 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",
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"
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")
.header("Authorization", "<authorization>")
.asString();require 'uri'
require 'net/http'
url = URI("https://qwoty.app/api/products")
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{
"total": 42,
"next": "https://qwoty.app/api/products?limit=30&page=2",
"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": null,
"accounting": null,
"erp": null
},
"accounting": {
"ledger_account": null
},
"options": [
{
"option_id": "opt-001",
"option_name": "Seniority",
"option_api_name": "seniority",
"value_id": "val-001",
"value_name": "Senior",
"value_api_name": "senior"
}
],
"prices": [
{
"id": "price-001",
"pricebook_id": "pb-001",
"pricebook_api_name": "standard",
"pricing_model": "flat",
"amount": 1990
}
],
"primary_image_id": null,
"parent_primary_image_id": null,
"created_at": "2024-12-21T10:30:00Z",
"updated_at": "2024-12-21T10:30:00Z"
}
]
}
Products
List Products
Retrieve products in your workspace with pagination and filters
GET
/
api
/
products
List Products
curl --request GET \
--url https://qwoty.app/api/products \
--header 'Authorization: <authorization>'import requests
url = "https://qwoty.app/api/products"
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', 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",
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"
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")
.header("Authorization", "<authorization>")
.asString();require 'uri'
require 'net/http'
url = URI("https://qwoty.app/api/products")
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{
"total": 42,
"next": "https://qwoty.app/api/products?limit=30&page=2",
"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": null,
"accounting": null,
"erp": null
},
"accounting": {
"ledger_account": null
},
"options": [
{
"option_id": "opt-001",
"option_name": "Seniority",
"option_api_name": "seniority",
"value_id": "val-001",
"value_name": "Senior",
"value_api_name": "senior"
}
],
"prices": [
{
"id": "price-001",
"pricebook_id": "pb-001",
"pricebook_api_name": "standard",
"pricing_model": "flat",
"amount": 1990
}
],
"primary_image_id": null,
"parent_primary_image_id": null,
"created_at": "2024-12-21T10:30:00Z",
"updated_at": "2024-12-21T10:30:00Z"
}
]
}
Authorization
string
required
Bearer token for authentication. Format:
Bearer qwoty_your_tokenQuery Parameters
integer
default:"30"
Number of results per page (max 200)
integer
default:"1"
Page number (1-based)
string
Filter by external identifier. Matches against
identifiers[erp],
identifiers[crm], and identifiers[accounting].string
Filter by exact API name
string
Filter by SKU (
inventory[sku])string
Filter by internal reference
Examples
curl https://qwoty.app/api/products \
-H "Authorization: Bearer qwoty_your_token"
curl "https://qwoty.app/api/products?limit=30&sku=CONS-SEN-001" \
-H "Authorization: Bearer qwoty_your_token"
const response = await fetch('https://qwoty.app/api/products?limit=30', {
headers: {
Authorization: 'Bearer qwoty_your_token',
},
})
const data = await response.json()
import requests
response = requests.get(
'https://qwoty.app/api/products',
params={'limit': 30},
headers={
'Authorization': 'Bearer qwoty_your_token'
}
)
data = response.json()
Response
integer
Total number of products matching the query (across all pages)
string | null
URL to fetch the next page, or
null if this is the last pagearray
Array of product objects for the current page
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
string
Internal reference
string
Product description
boolean
Whether description is inherited from the parent product
boolean
Whether the primary image is inherited from the parent product
boolean
Active status
boolean
Whether this is the default product under its parent
array
array
object
Product settings and configuration
object
Shipping information
object
Inventory information
object
External system identifiers
object
Accounting information
array
array
Prices associated with this product across all pricebooks
string
UUID of the primary media for this product. Null if none is set.
string
UUID of the primary media of the parent product. Read-only.
{
"total": 42,
"next": "https://qwoty.app/api/products?limit=30&page=2",
"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": null,
"accounting": null,
"erp": null
},
"accounting": {
"ledger_account": null
},
"options": [
{
"option_id": "opt-001",
"option_name": "Seniority",
"option_api_name": "seniority",
"value_id": "val-001",
"value_name": "Senior",
"value_api_name": "senior"
}
],
"prices": [
{
"id": "price-001",
"pricebook_id": "pb-001",
"pricebook_api_name": "standard",
"pricing_model": "flat",
"amount": 1990
}
],
"primary_image_id": null,
"parent_primary_image_id": null,
"created_at": "2024-12-21T10:30:00Z",
"updated_at": "2024-12-21T10:30:00Z"
}
]
}
Error Responses
{
"error": "Invalid API token"
}
Was this page helpful?
⌘I

