curl --request POST \
--url https://thirdparty.qonto.com/v2/supplier_invoices/{id}/reject \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"supplier_invoice": {
"declined_note": "This invoice is not valid",
"declined_reason_code": "DOUBLON"
}
}
'import requests
url = "https://thirdparty.qonto.com/v2/supplier_invoices/{id}/reject"
payload = { "supplier_invoice": {
"declined_note": "This invoice is not valid",
"declined_reason_code": "DOUBLON"
} }
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_invoice: {declined_note: 'This invoice is not valid', declined_reason_code: 'DOUBLON'}
})
};
fetch('https://thirdparty.qonto.com/v2/supplier_invoices/{id}/reject', 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/supplier_invoices/{id}/reject",
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_invoice' => [
'declined_note' => 'This invoice is not valid',
'declined_reason_code' => 'DOUBLON'
]
]),
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/supplier_invoices/{id}/reject"
payload := strings.NewReader("{\n \"supplier_invoice\": {\n \"declined_note\": \"This invoice is not valid\",\n \"declined_reason_code\": \"DOUBLON\"\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/supplier_invoices/{id}/reject")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"supplier_invoice\": {\n \"declined_note\": \"This invoice is not valid\",\n \"declined_reason_code\": \"DOUBLON\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://thirdparty.qonto.com/v2/supplier_invoices/{id}/reject")
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_invoice\": {\n \"declined_note\": \"This invoice is not valid\",\n \"declined_reason_code\": \"DOUBLON\"\n }\n}"
response = http.request(request)
puts response.read_bodyReject a supplier invoice
OAuth scope: supplier_invoice.write
Rejects a supplier invoice. Only to_review, to_approve, and awaiting_payment invoices are eligible. On success, status is rejected. If the invoice is in any other status, the call fails with 400 Bad Request (invalid transition).
Idempotency and retries: There is no separate idempotency key; the outcome depends on the invoice’s current status. Calling again after the invoice is already rejected returns 400 (invalid transition), not a no-op success.
Rejecting French e-invoices
From 1 September 2026, rejecting a French e-invoice requires a declined_reason_code from the AFNOR list. Requests without it return 422.
This applies only when the target invoice is a French e-invoice (is_einvoice = true and organization legal country FR). All other rejects are unaffected.
curl --request POST \
--url https://thirdparty.qonto.com/v2/supplier_invoices/{id}/reject \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"supplier_invoice": {
"declined_note": "This invoice is not valid",
"declined_reason_code": "DOUBLON"
}
}
'import requests
url = "https://thirdparty.qonto.com/v2/supplier_invoices/{id}/reject"
payload = { "supplier_invoice": {
"declined_note": "This invoice is not valid",
"declined_reason_code": "DOUBLON"
} }
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_invoice: {declined_note: 'This invoice is not valid', declined_reason_code: 'DOUBLON'}
})
};
fetch('https://thirdparty.qonto.com/v2/supplier_invoices/{id}/reject', 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/supplier_invoices/{id}/reject",
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_invoice' => [
'declined_note' => 'This invoice is not valid',
'declined_reason_code' => 'DOUBLON'
]
]),
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/supplier_invoices/{id}/reject"
payload := strings.NewReader("{\n \"supplier_invoice\": {\n \"declined_note\": \"This invoice is not valid\",\n \"declined_reason_code\": \"DOUBLON\"\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/supplier_invoices/{id}/reject")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"supplier_invoice\": {\n \"declined_note\": \"This invoice is not valid\",\n \"declined_reason_code\": \"DOUBLON\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://thirdparty.qonto.com/v2/supplier_invoices/{id}/reject")
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_invoice\": {\n \"declined_note\": \"This invoice is not valid\",\n \"declined_reason_code\": \"DOUBLON\"\n }\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.
Path Parameters
The ID of the supplier invoice to reject
Body
Show child attributes
Show child attributes
Response
The supplier invoice
"4d5418bb-bd0d-4df4-865c-c07afab8bb48"
indicates if the invoice is an e-invoice, currently ONLY for the German organizations
false
false
"4d5418bb-bd0d-4df4-865c-c07afab8bb48"
"my-invoice.pdf"
Initial status for invoices.
"to_review""to_review"
email, e_invoicing, direct_upload "email"
"2022-03-04T17:58:30+02:00"
"2022-03-04T17:58:30+02:00"
Note specified when invoice was archived
zugferd, xrechnung "zugferd"
false
ID of the supplier linked to this invoice
"4d5418bb-bd0d-4df4-865c-c07afab8bb48"
ID of the related self-invoice, when applicable
"4d5418bb-bd0d-4df4-865c-c07afab8bb48"
Name of the issuer as extracted from the invoice data
"McDonald's"
"QONTO-JAN-2022"
"McDonald's"
VAT number of the invoice issuer
"IT12345678901"
Tax Identification Number (TIN) of the invoice issuer
"1234567890"
"This is an invoice for Ronald!"
Show child attributes
Show child attributes
Total invoice amount excluding taxes. Populated for e-invoices (FR, IT, DE) and for invoices where OCR extracted the pretax total; null when the value is unknown.
Show child attributes
Show child attributes
Sum of all taxes on the invoice. Populated for e-invoices (FR, IT, DE) and for invoices where OCR extracted the tax total; null when the value is unknown.
Show child attributes
Show child attributes
Per-rate tax breakdown extracted from the invoice. Populated for e-invoices (FR, IT, DE) when the source document provides a rate-by-rate summary; null or empty otherwise.
Show child attributes
Show child attributes
"2022-03-01"
"2022-03-01"
"2022-03-01"
"2022-03-01"
"FR1420041010050500013M02606"
email_forward, e_invoicing, supplier_invoices, pay_by_invoice, integration, regate, attachments_hub, generic_upload, pay_later "email_forward"
The category of the attachment
INVOICE, EXPENSE_RECEIPT, CARD_RECEIPT, CREDIT_CARD_RECEIPT, CREDIT_NOTE, OTHER_FINANCIAL_DOCUMENT, OTHER_NON_FINANCIAL_DOCUMENT, UNKNOWN "INVOICE"
"2022-03-04T17:58:30+02:00"
Deprecated: This field contains transfer IDs, not transaction IDs. Use matched_transactions instead.
Array of payments (transfers/transactions) linked to this invoice
Show child attributes
Show child attributes
IDs of the transfer payments associated with this invoice, if any
"4d5418bb-bd0d-4df4-865c-c07afab8bb48"
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Snapshot of the supplier details captured at the time the invoice was created
Show child attributes
Show child attributes
Available actions for the invoice
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
false
false
Show child attributes
Show child attributes
suggested transactions for the invoice
Show child attributes
Show child attributes
Buyer extracted from the e-invoice XML. Null when no buyer data is available (non-e-invoices or invoices where buyer extraction is not yet supported).
Show child attributes
Show child attributes
Seller extracted from the e-invoice XML. Null when no seller data is available.
Show child attributes
Show child attributes
Payment means extracted from the e-invoice XML. Empty or null when no payment means data is available.
Show child attributes
Show child attributes
Was this page helpful?