---
title: "How does LUSID resolve transactions to transaction types?"
slug: "how-does-lusid-resolve-transactions-to-transaction-types"
updated: 2024-08-20T13:42:47Z
published: 2024-08-20T13:42:47Z
canonical: "support.lusid.com/how-does-lusid-resolve-transactions-to-transaction-types"
---

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

# How does LUSID resolve transactions to transaction types?

Every [transaction you upsert](/v1/docs/how-do-i-create-or-update-a-transaction) to a transaction portfolio LUSID must resolve to a known [transaction type](/v1/docs/what-is-a-transaction-type) in order to define the precise economic impact; that is, the effect on your holding in the underlying instrument, and also potentially on holdings in other instruments in the portfolio too (for example, currency holdings).

> **Note**: By default, LUSID operates a ‘data load first’ policy, so transactions are upserted and resolution failures must be handled manually as a post-process step. You can increase the level of validation to *reject* transactions that do not resolve to transaction types. [Find out more about this](/v1/docs/validating-transactions).

An upserted transaction:

- *Must* have its `type` field set, specifying the name of a transaction type.
- *Can* have its `source` field set, specifying a data provider for a set of transaction types.
- *Can* be in a parent portfolio that has its `transactionTypeScope` field set, specifying a logical repository of transaction types valid for this portfolio.

[Find out more about scopes and sources](/v1/docs/grouping-related-transaction-types-using-scopes-and-sources).

For each upserted transaction, LUSID examines the `type` field and performs the following steps in turn:

1. LUSID determines the transaction type scope in which to look. If the parent portfolio has a custom scope set, LUSID examines that scope. If not, LUSID examines the built-in `default` scope. Unlike when [resolving instruments](/v1/docs/how-does-lusid-resolve-data-to-instruments), LUSID does not ‘fall back’ from a custom transaction type scope to the `default` scope.
2. If a transaction has its `source` field set (for example, to `Goldman`) then LUSID searches the `Goldman` source in the given scope for a matching transaction type.
3. If no transaction type is found, LUSID searches the `default` source in the given scope for a matching transaction type.
4. If no transaction type is found and the transaction has a source of (for example) `Goldman`, LUSID searches the `Goldman` source in the given scope for a transaction type with `isDefault` set to `True`.
5. If no transaction type is found, or if the transaction has no source, LUSID searches the `default` source in the given scope for a transaction type with `isDefault` set to `True`.

If a transaction type *still* cannot be found:

- By default, the transaction is upserted into LUSID with metadata warnings, but excluded from holdings calculations. You should edit the `type` field of these transactions to supply a known transaction type.
- If you have [increased the level of validation](/v1/docs/validating-transactions#increasing-the-level-of-validation-to-reject-unresolved-transactions) to reject unresolved transactions, then the transaction is not upserted. You should specify a known transaction type in the API request before attempting to upsert again.

The following flow diagram summarises the mapping logic:

![](https://cdn.document360.io/d575ad81-c0ed-4980-bbd1-d59ac5c3de82/Images/Documentation/7cfc63a0-3044-441b-9c2a-1415d3c25006.png)
