Mark an invoice as paid
curl --request POST \
--url https://api.tilta.io/v1/invoices/{external_id}/paid \
--header 'Authorization: Bearer <token>'const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.tilta.io/v1/invoices/{external_id}/paid', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.tilta.io/v1/invoices/{external_id}/paid"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.tilta.io/v1/invoices/{external_id}/paid",
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;
}{
"paid_at": 1712419200
}{
"code": "BAD_REQUEST",
"error": "Request validation failed. 1 issue found.",
"issues": [
{
"code": "INVALID_TYPE",
"path": "body.registered_at",
"message": "Invalid type"
}
]
}{
"error": "Unauthorized",
"code": "UNAUTHORIZED"
}{
"error": "No Entity found",
"code": "NOT_FOUND"
}{
"error": "Invoice is already marked as paid.",
"code": "CONFLICT"
}Invoices
Mark an invoice as paid
Signal that a buyer has repaid an invoice directly to the merchant outside of Tilta’s collection process. Updates invoice status to PAID.
POST
/
v1
/
invoices
/
{external_id}
/
paid
Mark an invoice as paid
curl --request POST \
--url https://api.tilta.io/v1/invoices/{external_id}/paid \
--header 'Authorization: Bearer <token>'const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.tilta.io/v1/invoices/{external_id}/paid', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.tilta.io/v1/invoices/{external_id}/paid"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.tilta.io/v1/invoices/{external_id}/paid",
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;
}{
"paid_at": 1712419200
}{
"code": "BAD_REQUEST",
"error": "Request validation failed. 1 issue found.",
"issues": [
{
"code": "INVALID_TYPE",
"path": "body.registered_at",
"message": "Invalid type"
}
]
}{
"error": "Unauthorized",
"code": "UNAUTHORIZED"
}{
"error": "No Entity found",
"code": "NOT_FOUND"
}{
"error": "Invoice is already marked as paid.",
"code": "CONFLICT"
}In some scenarios, a buyer may remit payment directly to the merchant rather than through Tilta’s standard collection flow – for example, via bank transfer or legacy payment channel. When this happens, you must notify Tilta by marking the invoice as paid so that the buyer’s credit facility is correctly updated and the invoice status reflects the settled state. This endpoint records the repayment event and closes out the financing obligation on Tilta’s side.
Only call this endpoint for out-of-band payments made directly to the merchant. Payments routed through Tilta’s collection
process (e.g., via Tilta’s bank transfer reference) are recorded automatically – calling this endpoint for those payments may
result in duplicate payment recording.
Marking an invoice as paid releases the financed amount back to the buyer’s credit facility, restoring their available limit
for future orders.
Authorizations
Your Tilta API key, sent as Bearer <key>.
Path Parameters
Unique identifier of an invoice.
Maximum string length:
100Pattern:
^[a-zA-Z0-9-_]+$Response
The invoice was marked as paid; paid_at reflects that payment.
Unix timestamp in seconds for the banking update recorded for this invoice.
Example:
1712419200