Method
GET /v1/billing/invoices/:invoiceId
Path Parameters
uuid
required
Invoice identifier.
Headers
string
Bearer token with
billing:read scope.Request Example
curl "https://api.voyantcloud.com/v1/billing/invoices/4a9a807e-5c7c-4f57-8e6d-2c6f1b1c5d10" \
-H "Authorization: Bearer $VOYANT_API_KEY"
const res = await fetch(
"https://api.voyantcloud.com/v1/billing/invoices/4a9a807e-5c7c-4f57-8e6d-2c6f1b1c5d10",
{ headers: { Authorization: `Bearer ${process.env.VOYANT_API_KEY}` } },
)
const invoice = await res.json()
import os, requests
resp = requests.get(
"https://api.voyantcloud.com/v1/billing/invoices/4a9a807e-5c7c-4f57-8e6d-2c6f1b1c5d10",
headers={"Authorization": f"Bearer {os.environ['VOYANT_API_KEY']}"},
)
invoice = resp.json()
Response
{
"id": "4a9a807e-5c7c-4f57-8e6d-2c6f1b1c5d10",
"number": "INV-2025-00012",
"series": "INV",
"status": "draft",
"currency": "EUR",
"issueDate": "2025-02-15T00:00:00.000Z",
"dueDate": "2025-03-01T00:00:00.000Z",
"subtotal": null,
"discountTotal": null,
"taxTotal": null,
"total": null,
"buyerAddress": {
"company": "Voyant Travel SRL",
"vat": "RO12345678",
"country": "RO"
},
"createdAt": "2025-02-15T10:25:14.000Z",
"updatedAt": "2025-02-15T10:25:14.000Z",
"lines": [
{
"id": "lin_01J0NS7V32KCJ4YQF8WF8A9E2V",
"lineNo": 1,
"description": "Summer cruise package",
"quantity": "1",
"unit": null,
"unitPrice": "2450",
"discountAmount": "0",
"taxRate": "0",
"lineTotal": "2450"
}
]
}
{ "error": "Not found" }
quantity, unitPrice, and monetary totals are stored as strings to preserve precision. Convert them to numeric types in your reporting layer as needed.