List invoices
curl --request GET \
--url https://api.orbit.devotel.io/api/v1/billing/invoices/ \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.orbit.devotel.io/api/v1/billing/invoices/"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.orbit.devotel.io/api/v1/billing/invoices/', 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://api.orbit.devotel.io/api/v1/billing/invoices/",
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://api.orbit.devotel.io/api/v1/billing/invoices/"
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://api.orbit.devotel.io/api/v1/billing/invoices/")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.orbit.devotel.io/api/v1/billing/invoices/")
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{
"data": {
"invoices": [
{
"id": "inv_01H8XGJ",
"invoice_number": "INV-0007",
"status": "paid",
"currency": "USD",
"amount_due": "0.00",
"total": "125.00",
"subtotal": "125.00",
"invoice_date": "2026-08-01",
"due_date": "2026-08-15",
"hosted_invoice_url": "https://billing.devotel.io/invoices/inv_01H8XGJ",
"invoice_pdf": "https://billing.devotel.io/invoices/inv_01H8XGJ.pdf",
"tax_amount": "0.00"
}
],
"has_more": false,
"next_cursor": null
},
"meta": {
"request_id": "req_01H8XGJ",
"timestamp": "2026-08-02T12:00:00.000Z"
}
}Billing
List invoices
Lists the organization’s invoices, most recent first, with money and lifecycle fields plus hosted-URL and PDF links. Supports filtering by status and cursor pagination via cursor and limit. Falls back to Orbit’s durable record of issued invoices when the live billing provider is unavailable. Requires an owner or admin role.
GET
/
api
/
v1
/
billing
/
invoices
/
List invoices
curl --request GET \
--url https://api.orbit.devotel.io/api/v1/billing/invoices/ \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.orbit.devotel.io/api/v1/billing/invoices/"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.orbit.devotel.io/api/v1/billing/invoices/', 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://api.orbit.devotel.io/api/v1/billing/invoices/",
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://api.orbit.devotel.io/api/v1/billing/invoices/"
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://api.orbit.devotel.io/api/v1/billing/invoices/")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.orbit.devotel.io/api/v1/billing/invoices/")
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{
"data": {
"invoices": [
{
"id": "inv_01H8XGJ",
"invoice_number": "INV-0007",
"status": "paid",
"currency": "USD",
"amount_due": "0.00",
"total": "125.00",
"subtotal": "125.00",
"invoice_date": "2026-08-01",
"due_date": "2026-08-15",
"hosted_invoice_url": "https://billing.devotel.io/invoices/inv_01H8XGJ",
"invoice_pdf": "https://billing.devotel.io/invoices/inv_01H8XGJ.pdf",
"tax_amount": "0.00"
}
],
"has_more": false,
"next_cursor": null
},
"meta": {
"request_id": "req_01H8XGJ",
"timestamp": "2026-08-02T12:00:00.000Z"
}
}Authorizations
BearerApiKey
Dashboard JWT token from Clerk
Query Parameters
Filter to invoices in a single lifecycle status.
Available options:
draft, issued, paid, void, synced Opaque pagination cursor from a previous page's next_cursor.
Maximum number of invoices to return.
Required range:
1 <= x <= 100⌘I