curl --request GET \
--url https://thirdparty.qonto.com/v2/products \
--header 'Authorization: Bearer <token>'import requests
url = "https://thirdparty.qonto.com/v2/products"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://thirdparty.qonto.com/v2/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://thirdparty.qonto.com/v2/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: Bearer <token>"
],
]);
$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://thirdparty.qonto.com/v2/products"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://thirdparty.qonto.com/v2/products")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://thirdparty.qonto.com/v2/products")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"products": [
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"title": "Web Development Service",
"type": "service",
"unit_price": {
"value": "150.00",
"currency": "EUR"
},
"vat_rate": "0.2",
"organization_id": "f1e2d3c4-b5a6-7890-abcd-ef1234567890",
"created_at": "2026-01-15T10:30:00Z",
"updated_at": "2026-01-15T10:30:00Z",
"description": "Full-stack web development service",
"internal_note": "Preferred vendor for web projects",
"unit": "hour",
"vat_exemption_code": "N1",
"links": [
{
"title": "Product page",
"url": "https://www.example.com/product"
}
]
}
],
"meta": {
"current_page": 2,
"next_page": 3,
"previous_page": 1,
"total_pages": 11,
"total_count": 210,
"per_page": 20
}
}List products
Retrieves the list of products for the authenticated organization.
curl --request GET \
--url https://thirdparty.qonto.com/v2/products \
--header 'Authorization: Bearer <token>'import requests
url = "https://thirdparty.qonto.com/v2/products"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://thirdparty.qonto.com/v2/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://thirdparty.qonto.com/v2/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: Bearer <token>"
],
]);
$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://thirdparty.qonto.com/v2/products"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://thirdparty.qonto.com/v2/products")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://thirdparty.qonto.com/v2/products")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"products": [
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"title": "Web Development Service",
"type": "service",
"unit_price": {
"value": "150.00",
"currency": "EUR"
},
"vat_rate": "0.2",
"organization_id": "f1e2d3c4-b5a6-7890-abcd-ef1234567890",
"created_at": "2026-01-15T10:30:00Z",
"updated_at": "2026-01-15T10:30:00Z",
"description": "Full-stack web development service",
"internal_note": "Preferred vendor for web projects",
"unit": "hour",
"vat_exemption_code": "N1",
"links": [
{
"title": "Product page",
"url": "https://www.example.com/product"
}
]
}
],
"meta": {
"current_page": 2,
"next_page": 3,
"previous_page": 1,
"total_pages": 11,
"total_count": 210,
"per_page": 20
}
}Scope:
product.read
You can sort this list by using query parameters 👇
Authorizations
Bearer authorization header: Bearer <token>, where <token> is the access token received from the authorization server at the end of the OAuth 2.0 flow.
Headers
Required only for Sandbox API requests; to get one, please sign up to the Developer Portal.
Query Parameters
Returned page (cf. Pagination).
1
Number of products per page (cf. Pagination).
25
Products can be sorted by their created_at / title property in 2 possible orders: asc (Ascending) / desc (Descending).
created_at:asc, created_at:desc, title:asc, title:desc Filter products by type. Omit to return all products regardless of type.
good, service Response
Returns the list of products.
Show child attributes
Show child attributes
Metadata for paginated products and credit notes responses.
Note: these endpoints return the previous-page field as previous_page
(rather than prev_page, used elsewhere in the Business API).
next_page and previous_page are always present and are null on the
last/first page.
Show child attributes
Show child attributes
Was this page helpful?