> ## Documentation Index
> Fetch the complete documentation index at: https://docs.voyantcloud.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Get Invoice

> Retrieve a single invoice, including lines and monetary totals.

## Method

`GET` `/v1/billing/invoices/:invoiceId`

## Path Parameters

<ParamField path="invoiceId" type="uuid" required>Invoice identifier.</ParamField>

## Headers

<ParamField header="Authorization" type="string">Bearer token with `billing:read` scope.</ParamField>

## Request Example

<RequestExample>
  ```bash cURL theme={null}
  curl "https://api.voyantcloud.com/v1/billing/invoices/4a9a807e-5c7c-4f57-8e6d-2c6f1b1c5d10" \
    -H "Authorization: Bearer $VOYANT_API_KEY"
  ```

  ```javascript Node.js theme={null}
  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()
  ```

  ```python Python theme={null}
  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()
  ```
</RequestExample>

## Response

<ResponseExample>
  ```json 200 OK theme={null}
  {
    "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"
      }
    ]
  }
  ```

  ```json 404 Not Found theme={null}
  { "error": "Not found" }
  ```
</ResponseExample>

<Tip>`quantity`, `unitPrice`, and monetary totals are stored as strings to preserve precision. Convert them to numeric types in your reporting layer as needed.</Tip>
