curl --request POST \
--url https://thirdparty.qonto.com/v2/supplier_invoices/{id}/mark_as_paid \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"supplier_invoice": {
"payment_date": "2026-01-01"
}
}
'import requests
url = "https://thirdparty.qonto.com/v2/supplier_invoices/{id}/mark_as_paid"
payload = { "supplier_invoice": { "payment_date": "2026-01-01" } }
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: {payment_date: '2026-01-01'}})
};
fetch('https://thirdparty.qonto.com/v2/supplier_invoices/{id}/mark_as_paid', 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}/mark_as_paid",
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' => [
'payment_date' => '2026-01-01'
]
]),
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}/mark_as_paid"
payload := strings.NewReader("{\n \"supplier_invoice\": {\n \"payment_date\": \"2026-01-01\"\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}/mark_as_paid")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"supplier_invoice\": {\n \"payment_date\": \"2026-01-01\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://thirdparty.qonto.com/v2/supplier_invoices/{id}/mark_as_paid")
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 \"payment_date\": \"2026-01-01\"\n }\n}"
response = http.request(request)
puts response.read_bodyMark a supplier invoice as paid
OAuth scope: supplier_invoice.write
Marks a supplier invoice as paid for operational and accounting alignment. This is not proof that a payment was executed or settled through Qonto.
The resulting paid status and payment_date simply record that you consider the invoice settled, e.g. paid outside Qonto (wire from another bank, cash, etc.) or adjusted for internal bookkeeping.
Eligible statuses: to_review, to_approve, pending, awaiting_payment, to_pay, paid, and archived. Invoices in scheduled cannot use this endpoint (forbidden transition). On success, status is paid. Any other status returns 400 Bad Request (invalid transition).
Idempotency and retries: There is no separate idempotency key; the outcome depends on the invoice’s current status. If the invoice is already paid, another call still returns 200 without producing side effects. For other statuses, 400 could mean that the transition is not allowed, so refresh with GET before retrying.
curl --request POST \
--url https://thirdparty.qonto.com/v2/supplier_invoices/{id}/mark_as_paid \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"supplier_invoice": {
"payment_date": "2026-01-01"
}
}
'import requests
url = "https://thirdparty.qonto.com/v2/supplier_invoices/{id}/mark_as_paid"
payload = { "supplier_invoice": { "payment_date": "2026-01-01" } }
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: {payment_date: '2026-01-01'}})
};
fetch('https://thirdparty.qonto.com/v2/supplier_invoices/{id}/mark_as_paid', 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}/mark_as_paid",
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' => [
'payment_date' => '2026-01-01'
]
]),
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}/mark_as_paid"
payload := strings.NewReader("{\n \"supplier_invoice\": {\n \"payment_date\": \"2026-01-01\"\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}/mark_as_paid")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"supplier_invoice\": {\n \"payment_date\": \"2026-01-01\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://thirdparty.qonto.com/v2/supplier_invoices/{id}/mark_as_paid")
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 \"payment_date\": \"2026-01-01\"\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 mark as paid
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?