---
title: "How do I create a transaction portfolio?"
slug: "how-do-i-create-a-transaction-portfolio"
updated: 2025-07-30T12:10:06Z
published: 2025-07-30T12:10:06Z
canonical: "support.lusid.com/how-do-i-create-a-transaction-portfolio"
---

> ## 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 do I create a transaction portfolio?

You can create a [transaction portfolio](/v1/docs/what-is-a-transaction-portfolio) to build holdings (positions) in an underlying set of instruments.

> **Note**: Once created, you can only change certain characteristics of a transaction portfolio in restricted circumstances. [More information](/v1/docs/updating-certain-characteristics-of-an-existing-portfolio).

To create a transaction portfolio, you must specify a unique identifier, friendly name and base (or reporting) currency. You can optionally:

- Specify a [creation date](/v1/docs/understanding-the-importance-of-portfolio-creation-date) prior to today (the default). This is important if you intend to load historical activity.
- Register an [instrument scope](/v1/docs/understanding-instrument-scopes) in order to resolve transactions to instruments mastered in that scope, before [falling back](/v1/docs/what-is-a-scope#fallback-behaviour-for-hierarchies-of-scopes) to the `default` instrument scope.
- Register a [transaction type scope](/v1/docs/grouping-related-transaction-types-using-scopes-and-sources) in order to resolve transactions to transaction types domiciled in that scope. Note LUSID does not fall back to searching the `default` transaction type scope. Only if omitted does LUSID search the `default` scope.
- Register one or more [sub-holding keys](/v1/docs/how-do-i-register-sub-holding-keys-shks-with-a-portfolio) (SHKs) in order to split holdings into categories. By default, LUSID generates one holding per instrument per settlement currency.
- Register a [portfolio recipe](/v1/docs/setting-a-portfolio-recipe). Note this is required in certain circumstances, such as to enable instrument events.
- Register a [transaction template scope](/v1/docs/how-do-i-create-a-custom-transaction-template) in order to configure the process of handling instrument events, before falling back to the `default` transaction template scope.
- Subscribe to a [corporate action source](/v1/docs/corporate-actions) containing corporate actions impacting underlying instruments held in the portfolio.
- Change the default `AverageCost` accounting method to one of the [supported tax lot accounting methods](/v1/docs/what-are-the-supported-tax-lot-accounting-methods-in-lusid).
- Register a [tax ruleset scope](/v1/docs/tax-calculations) to enable LUSID to calculate tax amounts for matching calculations.
- If the portfolio contains bond holdings, change the default `NoAmortisation` method to one of the [supported amortisation methods](/v1/docs/how-does-lusid-calculate-amortisation-and-accretion).
- Add [custom properties](/v1/docs/properties) to store additional information about the portfolio not recorded by the standard set of data fields. These properties must be from the `Portfolio` domain.

To examine the complete set of data fields for a transaction portfolio, examine the [API documentation](https://www.lusid.com/docs/api#operation/CreatePortfolio). Note that to subsequently interact you can use the APIs in the `Portfolios` collection as well as the `Transaction Portfolios` collection.

## Using the LUSID REST API

Call the [CreatePortfolio](https://www.lusid.com/docs/api/lusid/endpoints/transaction-portfolios/CreatePortfolio/) API, nominating a scope in the URL and specifying in the request body:

- A `displayName`.
- A `code` unique within the scope.
- A `baseCurrency` to which foreign currency transactions can be normalised upon provision of a trade to portfolio rate. This must be an ISO 4217 currency code, for example `GBP` or `JPY`.
- Optionally, any of the objects explained above.

For example, to create a GBP-denominated portfolio with a code of `Income` and a creation date at the start of 2023 in `myportfolioscope` (specified in the URL; this is created if it does not exist):

```json
curl -X POST 'https://<your-domain>.lusid.com/api/api/transactionportfolios/myportfolioscope'
-H 'Authorization: Bearer <your-API-access-token>'
-H 'Content-Type: application/json-patch+json'
-d '{
  "displayName": "Portfolio UK",
  "description": "Portfolio for UK market",
  "code": "my-portfolio-code",
  "created": "2023-01-01T00:00:00.0000000+00:00",
  "baseCurrency": "GBP",
  "corporateActionSourceId": {
    "scope": "my-cas-scope",
    "code": "my-cas-code"
  },
  "accountingMethod": "FirstInFirstOut",
  "subHoldingKeys": ["Transaction/Strategy/Signal"],
  "properties": {
    "Portfolio/Manager/Name": {
      "key": "Portfolio/Manager/Name",
      "value": {
        "labelValue": "Matt Smith"
      }
    }
  },
  "instrumentScopes": ["my-instr-scope"],
  "amortisationMethod": "StraightLine",
  "transactionTypeScope": "my-type-scope",
  "instrumentEventConfiguration": {
    "transactionTemplateScopes": ["my-template-scope"],
    "recipeId": {
      "scope": "my-recipe-scope",
      "code": "my-recipe-code"
    }
  },
  "taxRuleSetScope": "my-taxruleset-scope"
}'
```

Note the response does not contain all the fields, so call the [GetDetails](https://www.lusid.com/docs/api#operation/GetDetails) API to confirm the transaction portfolio has been created as specified, for example:

```json
{
  "originPortfolioId": {
    "scope": "myportfolioscope",
    "code": "my-portfolio-code"
  },
  "baseCurrency": "GBP",
  "corporateActionSourceId": {
    "scope": "my-cas-scope",
    "code": "my-cas-code"
  },
  "subHoldingKeys": [
    "Transaction/Strategy/Signal"
  ],
  "instrumentScopes": [
    "my-instr-scope"
  ],
  "accountingMethod": "FirstInFirstOut",
  "amortisationMethod": "StraightLine",
  "transactionTypeScope": "my-type-scope",
  "cashGainLossCalculationDate": "Default",
  "instrumentEventConfiguration": {
    "transactionTemplateScopes": [
      "my-template-scope"
    ],
    "recipeId": {
      "scope": "my-recipe-scope",
      "code": "my-recipe-code"
    }
  },
  "taxRuleSetScope": "my-taxruleset-scope"
  ...
}
```

## Using Luminesce

You can use the [Lusid.Portfolio.Writer](/v1/docs/lusidportfoliowriter) provider.

## Using the LUSID web app

1. Sign in to the [LUSID web app](https://www.lusid.com/app) using the credentials of a LUSID administrator.
2. From the top left menu, select **Data Management > Portfolios**.
3. Click the **Create Portfolio** button (top right).
4. On the **Basic data** screen of the **Create Portfolio** dialog, choose `Transaction` from the **Type** dropdown menu, and specify a **Scope**, **Code** and **Effective date**: ![](https://cdn.document360.io/d575ad81-c0ed-4980-bbd1-d59ac5c3de82/Images/Documentation/48b83b22-b187-42de-9236-aaf8623e4598.png)
5. On the **Details** screen, specify a **Base currency** using an ISO 4217 currency code, for example `GBP` or `JPY`.
6. Complete the other optional fields if desired and click the **Create** button.
