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

# The Bill

> A bill is an OnboardMe invoice. List by bill date range, download the PDF, and read Xero ledger fields when connected.

A **bill** is an invoice. List with `GET /api/v1/bills/list` filtered by bill date (`startDate` / `endDate`). Detail includes ledger fields when Xero is connected.

`POST /api/v1/bills` creates an adhoc bill for an **Active** client only. It does not itself push to Xero. Proposal-linked invoices belong on proposal create, not this route.

See [Bills](/guides/bills).

## Attributes

<ResponseField name="billingId" type="integer">
  Identifier for this invoice.
</ResponseField>

<ResponseField name="entityKey" type="uuid">
  The client being billed.
</ResponseField>

<ResponseField name="billDate" type="date">
  Invoice date. List filters use this range, not created-at.
</ResponseField>

<ResponseField name="externalId" type="string">
  Ledger id when Xero is connected.
</ResponseField>

<ResponseField name="externalNumber" type="string">
  Ledger invoice number when Xero is connected.
</ResponseField>

<ResponseField name="externalUrl" type="string">
  Link to the invoice in the ledger, when available.
</ResponseField>

Recurring billing is a separate schedule object (`GET /api/v1/recurring-billing/list`). Ledger numbers appear on **generated bills**, not on the schedule row.

<RequestExample>
  ```json The Bill object theme={null}
  {
    "billingId": 1842,
    "entityKey": "2c4f6a88-1b3d-5e7f-90ab-cdef12345678",
    "billDate": "2026-04-01",
    "externalId": "INV-1042",
    "externalNumber": "INV-1042",
    "externalUrl": "https://go.xero.com/AccountsReceivable/View.aspx?InvoiceID=..."
  }
  ```
</RequestExample>
