curl --request POST \
--url https://thirdparty.qonto.com/v2/recurring_invoices/validate \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"client_id": "5c1f4e3a-9b7d-4a1e-8f2c-3d6b8a0e7f11",
"start_date": "2030-01-01",
"frequency": {
"value": 1,
"recurrence": "monthly"
},
"payment_terms_days": 30,
"bank_account": {
"iban": "FR7630006000011234567890189"
},
"items": [
{
"title": "Consulting",
"quantity": "1",
"unit_price": {
"value": "100.00",
"currency": "EUR"
},
"vat_rate": "0.2",
"description": "<string>",
"unit": "<string>",
"vat_exemption_code": "<string>"
}
],
"invoice_status": "unpaid",
"currency": "EUR"
}
'import requests
url = "https://thirdparty.qonto.com/v2/recurring_invoices/validate"
payload = {
"client_id": "5c1f4e3a-9b7d-4a1e-8f2c-3d6b8a0e7f11",
"start_date": "2030-01-01",
"frequency": {
"value": 1,
"recurrence": "monthly"
},
"payment_terms_days": 30,
"bank_account": { "iban": "FR7630006000011234567890189" },
"items": [
{
"title": "Consulting",
"quantity": "1",
"unit_price": {
"value": "100.00",
"currency": "EUR"
},
"vat_rate": "0.2",
"description": "<string>",
"unit": "<string>",
"vat_exemption_code": "<string>"
}
],
"invoice_status": "unpaid",
"currency": "EUR"
}
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({
client_id: '5c1f4e3a-9b7d-4a1e-8f2c-3d6b8a0e7f11',
start_date: '2030-01-01',
frequency: {value: 1, recurrence: 'monthly'},
payment_terms_days: 30,
bank_account: {iban: 'FR7630006000011234567890189'},
items: [
{
title: 'Consulting',
quantity: '1',
unit_price: {value: '100.00', currency: 'EUR'},
vat_rate: '0.2',
description: '<string>',
unit: '<string>',
vat_exemption_code: '<string>'
}
],
invoice_status: 'unpaid',
currency: 'EUR'
})
};
fetch('https://thirdparty.qonto.com/v2/recurring_invoices/validate', 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/recurring_invoices/validate",
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([
'client_id' => '5c1f4e3a-9b7d-4a1e-8f2c-3d6b8a0e7f11',
'start_date' => '2030-01-01',
'frequency' => [
'value' => 1,
'recurrence' => 'monthly'
],
'payment_terms_days' => 30,
'bank_account' => [
'iban' => 'FR7630006000011234567890189'
],
'items' => [
[
'title' => 'Consulting',
'quantity' => '1',
'unit_price' => [
'value' => '100.00',
'currency' => 'EUR'
],
'vat_rate' => '0.2',
'description' => '<string>',
'unit' => '<string>',
'vat_exemption_code' => '<string>'
]
],
'invoice_status' => 'unpaid',
'currency' => 'EUR'
]),
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/recurring_invoices/validate"
payload := strings.NewReader("{\n \"client_id\": \"5c1f4e3a-9b7d-4a1e-8f2c-3d6b8a0e7f11\",\n \"start_date\": \"2030-01-01\",\n \"frequency\": {\n \"value\": 1,\n \"recurrence\": \"monthly\"\n },\n \"payment_terms_days\": 30,\n \"bank_account\": {\n \"iban\": \"FR7630006000011234567890189\"\n },\n \"items\": [\n {\n \"title\": \"Consulting\",\n \"quantity\": \"1\",\n \"unit_price\": {\n \"value\": \"100.00\",\n \"currency\": \"EUR\"\n },\n \"vat_rate\": \"0.2\",\n \"description\": \"<string>\",\n \"unit\": \"<string>\",\n \"vat_exemption_code\": \"<string>\"\n }\n ],\n \"invoice_status\": \"unpaid\",\n \"currency\": \"EUR\"\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/recurring_invoices/validate")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"client_id\": \"5c1f4e3a-9b7d-4a1e-8f2c-3d6b8a0e7f11\",\n \"start_date\": \"2030-01-01\",\n \"frequency\": {\n \"value\": 1,\n \"recurrence\": \"monthly\"\n },\n \"payment_terms_days\": 30,\n \"bank_account\": {\n \"iban\": \"FR7630006000011234567890189\"\n },\n \"items\": [\n {\n \"title\": \"Consulting\",\n \"quantity\": \"1\",\n \"unit_price\": {\n \"value\": \"100.00\",\n \"currency\": \"EUR\"\n },\n \"vat_rate\": \"0.2\",\n \"description\": \"<string>\",\n \"unit\": \"<string>\",\n \"vat_exemption_code\": \"<string>\"\n }\n ],\n \"invoice_status\": \"unpaid\",\n \"currency\": \"EUR\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://thirdparty.qonto.com/v2/recurring_invoices/validate")
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 \"client_id\": \"5c1f4e3a-9b7d-4a1e-8f2c-3d6b8a0e7f11\",\n \"start_date\": \"2030-01-01\",\n \"frequency\": {\n \"value\": 1,\n \"recurrence\": \"monthly\"\n },\n \"payment_terms_days\": 30,\n \"bank_account\": {\n \"iban\": \"FR7630006000011234567890189\"\n },\n \"items\": [\n {\n \"title\": \"Consulting\",\n \"quantity\": \"1\",\n \"unit_price\": {\n \"value\": \"100.00\",\n \"currency\": \"EUR\"\n },\n \"vat_rate\": \"0.2\",\n \"description\": \"<string>\",\n \"unit\": \"<string>\",\n \"vat_exemption_code\": \"<string>\"\n }\n ],\n \"invoice_status\": \"unpaid\",\n \"currency\": \"EUR\"\n}"
response = http.request(request)
puts response.read_bodyValidate a recurring invoice
OAuth scope: client_invoice.write
Checks a recurring-invoice payload without creating anything. The request body is
identical to POST /v2/recurring_invoices, and validate runs the same validation checks
that create runs.
Returns 204 No Content when the payload is valid. Nothing is persisted, no invoice is
generated and no email is sent.
Invalid payloads return the same errors create would:
403when the organization’s price plan does not include recurring invoices, or with codepermission_deniedwhile its KYB is not yet accepted.404with codecustomer_not_foundwhenclient_iddoes not match a client of the organization.412with codeinvalid_numbering_modewhen the organization does not have automatic numbering enabled (seeGET /v2/settings).422for a payload that fails validation, for example astart_datein the past, a missingemail_templatewheninvoice_statusisunpaid, or an emptybank_account.iban(codeinvalid_iban).
curl --request POST \
--url https://thirdparty.qonto.com/v2/recurring_invoices/validate \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"client_id": "5c1f4e3a-9b7d-4a1e-8f2c-3d6b8a0e7f11",
"start_date": "2030-01-01",
"frequency": {
"value": 1,
"recurrence": "monthly"
},
"payment_terms_days": 30,
"bank_account": {
"iban": "FR7630006000011234567890189"
},
"items": [
{
"title": "Consulting",
"quantity": "1",
"unit_price": {
"value": "100.00",
"currency": "EUR"
},
"vat_rate": "0.2",
"description": "<string>",
"unit": "<string>",
"vat_exemption_code": "<string>"
}
],
"invoice_status": "unpaid",
"currency": "EUR"
}
'import requests
url = "https://thirdparty.qonto.com/v2/recurring_invoices/validate"
payload = {
"client_id": "5c1f4e3a-9b7d-4a1e-8f2c-3d6b8a0e7f11",
"start_date": "2030-01-01",
"frequency": {
"value": 1,
"recurrence": "monthly"
},
"payment_terms_days": 30,
"bank_account": { "iban": "FR7630006000011234567890189" },
"items": [
{
"title": "Consulting",
"quantity": "1",
"unit_price": {
"value": "100.00",
"currency": "EUR"
},
"vat_rate": "0.2",
"description": "<string>",
"unit": "<string>",
"vat_exemption_code": "<string>"
}
],
"invoice_status": "unpaid",
"currency": "EUR"
}
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({
client_id: '5c1f4e3a-9b7d-4a1e-8f2c-3d6b8a0e7f11',
start_date: '2030-01-01',
frequency: {value: 1, recurrence: 'monthly'},
payment_terms_days: 30,
bank_account: {iban: 'FR7630006000011234567890189'},
items: [
{
title: 'Consulting',
quantity: '1',
unit_price: {value: '100.00', currency: 'EUR'},
vat_rate: '0.2',
description: '<string>',
unit: '<string>',
vat_exemption_code: '<string>'
}
],
invoice_status: 'unpaid',
currency: 'EUR'
})
};
fetch('https://thirdparty.qonto.com/v2/recurring_invoices/validate', 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/recurring_invoices/validate",
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([
'client_id' => '5c1f4e3a-9b7d-4a1e-8f2c-3d6b8a0e7f11',
'start_date' => '2030-01-01',
'frequency' => [
'value' => 1,
'recurrence' => 'monthly'
],
'payment_terms_days' => 30,
'bank_account' => [
'iban' => 'FR7630006000011234567890189'
],
'items' => [
[
'title' => 'Consulting',
'quantity' => '1',
'unit_price' => [
'value' => '100.00',
'currency' => 'EUR'
],
'vat_rate' => '0.2',
'description' => '<string>',
'unit' => '<string>',
'vat_exemption_code' => '<string>'
]
],
'invoice_status' => 'unpaid',
'currency' => 'EUR'
]),
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/recurring_invoices/validate"
payload := strings.NewReader("{\n \"client_id\": \"5c1f4e3a-9b7d-4a1e-8f2c-3d6b8a0e7f11\",\n \"start_date\": \"2030-01-01\",\n \"frequency\": {\n \"value\": 1,\n \"recurrence\": \"monthly\"\n },\n \"payment_terms_days\": 30,\n \"bank_account\": {\n \"iban\": \"FR7630006000011234567890189\"\n },\n \"items\": [\n {\n \"title\": \"Consulting\",\n \"quantity\": \"1\",\n \"unit_price\": {\n \"value\": \"100.00\",\n \"currency\": \"EUR\"\n },\n \"vat_rate\": \"0.2\",\n \"description\": \"<string>\",\n \"unit\": \"<string>\",\n \"vat_exemption_code\": \"<string>\"\n }\n ],\n \"invoice_status\": \"unpaid\",\n \"currency\": \"EUR\"\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/recurring_invoices/validate")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"client_id\": \"5c1f4e3a-9b7d-4a1e-8f2c-3d6b8a0e7f11\",\n \"start_date\": \"2030-01-01\",\n \"frequency\": {\n \"value\": 1,\n \"recurrence\": \"monthly\"\n },\n \"payment_terms_days\": 30,\n \"bank_account\": {\n \"iban\": \"FR7630006000011234567890189\"\n },\n \"items\": [\n {\n \"title\": \"Consulting\",\n \"quantity\": \"1\",\n \"unit_price\": {\n \"value\": \"100.00\",\n \"currency\": \"EUR\"\n },\n \"vat_rate\": \"0.2\",\n \"description\": \"<string>\",\n \"unit\": \"<string>\",\n \"vat_exemption_code\": \"<string>\"\n }\n ],\n \"invoice_status\": \"unpaid\",\n \"currency\": \"EUR\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://thirdparty.qonto.com/v2/recurring_invoices/validate")
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 \"client_id\": \"5c1f4e3a-9b7d-4a1e-8f2c-3d6b8a0e7f11\",\n \"start_date\": \"2030-01-01\",\n \"frequency\": {\n \"value\": 1,\n \"recurrence\": \"monthly\"\n },\n \"payment_terms_days\": 30,\n \"bank_account\": {\n \"iban\": \"FR7630006000011234567890189\"\n },\n \"items\": [\n {\n \"title\": \"Consulting\",\n \"quantity\": \"1\",\n \"unit_price\": {\n \"value\": \"100.00\",\n \"currency\": \"EUR\"\n },\n \"vat_rate\": \"0.2\",\n \"description\": \"<string>\",\n \"unit\": \"<string>\",\n \"vat_exemption_code\": \"<string>\"\n }\n ],\n \"invoice_status\": \"unpaid\",\n \"currency\": \"EUR\"\n}"
response = http.request(request)
puts response.read_bodyAuthorizations
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
The client this recurring invoice bills.
"5c1f4e3a-9b7d-4a1e-8f2c-3d6b8a0e7f11"
The date of the first occurrence. Cannot be in the past (UTC).
"2030-01-01"
Together, value and recurrence define the schedule. For example, {"value": 2, "recurrence": "monthly"} bills every two months.
Show child attributes
Show child attributes
Days between an occurrence's invoice date and its due date.
0 <= x <= 36530
The bank account generated invoices are paid to, identified by IBAN.
Show child attributes
Show child attributes
The line items billed on every occurrence.
1Show child attributes
Show child attributes
The status each generated invoice is created as.
draft, unpaid Currency for the recurring invoice and its items, as an ISO 4217 trigram. Defaults to EUR. Every item without its own unit_price.currency uses this value.
"EUR"
How each generated invoice is emailed to the client. Required when invoice_status is unpaid (or omitted, since that's the default); optional when invoice_status is draft.
Show child attributes
Show child attributes
Italian payment reporting details, required for organizations with an Italian legal country. When sent, both method and conditions are required. Non-Italian organizations should not send this property.
Show child attributes
Show child attributes
Response
The payload is valid. No content is returned and nothing was created.
Was this page helpful?