---
title: "List Invoice record lines"
method: GET
path: "/public/v2/invoices/{record_number}/lines/"
tags: ["Invoices"]
---

# List Invoice record lines

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

## Request

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

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

## Path parameters

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

## Query parameters

- `integration_sources` IntegrationSourceSlug[], nullable
- `search` string, nullable
- `code` string[], nullable
- `company_id` integer[], nullable
- `number` integer[], nullable
- `customer_id` integer[], nullable
- `start_date` string, date, nullable
- `end_date` string, date, nullable
- `due_date` string, date, nullable
- `due_date_until` string, date, nullable
- `transaction_currency` SystemCurrencies[], nullable
- `record_status` RecordStatus[], nullable
- `payment_status` InvoicePaymentStatus[], nullable
- `recurring_record_number` integer[], nullable
- `approval_status` string[], nullable
- `approval_status_scope` RecordStatus[], nullable
- `amount_gte` union
  - number
  - string
- `amount_lte` union
  - number
  - string
- `amount_due_gte` union
  - number
  - string
- `amount_due_lte` union
  - number
  - string
- `amount_due_updated_at_gte` string, date-time, nullable: Return invoices whose `amount_due_updated_at` is greater than or equal to this timestamp.
- `amount_due_updated_at_lte` string, date-time, nullable: Return invoices whose `amount_due_updated_at` is less than or equal to this timestamp.
- `e_invoice_status` EInvoiceStatusFilter[], nullable: Keep the invoices whose e-invoice filing has one of these statuses. `needs_attention` and `none` add to the statuses.
- `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

- PagedPublicInvoiceItemOut
  - `items` PublicInvoiceItemOut[], required
    - `account_id` integer, nullable
    - `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
    - `item_type` string, nullable
    - `hsn_sac_code` string, nullable
    - `discount_type` 'PERCENTAGE' | 'FIXED'
    - `discount_value` string, nullable
    - `discount_account_id` integer, nullable
    - `record_level_discount_amount` string, 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
    - `id` integer, required
    - `item_id` integer, required
    - `quantity` string, required
    - `rate` string, required
    - `position` integer, required
    - `memo` 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.
    - `net_amount` string, required
    - `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
    - `discount_amount` string, required
  - `count` integer, required

## Other responses

- `404`: Not Found

## Changes

- **2026-10-15** `238fe9120a75`: 1 info
  - added the enum value `kintsugi` to the property `items/` of the `query` request parameter `integration_sources`
- **2026-10-14** `3d645439b1e4`: 1 info
  - added the new optional `query` request parameter `e_invoice_status`
- **2026-10-07** `6c3a672eb6f4`: 1 info
  - added the enum value `anrok` to the property `items/` of the `query` request parameter `integration_sources`
- **2026-10-01** `8f0a589ca348`: 3 info
  - added the new optional `query` request parameter `payment_status`
  - added the new optional `query` request parameter `recurring_record_number`
  - added the optional property `items/items/account_id` 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

[Operation history](https://skmtc.dev/dualentry/apis/dualentry-public-api/changes/public/v2/invoices/: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)
