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

# How to Add Custom Fields to Transaction Lines

> Show a custom field on each line of a bill, invoice, journal entry, or other transaction, so every line holds its own value, then enter values line by line.

Add a custom field to transaction lines when the value changes from line to line, such as a project code, a receipt date, or an external tracking ID on each expense line of a bill. A line-level field is the same kind of [custom field](https://docs.dualentry.com/accountants/platform-configuration/custom-fields.md) you already use on record headers, turned on for the **Details** level instead of, or as well as, the **Header** level. Each line then holds its own value, separate from the header value and from every other line.

After you complete these steps, the record's line table has a **Custom Fields** column, and each line's value appears on that line in the app, in reports, and in the public API.

## Prerequisites

Before you add a line-level custom field, check the following:

* Your organization subscribes to custom fields, and your role lets you create and edit them. Custom fields live under **Configuration → Accounting Setup → Custom Fields**.
* The record type you want supports line-level fields. Bills, invoices, journal entries, and 11 other record types do; see [Header and line levels](https://docs.dualentry.com/accountants/platform-configuration/custom-fields.md#header-and-line-levels) for the full list and which lines on each record accept a value.
* If custom field changes are under an [approval workflow](https://docs.dualentry.com/accountants/platform-configuration/approval-workflows.md), a new or edited field can stay inactive until the change is approved.

## Turn on a custom field for transaction lines

You choose the level for each record type on the field's **Access** tab. A field can be shown at the **Header** level, the **Details** level, or both, and each level has its own **Required** setting.

1. Navigate to **Configuration → Accounting Setup → Custom Fields**. Select **New field** to create a field, or open an existing field and edit it.
2. On the **Field** tab, set the **Field Type** and **Label**. The label is what appears in the line drawer and in report columns, so use a name that reads well on its own, such as **Project code**. You can't change the type after the field is created.
3. Open the **Access** tab. The **Availability** table lists each record type once, with a **Header** group and a **Details** group of columns. **Header** applies to the record as a whole; **Details** applies to individual line items.
4. For each record type that needs the field on its lines, turn on **Show Field** under **Details**. Turn on **Show Field** under **Header** as well if the record also needs one value for the whole transaction.
5. Select **Required** under **Details** only if every line must have a value. You can mark a level required only where the field is shown.
6. Optionally, under **Company Access**, select **Edit access** and choose the companies that can use the field. With no companies selected, every company can use it.
7. Save the field.

The first row of the **Availability** table, **All records**, turns **Show Field** and **Required** on or off for every record type in that group at once. Record types with no line-level support, such as customers, vendors, contracts, and fixed assets, have no **Details** controls. Purchase orders, quotes, and intercompany journal entries work the other way: they accept custom fields only on their lines, so they have no **Header** controls.

## Enter custom field values on a line

Once a field is shown at the **Details** level, the record's line table gets one **Custom Fields** column, placed right after **Classifications**. The column appears only when at least one active line field is available to the record's company, and each line's values are edited in a drawer.

1. Open or create the record, and select its company first. The column lists only fields available to that company.
2. On the line you want to fill in, select **+** in the **Custom Fields** column. A line that already has values shows the number of filled fields instead; select it to edit them.
3. Check **Line Details** at the top of the **Custom Fields** drawer to confirm which line you are editing. It shows the line number and, where the line has them, its account, item, amount (or debit and credit on a journal entry), and description.
4. Enter values under **Custom Fields**. When a record type has more than 10 line fields, use the search box to find a field by name. If any line field is required, a **Complete** or **Incomplete** badge shows whether this line's required fields are filled.
5. Select **Save** to apply the values to that line only, or **Cancel** to discard them.
6. Repeat for the other lines, then save the record.

On a saved record that you are viewing rather than editing, the drawer opens read-only and lists only the fields that have a value.

## How line values behave when you save, copy, or change a record

Line values follow the line, not the record, so a few everyday actions treat them differently from header values.

* **Required fields**: the **Custom Fields** column header shows a required marker when at least one line field is required. If you save the record with a required line field empty, that line's cell turns red and the drawer marks the field, for example `Project code is required`. An empty multi select counts as missing.
* **Default values**: if a field has a default value, new lines start with it filled in.
* **Duplicating a record**: line values copy to the new record's lines. Values for fields that are no longer active on that record type are left out.
* **Changing the company**: when you change the record's company, values for fields not available to the new company are cleared from every line.
* **Lines with their own company**: when a line belongs to a different company than the record, such as a line on an intercompany journal entry, the field's company list is checked against the line's company.
* **Payment lines**: on customer payments, deposits, and refunds, only account lines on the **Other** tab accept line fields. On a customer refund, a line that stops being an account line loses its line values.

Line values never post to the general ledger. Correcting one on a posted record changes no balance and needs no reversing entry.

## Troubleshooting

The table below lists common problems with line-level custom fields and how to fix them:

| Symptom | Likely cause | Fix |
| - | - | - |
| A record type has no **Details** controls | That record type doesn't support line-level fields | Check the supported records in [Header and line levels](https://docs.dualentry.com/accountants/platform-configuration/custom-fields.md#header-and-line-levels) |
| No **Custom Fields** column on the line table | No active field is shown at **Details** for that record type, or no such field is available to the record's company | Turn on **Show Field** under **Details**, and check the field's **Company Access** list |
| The record won't save and a line's **Custom Fields** cell is red | A required line field is empty on that line | Open the drawer on the red line and fill in the marked fields |
| A line value disappeared after you changed the record's company | The field isn't available to the new company | Add the company under **Company Access**, or remove all companies so every company can use the field |
| A line value doesn't appear in a report | Not every report or record type shows line values yet | See [Where line values appear](https://docs.dualentry.com/accountants/platform-configuration/custom-fields.md#where-line-values-appear) |

For the API fields, bulk import columns, and reporting coverage behind these steps, see the [custom fields reference](https://docs.dualentry.com/accountants/platform-configuration/custom-fields.md). To compare line-level custom fields with classifications, see [Classifications](https://docs.dualentry.com/accountants/platform-configuration/classifications.md).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.