Resolving the NetSuite LIST_ID_REQD Deposit Record Error

Creating deposit records in NetSuite using the SuiteTalk API can sometimes result in the following error:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <soapenv:Header>
    <platformMsgs:documentInfo xmlns:platformMsgs="urn:messages_2015_1.platform.webservices.netsuite.com">
      <platformMsgs:nsId>REDACTED</platformMsgs:nsId>
    </platformMsgs:documentInfo>
  </soapenv:Header>
  <soapenv:Body>
    <upsertResponse xmlns="urn:messages_2015_1.platform.webservices.netsuite.com">
      <writeResponse>
        <platformCore:status xmlns:platformCore="urn:core_2015_1.platform.webservices.netsuite.com" isSuccess="false">
          <platformCore:statusDetail type="ERROR">
            <platformCore:code>LIST_ID_REQD</platformCore:code>
            <platformCore:message>Required field missing in a related list.  You must set lineId.</platformCore:message>
          </platformCore:statusDetail>
        </platformCore:status>
        <baseRef xmlns:platformCore="urn:core_2015_1.platform.webservices.netsuite.com" externalId="external_id" type="deposit" xsi:type="platformCore:RecordRef"/>
      </writeResponse>
    </upsertResponse>
  </soapenv:Body>
</soapenv:Envelope>

This error is not well documented at all and does not point to a single issue. In order to properly handle and prevent this error from occurring you need to implementation validation before upserting (or adding, updating, etc) the record.

Here are the various causes of the error:

  • The included refund's (CashRefund, CustomerRefund) account field is not set to the NetSuite instance's "Undeposited Funds" account.
    • The easiest way to determine what the "Undeposited Funds" account internalId is to search for the account by name and grab the first search result.
    • The name of the "Undeposited funds account can be customized. If this is the case, you need to hard code the internalId in your app's config.
  • The payment (CustomerPayment, CashPayment, CustomerDeposit) is already deposited. You can test this through the status field on these record. The status field will have a value of Deposited or Not Deposited.
  • The payment sublist filters in the deposit sublist are causing the given payment record to be unavailable for the deposit. For example, if your GUI payment sublist date filters are configured to only show payments for the current day, and your deposit request using SuiteTalk includes a record created yesterday. In this case, the GUI settings (which cannot be modified or inspecting by SuiteTalk) are causing a fatal error in SuiteTalk. Instructions on how to resolve this error are detailed below.
  • The subsidiary or bank account restrictions are causing your included payment to be unavailable. The best way to see if this is the case is to attempt to mimic the SuiteTalk request in the GUI.

Clearing the Deposit Payment Sublist Filters

Here's how you clear the deposit payment sublist date filters.

  1. Go to the new deposit record page: https://system.netsuite.com/app/accounting/transactions/deposit.nl. Note that this URL can be different depending on your data center URL.
  2. Choose "All" on the date filter drop down. The From/To filters should disappear.
  3. Press cancel
  4. Go to the new deposit page again and ensure that the changes "stuck"
  5. Logout
  6. Wait 8-24 hours for the NetSuite user cache to invalidate. This is an internal cache that you cannot monitor.

In addition to clearing the date filter, click the customize button and ensure that no additional filters have been added to the payment sublist filters. You are aiming for a completely stock configuration.