---
title: "List Bill record lines"
method: GET
path: "/public/v2/bills/{record_number}/lines/"
tags: ["Bills"]
---

# List Bill record lines

`GET /public/v2/bills/{record_number}/lines/`

## Request

- Base URL: `https://api.dualentry.com`
- URL: `https://api.dualentry.com/public/v2/bills/{record_number}/lines/`
- Auth: none declared

Retrieve a paginated list of lines for a specific Bill record, ordered by position.

## Path parameters

- `record_number` integer, required: The `number` attribute of the record.

## Query parameters

- `search` string, nullable
- `code` string[], nullable
- `company_id` integer[], nullable
- `vendor_id` integer[], nullable
- `number` integer[], nullable
- `start_date` string, date, nullable
- `end_date` string, date, nullable
- `due_date` string, date, nullable
- `record_status` RecordStatus[], nullable
- `approval_status` string[], nullable
- `approval_status_scope` RecordStatus[], nullable
- `updated_after` string, date-time, nullable
- `updated_before` string, date-time, nullable
- `limit` integer: Number of records to return per page (capped at 100)
- `offset` integer: Number of records to skip before starting to return results

## Response `200`

OK

- PagedPublicBillLineOut
  - `items` PublicBillLineOut[], required
    - `custom_fields` CustomFieldValuePairOutputSchema[]
      - `field` CustomFieldSchemaOut, required
        - `id` integer, required
        - `company_id` integer, nullable
        - `company_ids` integer[], nullable
        - `name` string, required
        - `description` string, nullable, required
        - `helper_text` string, nullable, required
        - `field_type` 'text' | 'number' | 'currency' | 'date' | 'boolean' | 'single_select' | 'multi_select' | 'link' | 'paragraph', required
        - `applies_to` AppliesToItemSchema[], required
          - `type` 'invoice' | 'bill' | 'direct_expense' | 'journal_entry' | 'vendor_prepayment' | 'vendor_credit' | 'vendor_payment' | 'vendor_refund' | 'customer_payment' | 'customer_prepayment' | 'customer_refund' | 'customer_deposit' | 'currency_revaluation' | 'contract' | 'fixed_asset' | 'customer' | 'vendor' | 'company' | 'sales_order' | 'cash_sale' | 'customer_credit', required
          - `layer` 'transaction' | 'entry'
          - `is_active` boolean
          - `is_required` boolean
        - `default_value` union
          - string
          - string[]
        - `options` string[], nullable, required
        - `is_active` boolean, nullable, required
      - `value` CustomFieldValueSchemaOut
        - `id` integer, required
        - `custom_field_id` integer, required
        - `custom_field_name` string, required
        - `custom_field_type` string, required
        - `custom_field_value_id` integer, required
        - `value` unknown, required
        - `created_at` string, required
        - `updated_at` string, required
    - `item_type` string, nullable
    - `hsn_sac_code` string, nullable
    - `amortizable_assets` AmortizableAssetRefOut[]
      - `id` integer, required
      - `name` string, required
    - `fixed_assets` FixedAssetRefOut[]
      - `id` integer, required
      - `name` string, required
    - `classifications` RecordClassificationsSchemaOut[]
      - `id` integer, required
      - `name` string, required
      - `line_id` integer, required
      - `line_name` string, required
      - `parent_classification_id` integer, nullable
      - `parent_classification_line_id` integer, nullable
    - `tax` ItemTaxDataOut
      - `code` string, required
      - `rate` string, required
      - `amount` string, required
      - `is_taxable` boolean, nullable
      - `tax_exempt_amount` string, nullable
      - `vat_rate_id` integer, nullable
      - `gst_tax_rate_id` integer, nullable
      - `tax_metadata` object, nullable
      - `tax_components` TaxComponentSchema[], nullable
        - `component_type` union, required
          - 'CGST' | 'SGST' | 'IGST' | 'CESS' | 'GST' | 'PST' | 'HST' | 'QST'
          - 'GST' | 'SST': Broad classification of a tax rate within the GST module. `GST` covers the single-stage value-added-style regimes (AU, NZ, SG, IN, CA). `SST` covers Malaysia's Sales and Service Tax — a non-creditable single-stage regime that replaced Malaysia's GST in 2018. SST actually has two sub-regimes (Sales Tax on goods, Service Tax on services) but they share registration format (ANN-YYMM-NNNNNNNN, self-identifying by prefix), calculation rules, and administration — so we don't split them at the family level. The rate's ``name`` ("Sales Tax 10%", "Service Tax 8%") carries that human distinction.
        - `rate` string, required
        - `amount` string, required
        - `region` string, nullable
        - `position` integer, required
      - `amount_with_tax` string, nullable
      - `rate_name` string, nullable
      - `rate_description` string, nullable
      - `rate_type` string, nullable
      - `tax_treatment` string, nullable
      - `valid_to` string, date, nullable
    - `is_billable` boolean
    - `billable_customer_id` integer, nullable
    - `billable_customer_name` string, nullable
    - `billable_project_id` integer, nullable
    - `billable_project_name` string, nullable
    - `billable_markup_pct` string, nullable
    - `id` integer, required
    - `line_type` string, required
    - `position` integer, required
    - `rate` string, required
    - `quantity` string, required
    - `company_id` integer, nullable: Optional company for this line. If this company differs from the record `company_id`, DualEntry posts intercompany Due To/From and elimination entries. Omit this field, or set it equal to the header `company_id`, for a single-company line.
    - `item_id` integer, nullable
    - `memo` string, nullable
    - `account_number` integer, nullable
    - `expense_description` string, nullable
    - `customer_id` integer, nullable
    - `customer_name` string, nullable
    - `vendor_id` integer, nullable
    - `vendor_name` string, nullable
    - `net_amount` string, required: Net amount before tax
    - `tax_amount` string, required: Calculated tax amount
    - `gross_amount` string, required: Calculated total amount including tax
    - `amount` string, required: Calculated total amount including tax named amount for backward compatibility
  - `count` integer, required

## Other responses

- `404`: Not Found

## Changes

- **2026-10-15** `238fe9120a75`: 1 info
  - added the optional property `items/items/custom_fields` to the response with the `200` status
- **2026-09-29** `4b2d6ee0dff6`: 3 info
  - added the optional property `error_code` to the response with the `404` status
  - added the optional property `error_reason` to the response with the `404` status
  - added the optional property `items/items/tax/anyOf[subschema #1: ItemTaxDataOut]/valid_to` to the response with the `200` status
- **2026-09-26** `9f0ddd3870e6`: 1 info
  - added the optional property `items/items/tax/anyOf[subschema #1: ItemTaxDataOut]/rate_description` to the response with the `200` status
- **2026-09-22** `16adf1baac76`: 6 info
  - added the optional property `items/items/billable_customer_id` to the response with the `200` status
  - added the optional property `items/items/billable_customer_name` to the response with the `200` status
  - added the optional property `items/items/billable_markup_pct` to the response with the `200` status
  - added the optional property `items/items/billable_project_id` to the response with the `200` status
  - …2 more
- **2026-09-17** `eb1551572556`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/dualentry/apis/dualentry-public-api/changes/public/v2/bills/:record_number/lines/get.md)

---

[API](https://skmtc.dev/dualentry/apis/dualentry-public-api.md) · [All operations](https://skmtc.dev/dualentry/apis/dualentry-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/dualentry/apis/dualentry-public-api/revisions/7588ae19aaff?raw)
