curl --request POST \
--url https://thirdparty.qonto.com/v2/suppliers \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"supplier": {
"name": "ACME SAS",
"currency": "EUR",
"default_vat_rate": 20,
"tax_identifiers": {
"vat_number": "FR12345678901",
"tin_number": "123456789"
},
"address": {
"street_address": "1 rue de la Paix",
"zip_code": "75002",
"province_code": "IDF",
"city": "Paris",
"country_code": "FR"
},
"contact_info": {
"email": "billing@acme.test",
"phone_number": "+33102030405"
},
"e_invoicing": {
"recipient_code": "ABC1234"
},
"payment_details": {
"iban": "FR7630006000011234567890189"
}
}
}
'import requests
url = "https://thirdparty.qonto.com/v2/suppliers"
payload = { "supplier": {
"name": "ACME SAS",
"currency": "EUR",
"default_vat_rate": 20,
"tax_identifiers": {
"vat_number": "FR12345678901",
"tin_number": "123456789"
},
"address": {
"street_address": "1 rue de la Paix",
"zip_code": "75002",
"province_code": "IDF",
"city": "Paris",
"country_code": "FR"
},
"contact_info": {
"email": "billing@acme.test",
"phone_number": "+33102030405"
},
"e_invoicing": { "recipient_code": "ABC1234" },
"payment_details": { "iban": "FR7630006000011234567890189" }
} }
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({
supplier: {
name: 'ACME SAS',
currency: 'EUR',
default_vat_rate: 20,
tax_identifiers: {vat_number: 'FR12345678901', tin_number: '123456789'},
address: {
street_address: '1 rue de la Paix',
zip_code: '75002',
province_code: 'IDF',
city: 'Paris',
country_code: 'FR'
},
contact_info: {email: 'billing@acme.test', phone_number: '+33102030405'},
e_invoicing: {recipient_code: 'ABC1234'},
payment_details: {iban: 'FR7630006000011234567890189'}
}
})
};
fetch('https://thirdparty.qonto.com/v2/suppliers', 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/suppliers",
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([
'supplier' => [
'name' => 'ACME SAS',
'currency' => 'EUR',
'default_vat_rate' => 20,
'tax_identifiers' => [
'vat_number' => 'FR12345678901',
'tin_number' => '123456789'
],
'address' => [
'street_address' => '1 rue de la Paix',
'zip_code' => '75002',
'province_code' => 'IDF',
'city' => 'Paris',
'country_code' => 'FR'
],
'contact_info' => [
'email' => 'billing@acme.test',
'phone_number' => '+33102030405'
],
'e_invoicing' => [
'recipient_code' => 'ABC1234'
],
'payment_details' => [
'iban' => 'FR7630006000011234567890189'
]
]
]),
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/suppliers"
payload := strings.NewReader("{\n \"supplier\": {\n \"name\": \"ACME SAS\",\n \"currency\": \"EUR\",\n \"default_vat_rate\": 20,\n \"tax_identifiers\": {\n \"vat_number\": \"FR12345678901\",\n \"tin_number\": \"123456789\"\n },\n \"address\": {\n \"street_address\": \"1 rue de la Paix\",\n \"zip_code\": \"75002\",\n \"province_code\": \"IDF\",\n \"city\": \"Paris\",\n \"country_code\": \"FR\"\n },\n \"contact_info\": {\n \"email\": \"billing@acme.test\",\n \"phone_number\": \"+33102030405\"\n },\n \"e_invoicing\": {\n \"recipient_code\": \"ABC1234\"\n },\n \"payment_details\": {\n \"iban\": \"FR7630006000011234567890189\"\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/suppliers")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"supplier\": {\n \"name\": \"ACME SAS\",\n \"currency\": \"EUR\",\n \"default_vat_rate\": 20,\n \"tax_identifiers\": {\n \"vat_number\": \"FR12345678901\",\n \"tin_number\": \"123456789\"\n },\n \"address\": {\n \"street_address\": \"1 rue de la Paix\",\n \"zip_code\": \"75002\",\n \"province_code\": \"IDF\",\n \"city\": \"Paris\",\n \"country_code\": \"FR\"\n },\n \"contact_info\": {\n \"email\": \"billing@acme.test\",\n \"phone_number\": \"+33102030405\"\n },\n \"e_invoicing\": {\n \"recipient_code\": \"ABC1234\"\n },\n \"payment_details\": {\n \"iban\": \"FR7630006000011234567890189\"\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://thirdparty.qonto.com/v2/suppliers")
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 \"supplier\": {\n \"name\": \"ACME SAS\",\n \"currency\": \"EUR\",\n \"default_vat_rate\": 20,\n \"tax_identifiers\": {\n \"vat_number\": \"FR12345678901\",\n \"tin_number\": \"123456789\"\n },\n \"address\": {\n \"street_address\": \"1 rue de la Paix\",\n \"zip_code\": \"75002\",\n \"province_code\": \"IDF\",\n \"city\": \"Paris\",\n \"country_code\": \"FR\"\n },\n \"contact_info\": {\n \"email\": \"billing@acme.test\",\n \"phone_number\": \"+33102030405\"\n },\n \"e_invoicing\": {\n \"recipient_code\": \"ABC1234\"\n },\n \"payment_details\": {\n \"iban\": \"FR7630006000011234567890189\"\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"supplier": {
"id": "018f4e5a-9c1d-7b2e-8a3f-1d2c3b4a5f60",
"organization_id": "018f4e5a-1111-7b2e-8a3f-1d2c3b4a5f60",
"name": "ACME SAS",
"status": "unarchived",
"currency": "EUR",
"default_vat_rate": 20,
"outstanding_balance": {
"value": "22.10",
"currency": "EUR"
},
"tax_identifiers": {
"vat_number": "FR12345678901",
"tin_number": "123456789"
},
"address": {
"street_address": "1 rue de la Paix",
"zip_code": "75002",
"province_code": "IDF",
"city": "Paris",
"country_code": "FR"
},
"contact_info": {
"email": "billing@acme.test",
"phone_number": "+33102030405"
},
"e_invoicing": {
"recipient_code": "ABC1234"
},
"payment_details": {
"iban": "FR7630006000011234567890189"
},
"created_at": "2026-01-15T09:30:00Z",
"updated_at": "2026-01-16T14:05:00Z"
}
}Create a supplier
OAuth scope: supplier_invoice.write
Creates a supplier in the organization. The organization is the one the request is authenticated for; it cannot be set in the request body. New suppliers are created with the unarchived status.
Only name is required. If a supplier with the same name and IBAN already exists in the organization, it is returned instead of creating a duplicate. If the IBAN already belongs to a supplier with a different name, the call fails with 422.
Sensitive fields (payment_details and tax_identifiers) are masked in the response unless the caller is allowed to see them.
curl --request POST \
--url https://thirdparty.qonto.com/v2/suppliers \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"supplier": {
"name": "ACME SAS",
"currency": "EUR",
"default_vat_rate": 20,
"tax_identifiers": {
"vat_number": "FR12345678901",
"tin_number": "123456789"
},
"address": {
"street_address": "1 rue de la Paix",
"zip_code": "75002",
"province_code": "IDF",
"city": "Paris",
"country_code": "FR"
},
"contact_info": {
"email": "billing@acme.test",
"phone_number": "+33102030405"
},
"e_invoicing": {
"recipient_code": "ABC1234"
},
"payment_details": {
"iban": "FR7630006000011234567890189"
}
}
}
'import requests
url = "https://thirdparty.qonto.com/v2/suppliers"
payload = { "supplier": {
"name": "ACME SAS",
"currency": "EUR",
"default_vat_rate": 20,
"tax_identifiers": {
"vat_number": "FR12345678901",
"tin_number": "123456789"
},
"address": {
"street_address": "1 rue de la Paix",
"zip_code": "75002",
"province_code": "IDF",
"city": "Paris",
"country_code": "FR"
},
"contact_info": {
"email": "billing@acme.test",
"phone_number": "+33102030405"
},
"e_invoicing": { "recipient_code": "ABC1234" },
"payment_details": { "iban": "FR7630006000011234567890189" }
} }
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({
supplier: {
name: 'ACME SAS',
currency: 'EUR',
default_vat_rate: 20,
tax_identifiers: {vat_number: 'FR12345678901', tin_number: '123456789'},
address: {
street_address: '1 rue de la Paix',
zip_code: '75002',
province_code: 'IDF',
city: 'Paris',
country_code: 'FR'
},
contact_info: {email: 'billing@acme.test', phone_number: '+33102030405'},
e_invoicing: {recipient_code: 'ABC1234'},
payment_details: {iban: 'FR7630006000011234567890189'}
}
})
};
fetch('https://thirdparty.qonto.com/v2/suppliers', 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/suppliers",
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([
'supplier' => [
'name' => 'ACME SAS',
'currency' => 'EUR',
'default_vat_rate' => 20,
'tax_identifiers' => [
'vat_number' => 'FR12345678901',
'tin_number' => '123456789'
],
'address' => [
'street_address' => '1 rue de la Paix',
'zip_code' => '75002',
'province_code' => 'IDF',
'city' => 'Paris',
'country_code' => 'FR'
],
'contact_info' => [
'email' => 'billing@acme.test',
'phone_number' => '+33102030405'
],
'e_invoicing' => [
'recipient_code' => 'ABC1234'
],
'payment_details' => [
'iban' => 'FR7630006000011234567890189'
]
]
]),
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/suppliers"
payload := strings.NewReader("{\n \"supplier\": {\n \"name\": \"ACME SAS\",\n \"currency\": \"EUR\",\n \"default_vat_rate\": 20,\n \"tax_identifiers\": {\n \"vat_number\": \"FR12345678901\",\n \"tin_number\": \"123456789\"\n },\n \"address\": {\n \"street_address\": \"1 rue de la Paix\",\n \"zip_code\": \"75002\",\n \"province_code\": \"IDF\",\n \"city\": \"Paris\",\n \"country_code\": \"FR\"\n },\n \"contact_info\": {\n \"email\": \"billing@acme.test\",\n \"phone_number\": \"+33102030405\"\n },\n \"e_invoicing\": {\n \"recipient_code\": \"ABC1234\"\n },\n \"payment_details\": {\n \"iban\": \"FR7630006000011234567890189\"\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/suppliers")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"supplier\": {\n \"name\": \"ACME SAS\",\n \"currency\": \"EUR\",\n \"default_vat_rate\": 20,\n \"tax_identifiers\": {\n \"vat_number\": \"FR12345678901\",\n \"tin_number\": \"123456789\"\n },\n \"address\": {\n \"street_address\": \"1 rue de la Paix\",\n \"zip_code\": \"75002\",\n \"province_code\": \"IDF\",\n \"city\": \"Paris\",\n \"country_code\": \"FR\"\n },\n \"contact_info\": {\n \"email\": \"billing@acme.test\",\n \"phone_number\": \"+33102030405\"\n },\n \"e_invoicing\": {\n \"recipient_code\": \"ABC1234\"\n },\n \"payment_details\": {\n \"iban\": \"FR7630006000011234567890189\"\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://thirdparty.qonto.com/v2/suppliers")
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 \"supplier\": {\n \"name\": \"ACME SAS\",\n \"currency\": \"EUR\",\n \"default_vat_rate\": 20,\n \"tax_identifiers\": {\n \"vat_number\": \"FR12345678901\",\n \"tin_number\": \"123456789\"\n },\n \"address\": {\n \"street_address\": \"1 rue de la Paix\",\n \"zip_code\": \"75002\",\n \"province_code\": \"IDF\",\n \"city\": \"Paris\",\n \"country_code\": \"FR\"\n },\n \"contact_info\": {\n \"email\": \"billing@acme.test\",\n \"phone_number\": \"+33102030405\"\n },\n \"e_invoicing\": {\n \"recipient_code\": \"ABC1234\"\n },\n \"payment_details\": {\n \"iban\": \"FR7630006000011234567890189\"\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"supplier": {
"id": "018f4e5a-9c1d-7b2e-8a3f-1d2c3b4a5f60",
"organization_id": "018f4e5a-1111-7b2e-8a3f-1d2c3b4a5f60",
"name": "ACME SAS",
"status": "unarchived",
"currency": "EUR",
"default_vat_rate": 20,
"outstanding_balance": {
"value": "22.10",
"currency": "EUR"
},
"tax_identifiers": {
"vat_number": "FR12345678901",
"tin_number": "123456789"
},
"address": {
"street_address": "1 rue de la Paix",
"zip_code": "75002",
"province_code": "IDF",
"city": "Paris",
"country_code": "FR"
},
"contact_info": {
"email": "billing@acme.test",
"phone_number": "+33102030405"
},
"e_invoicing": {
"recipient_code": "ABC1234"
},
"payment_details": {
"iban": "FR7630006000011234567890189"
},
"created_at": "2026-01-15T09:30:00Z",
"updated_at": "2026-01-16T14:05:00Z"
}
}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.
- Authorization URL
- https://oauth.qonto.com/oauth2/auth
- Token URL
- https://oauth.qonto.com/oauth2/token
- Refresh URL
- https://oauth.qonto.com/oauth2/token
Headers
Required only for Sandbox API requests; to get one, please sign up to the Developer Portal.
Body
Show child attributes
Show child attributes
Response
The created supplier
Show child attributes
Show child attributes
Was this page helpful?