Send a client invoice via e-invoice
curl --request POST \
--url https://thirdparty.qonto.com/v2/client_invoices/{id}/send_by_einvoice \
--header 'Authorization: Bearer <token>'import requests
url = "https://thirdparty.qonto.com/v2/client_invoices/{id}/send_by_einvoice"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://thirdparty.qonto.com/v2/client_invoices/{id}/send_by_einvoice', 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/client_invoices/{id}/send_by_einvoice",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
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/client_invoices/{id}/send_by_einvoice"
req, _ := http.NewRequest("POST", 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.post("https://thirdparty.qonto.com/v2/client_invoices/{id}/send_by_einvoice")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://thirdparty.qonto.com/v2/client_invoices/{id}/send_by_einvoice")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_bodyClient invoices
Send a client invoice via e-invoice
Sends the client invoice identified by the id path parameter via e-invoice.
POST
/
v2
/
client_invoices
/
{id}
/
send_by_einvoice
Send a client invoice via e-invoice
curl --request POST \
--url https://thirdparty.qonto.com/v2/client_invoices/{id}/send_by_einvoice \
--header 'Authorization: Bearer <token>'import requests
url = "https://thirdparty.qonto.com/v2/client_invoices/{id}/send_by_einvoice"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://thirdparty.qonto.com/v2/client_invoices/{id}/send_by_einvoice', 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/client_invoices/{id}/send_by_einvoice",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
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/client_invoices/{id}/send_by_einvoice"
req, _ := http.NewRequest("POST", 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.post("https://thirdparty.qonto.com/v2/client_invoices/{id}/send_by_einvoice")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://thirdparty.qonto.com/v2/client_invoices/{id}/send_by_einvoice")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_bodyAuthentication: API key OAuth 2.0
Scope:
Delivery on the e-invoicing network is asynchronous: see E-invoicing via API for the end-to-end flows and how to track the invoice lifecycle.
Processing (asynchronous)
Relative to the e-invoicing network, delivery is asynchronous. A
Scope:
client_invoice.write
Related guide: E-invoicing via API
204 means the request was accepted for processing, not that the invoice was fully delivered or issued on the network. The client invoice status does not change when you call this endpoint.
Environment limitations
The e-invoicing flow is only available in the production environment. Sandbox does not support e-invoicing, as the underlying e-invoicing network operates exclusively in production - this is a platform-level constraint.
Eligibility (prerequisites)
Eligibility (prerequisites)
- The organization must be allowed to send e-invoices. For French organizations that means e-invoicing is activated on the organization and the organization’s SIREN is registered in the Annuaire. Unlike the two conditions below, this one is checked when you call this endpoint: an organization that does not meet it gets a
403. - The client on the invoice must be reachable on the e-invoicing network:
e_invoicing_reachableon the client (from Retrieve a client or List clients) must betrue. If it isfalse, do not call this endpoint, use Send a client invoice via email instead. This is not checked when you call this endpoint: an invoice sent to an unreachable recipient is reported as not transmitted ineinvoicing_lifecycle_events. - The client invoice must also not already have been submitted for e-invoice. If a send was already requested, calling this endpoint again completes successfully and does not resubmit the invoice. To send again after a rejection, import or create a new invoice.
sending_status from Get e-invoicing settings reports whether e-invoicing is activated on the organization. It does not cover the Annuaire registration, so sending_status: "enabled" is not on its own a guarantee that this endpoint will accept the call.Attachments
Attachments
Supporting documents attached to the invoice are not carried by this endpoint. If the invoice has an
upload_id, that document is not embedded in the emitted XML and the upload_id is ignored. The call still succeeds and no error is returned.This means the e-invoicing channel cannot currently satisfy a recipient who requires supporting documents inside the XML file (the attached document, BT-125 of EN 16931). Attachments are delivered only by Send a client invoice via email.Errors
Errors
Invoice data and recipient reachability are not validated synchronously: invalid invoice data or an unreachable recipient does not return an error on this call. Check
einvoicing_lifecycle_events on the invoice to confirm it was transmitted.Sender-side eligibility is validated synchronously and returns 403. The response body is identical whichever condition failed, so it cannot be used to tell them apart. The causes are:- the access token is missing the
client_invoice.writescope; - the organization is not eligible for e-invoicing on Qonto, or has not activated it;
- the organization’s KYB is incomplete;
- the organization is deactivated;
- for French organizations, the organization’s SIREN is not registered in the Annuaire.
Authorizations
OAuthSecretKey
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 ID of the client invoice to send
Response
Request accepted for processing; e-invoice flow continues asynchronously
Was this page helpful?