curl --request POST \
--url https://thirdparty.qonto.com/v2/products \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "Web Development Service",
"type": "service",
"unit_price": {
"value": "150.00",
"currency": "EUR"
},
"vat_rate": "0.2",
"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"
}
]
}
'import requests
url = "https://thirdparty.qonto.com/v2/products"
payload = {
"title": "Web Development Service",
"type": "service",
"unit_price": {
"value": "150.00",
"currency": "EUR"
},
"vat_rate": "0.2",
"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"
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: 'Web Development Service',
type: 'service',
unit_price: {value: '150.00', currency: 'EUR'},
vat_rate: '0.2',
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'}]
})
};
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 => "POST",
CURLOPT_POSTFIELDS => json_encode([
'title' => 'Web Development Service',
'type' => 'service',
'unit_price' => [
'value' => '150.00',
'currency' => 'EUR'
],
'vat_rate' => '0.2',
'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'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://thirdparty.qonto.com/v2/products"
payload := strings.NewReader("{\n \"title\": \"Web Development Service\",\n \"type\": \"service\",\n \"unit_price\": {\n \"value\": \"150.00\",\n \"currency\": \"EUR\"\n },\n \"vat_rate\": \"0.2\",\n \"description\": \"Full-stack web development service\",\n \"internal_note\": \"Preferred vendor for web projects\",\n \"unit\": \"hour\",\n \"vat_exemption_code\": \"N1\",\n \"links\": [\n {\n \"title\": \"Product page\",\n \"url\": \"https://www.example.com/product\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://thirdparty.qonto.com/v2/products")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"Web Development Service\",\n \"type\": \"service\",\n \"unit_price\": {\n \"value\": \"150.00\",\n \"currency\": \"EUR\"\n },\n \"vat_rate\": \"0.2\",\n \"description\": \"Full-stack web development service\",\n \"internal_note\": \"Preferred vendor for web projects\",\n \"unit\": \"hour\",\n \"vat_exemption_code\": \"N1\",\n \"links\": [\n {\n \"title\": \"Product page\",\n \"url\": \"https://www.example.com/product\"\n }\n ]\n}")
.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::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"Web Development Service\",\n \"type\": \"service\",\n \"unit_price\": {\n \"value\": \"150.00\",\n \"currency\": \"EUR\"\n },\n \"vat_rate\": \"0.2\",\n \"description\": \"Full-stack web development service\",\n \"internal_note\": \"Preferred vendor for web projects\",\n \"unit\": \"hour\",\n \"vat_exemption_code\": \"N1\",\n \"links\": [\n {\n \"title\": \"Product page\",\n \"url\": \"https://www.example.com/product\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"product": {
"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"
}
]
}
}Create a product
OAuth scope: product.write
Creates a single product for the authenticated organization.
Price plans: this endpoint is available for all Qonto price plans.
curl --request POST \
--url https://thirdparty.qonto.com/v2/products \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "Web Development Service",
"type": "service",
"unit_price": {
"value": "150.00",
"currency": "EUR"
},
"vat_rate": "0.2",
"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"
}
]
}
'import requests
url = "https://thirdparty.qonto.com/v2/products"
payload = {
"title": "Web Development Service",
"type": "service",
"unit_price": {
"value": "150.00",
"currency": "EUR"
},
"vat_rate": "0.2",
"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"
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: 'Web Development Service',
type: 'service',
unit_price: {value: '150.00', currency: 'EUR'},
vat_rate: '0.2',
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'}]
})
};
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 => "POST",
CURLOPT_POSTFIELDS => json_encode([
'title' => 'Web Development Service',
'type' => 'service',
'unit_price' => [
'value' => '150.00',
'currency' => 'EUR'
],
'vat_rate' => '0.2',
'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'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://thirdparty.qonto.com/v2/products"
payload := strings.NewReader("{\n \"title\": \"Web Development Service\",\n \"type\": \"service\",\n \"unit_price\": {\n \"value\": \"150.00\",\n \"currency\": \"EUR\"\n },\n \"vat_rate\": \"0.2\",\n \"description\": \"Full-stack web development service\",\n \"internal_note\": \"Preferred vendor for web projects\",\n \"unit\": \"hour\",\n \"vat_exemption_code\": \"N1\",\n \"links\": [\n {\n \"title\": \"Product page\",\n \"url\": \"https://www.example.com/product\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://thirdparty.qonto.com/v2/products")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"Web Development Service\",\n \"type\": \"service\",\n \"unit_price\": {\n \"value\": \"150.00\",\n \"currency\": \"EUR\"\n },\n \"vat_rate\": \"0.2\",\n \"description\": \"Full-stack web development service\",\n \"internal_note\": \"Preferred vendor for web projects\",\n \"unit\": \"hour\",\n \"vat_exemption_code\": \"N1\",\n \"links\": [\n {\n \"title\": \"Product page\",\n \"url\": \"https://www.example.com/product\"\n }\n ]\n}")
.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::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"Web Development Service\",\n \"type\": \"service\",\n \"unit_price\": {\n \"value\": \"150.00\",\n \"currency\": \"EUR\"\n },\n \"vat_rate\": \"0.2\",\n \"description\": \"Full-stack web development service\",\n \"internal_note\": \"Preferred vendor for web projects\",\n \"unit\": \"hour\",\n \"vat_exemption_code\": \"N1\",\n \"links\": [\n {\n \"title\": \"Product page\",\n \"url\": \"https://www.example.com/product\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"product": {
"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"
}
]
}
}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.
Body
Payload for creating a product.
Title of the product.
120"Web Development Service"
Whether the product is a good or a service.
good, service "service"
The unit price of the product.
Show child attributes
Show child attributes
The VAT rate as a decimal (e.g. "0.2" for 20%).
"0.2"
Description of the product.
600"Full-stack web development service"
Internal note for the product (not visible to clients).
50000"Preferred vendor for web projects"
The unit of measurement for the product (e.g. "kilogram", "hour").
"hour"
VAT exemption code, applicable when vat_rate is "0". Required for Italian organizations when the VAT rate is 0.
N1, N2, N2.1, N2.2, N3, N3.1, N3.2, N3.3, N3.4, N3.5, N3.6, N4, N5, N6, N6.1, N6.2, N6.3, N6.4, N6.5, N6.6, N6.7, N6.8, N6.9, N7, S293B, S262.1, S259, S283, S261, S262, S263, S19.1, S4.1B, S4.1A, S4, S13B, S122, S25, S21, S69, S20, S84.1.2 "N1"
External links associated with the product.
Show child attributes
Show child attributes
Response
Returns the product created.
A product belonging to the organization.
Show child attributes
Show child attributes
Was this page helpful?