curl --request GET \
--url https://thirdparty.qonto.com/v2/recurring_invoices/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://thirdparty.qonto.com/v2/recurring_invoices/{id}"
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/recurring_invoices/{id}', 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/{id}",
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/recurring_invoices/{id}"
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/recurring_invoices/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://thirdparty.qonto.com/v2/recurring_invoices/{id}")
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{
"recurring_invoice": {
"id": "0198f2c1-8a3e-7c11-9f4d-2b6a7c8e9d01",
"status": "scheduled",
"client_id": "5c1f4e3a-9b7d-4a1e-8f2c-3d6b8a0e7f11",
"start_date": "2026-09-01",
"frequency": {
"value": 1,
"recurrence": "monthly"
},
"payment_terms_days": 30,
"invoice_status": "draft",
"purchase_order": "PO-2026-042",
"terms_and_conditions": "<string>",
"header": "<string>",
"footer": "<string>",
"currency": "EUR",
"amount_due": {
"value": "120.00",
"currency": "EUR"
},
"bank_account": {
"iban": "FR7630006000011234567890189",
"bic": "QNTOFRP1XXX"
},
"email_template": {
"send_to": [
"accounting@acme.com"
],
"copy_to_self": true,
"email_title": "Your invoice",
"email_body": "<string>"
},
"direct_debit_enabled": true,
"is_einvoice": true,
"items": [
{
"title": "Consulting",
"description": "<string>",
"quantity": "1",
"unit_price": {
"value": "100.00",
"currency": "EUR"
},
"vat_rate": "0.2",
"unit": "hour",
"vat_exemption_code": "<string>",
"discount": {
"type": "percentage",
"value": "0.1000"
}
}
],
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"client_name": "ACME SAS",
"end_date": "2023-12-25",
"next_invoice_date": "2026-10-01",
"prev_invoice_date": "2023-12-25",
"discount": {
"type": "percentage",
"value": "0.1000"
},
"payment_link": {
"methods": [
"credit_card"
]
},
"payment_reporting": {
"method": "MP01",
"conditions": "TP01"
}
}
}Retrieve a recurring invoice
OAuth scope: client_invoices.read
Returns the recurring invoice identified by the id path parameter, including its schedule, its line items and the amount each occurrence bills.
Line items are flat. A recurring invoice created in the Qonto app can group its items into named sections. This endpoint returns every item in a single items array, in section order, matching the flat items array POST /v2/recurring_invoices accepts. Section titles are not exposed.
next_invoice_date is the date the next invoice will be generated. While the recurring invoice is suspended, next_invoice_date is left out of the response, but the schedule keeps moving: dates that fall during the suspension are skipped and not billed later. After reactivation, next_invoice_date shows the next scheduled date.
curl --request GET \
--url https://thirdparty.qonto.com/v2/recurring_invoices/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://thirdparty.qonto.com/v2/recurring_invoices/{id}"
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/recurring_invoices/{id}', 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/{id}",
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/recurring_invoices/{id}"
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/recurring_invoices/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://thirdparty.qonto.com/v2/recurring_invoices/{id}")
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{
"recurring_invoice": {
"id": "0198f2c1-8a3e-7c11-9f4d-2b6a7c8e9d01",
"status": "scheduled",
"client_id": "5c1f4e3a-9b7d-4a1e-8f2c-3d6b8a0e7f11",
"start_date": "2026-09-01",
"frequency": {
"value": 1,
"recurrence": "monthly"
},
"payment_terms_days": 30,
"invoice_status": "draft",
"purchase_order": "PO-2026-042",
"terms_and_conditions": "<string>",
"header": "<string>",
"footer": "<string>",
"currency": "EUR",
"amount_due": {
"value": "120.00",
"currency": "EUR"
},
"bank_account": {
"iban": "FR7630006000011234567890189",
"bic": "QNTOFRP1XXX"
},
"email_template": {
"send_to": [
"accounting@acme.com"
],
"copy_to_self": true,
"email_title": "Your invoice",
"email_body": "<string>"
},
"direct_debit_enabled": true,
"is_einvoice": true,
"items": [
{
"title": "Consulting",
"description": "<string>",
"quantity": "1",
"unit_price": {
"value": "100.00",
"currency": "EUR"
},
"vat_rate": "0.2",
"unit": "hour",
"vat_exemption_code": "<string>",
"discount": {
"type": "percentage",
"value": "0.1000"
}
}
],
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"client_name": "ACME SAS",
"end_date": "2023-12-25",
"next_invoice_date": "2026-10-01",
"prev_invoice_date": "2023-12-25",
"discount": {
"type": "percentage",
"value": "0.1000"
},
"payment_link": {
"methods": [
"credit_card"
]
},
"payment_reporting": {
"method": "MP01",
"conditions": "TP01"
}
}
}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.
Path Parameters
The unique identifier of the recurring invoice.
Response
Returns the recurring invoice identified by the id path parameter.
Show child attributes
Show child attributes
Was this page helpful?