# Introduction

Welcome to Sesame Data! Sesame Data allows our clients to access their transactions and holdings data from multiple custodians in a standardised output format. With over 400 connections to custodians across the world, Sesame Data ensures that our clients do not have to build and maintain their own integrations with their custodians (or the custodians of their clients). Sesame Data supports custodial connections to banks, brokerages, investment managers, portfolio management systems and online trading platforms.&#x20;

The custodians provide daily holding and transaction data directly to Sesame via feeds. Once received, Sesame Data standardizes the data from each file, allowing our clients a standard representation of transactions and holdings across all their custodians.&#x20;

These Docs will guide you through how to use Sesame Data. If you still have any queries, please consult the [`FAQ`](/faq-and-troubleshooting) section.

<figure><img src="https://www.landytech.com/hubfs/sesame-data_1200x500-04-process-large_v12.png" alt="" width="563"><figcaption></figcaption></figure>

Custodial use-cases include clients who require access to standardised transaction and holding information from their custodians, standardised through Sesame. This is helpful for bookkeeping and accounting, as well as downstream analytics which are reliant on custodial information. Our clients include Trust companies and Fintechs.

Through the API, users can fetch Custodial data per `Entity`. An `Entity` contains the transactions and holdings of an account holder (a person, company, or trust which has an account with a custodian). Entities contain data from only one custodian. Thus, one person, company or trust will have their holdings in several entities from several custodians.&#x20;

## Getting Started

The best way to get started is using the [Developer Portal](https://app.landytech.net/sesame-data) in Sesame. This requires a Sesame account, if you don't have one, you can book a [request for a demo account](https://www.landytech.com/request-a-demo).

All Sesame Data requests are made to the Sesame Production environment. Sesame Data only supports GET requests, making it safe to use the Production environment for any testing.&#x20;

Follow these steps to access your data:

1. The first step is to [Create and manage your API token](/authentication/create-and-manage-your-api-token)
2. Next, learn [How to Authenticate](/authentication/how-to-authenticate) and use the token to get access to your data
3. Then explore our [API Endpoints](/api-endpoints). We recommend starting with [Entity List](/api-endpoints/entity-list) endpoint. This endpoint contains all entities (Legal entities, Portfolios, Groupings) that are available in your account.&#x20;
4. You can use the endpoint [Entity Dates](/api-endpoints/entity-dates) to determine the dates for which data has been received from your custodians, and which are available for you to request following successful processing Sesame.
5. After you may want to start with [Transactions](/api-endpoints/transactions) endpoint to see your transactions per entity, and then consult [Holdings](/api-endpoints/holdings) for your positions.&#x20;

You may also find it valuable to explore [Sesame Data Developer Portal](/sesame-data-developer-portal) or our tutorial on [Using Sesame Data with Postman](/tutorials-recipes/using-sesame-data-with-postman).


# Authentication

The Sesame Data uses Basic Authentication, utilizing a combination of a username and API tokens as passwords. Upon token generation, clients will receive their unique password. This password and their client-specific username are required as authentication when making requests.&#x20;

<table data-header-hidden><thead><tr><th width="131"></th><th></th></tr></thead><tbody><tr><td>Username</td><td>A unique code belonging to each client. This will be available in the Developer portal.</td></tr><tr><td>Password</td><td>The token which allows you to make requests. This is generated in the Developer portal.</td></tr></tbody></table>

In this section of the documentation, you will find information about how to create and manage your tokens and how to use your token to authenticate.&#x20;

Additionally, the API provides support for IP whitelisting, enhancing data security by restricting authentication to a predefined list of IPs. This feature ensures that only authorized IPs can authenticate by presenting a valid token.

You may also find it valuable to explore our tutorial on [Using Sesame Data with Postman](/tutorials-recipes/using-sesame-data-with-postman).

<table data-view="cards"><thead><tr><th></th><th></th><th></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td>Tokens are your key to access your data similar to a password.</td><td></td><td></td><td><a href="/files/2HC6zTLqMqRaDwOY1tK4">/files/2HC6zTLqMqRaDwOY1tK4</a></td><td><a href="/pages/xATEiqyRXeYaCRdF2mnZ">/pages/xATEiqyRXeYaCRdF2mnZ</a></td></tr><tr><td>Use generated tokens to access to authenticate and have access to your data.</td><td></td><td></td><td><a href="/files/7mXuLPB4baiTV5gWAph8">/files/7mXuLPB4baiTV5gWAph8</a></td><td><a href="/pages/kPhDK44iAqBT74AbXl7u">/pages/kPhDK44iAqBT74AbXl7u</a></td></tr><tr><td>Increase the security by optionally enabling protection by IPs.</td><td></td><td></td><td><a href="/files/wzr3z6WyBAxiWKWrayPh">/files/wzr3z6WyBAxiWKWrayPh</a></td><td><a href="/pages/17aLtG70o1MdFveb0O2i">/pages/17aLtG70o1MdFveb0O2i</a></td></tr></tbody></table>


# Create and manage your API token

Application access tokens are created and managed in the Sesame Application. Due to the sensitivity of the information available from Sesame Data, access to token generation is closely controlled. Within your Sesame Application, only users who are Account Administrators will be able to create and manage tokens. As this is an application token, however, any user with the token can make requests.&#x20;

{% hint style="info" %}
Note that if you are not an Account Administrator, you can ask someone in your company to create a token and send you the Username and Password of the token.
{% endhint %}

## How to create an API Token

Once logged in to Sesame, the user can readily generate a token using the `Add Token` option in the Dashboard or API Tokens menu. &#x20;

<figure><img src="/files/TT5JGuB03TxuW3Lwo1cY" alt=""><figcaption><p>How to create an API Token</p></figcaption></figure>

The user is required to name the token and provide an expiration date - either using pre-populated options or by prescribing a specific date. The field `Description` can be used to add more information about where the token is used.

> Please note that we recommend avoiding the use of tokens that exceed a 3-month duration. However, if maintaining shorter durations proves challenging, it is acceptable to extend the token's lifespan.

Sesame will automatically email the token creator when the token is two days away from expiration.&#x20;

Optionally, you can utilise the [IP Whitelisting](/authentication/ip-whitelisting) for added security measures.

## How to manage existing tokens

Users can also manage existing tokens using the `Update` option. Here the user can later manage the name, description and whitelisted IPs. Users can also retrieve the token password and username if required. &#x20;

<figure><img src="/files/aixt2Xq1mgoSnADZbkwW" alt=""><figcaption><p>How to update a token</p></figcaption></figure>

## How to revoke tokens

Users can also revoke tokens that they no longer require. Revoked tokens stop working immediately once revoked.

<figure><img src="/files/6mMng9PKJ7zaztkUPj6s" alt=""><figcaption><p>How to revoke a token</p></figcaption></figure>

After a token expires or is revoked, it becomes available for monitoring in the `Expired & Revoked` section.

## Dealing with unrecognised tokens

When creating a new token, Sesame automatically sends an email to the administrators of the account informing them that a new token has been issued.

In the case you do not recognise that action, [Revoke](#how-to-revoke-tokens) the token immediately.&#x20;


# How to Authenticate

After generating an [API Token](/authentication/create-and-manage-your-api-token#how-to-create-an-api-token), the system displays the associated Username and password for authentication, which is based on the Basic authentication method.

To retrieve the token value, navigate to `Sesame Data > API Tokens > [edit]`.

<figure><img src="/files/iy6eFg38iqxM4XfjMv0Q" alt=""><figcaption><p>How to retrieve your Username and Password</p></figcaption></figure>

In your preferred tool, select the Authorization type as `Basic Auth`. Your tool will prompt you to enter the Username and Password. Please input the credentials as provided in the API Tokens tool.

The simplest call that you can make is [Entity List](/api-endpoints/entity-list), which contains all Legal entities, Portfolios and Groupings of your account. This endpoint does not include any additional request parameter.

Therefore the Authentication and a request to our APIs would require:

* Verb `GET`
* URL: [https://data.api.landytech.net/api/v1/entitylist](https://data.api.landytech.net/api/v1/entityList) [Entity List](/api-endpoints/entity-list)
* Authorization type: `Basic Auth`
  * Username: from `API Tokens`
  * Password: from `API Tokens`

You may also find it valuable to explore our tutorial on [Using Sesame Data with Postman](/tutorials-recipes/using-sesame-data-with-postman).

Users also can troubleshoot the results by [Viewing Logs](/faq-and-troubleshooting/viewing-logs).


# IP Whitelisting

IP Whitelisting is an added security measure, which allows clients to specify which IPs they want to permit to make API requests of their data. Should another IP make a request, the request will not be successful.

To whitelist an IP, simply select `Update` on your active token and then either add the permissioned IP addresses to the list of valid IPs. You can add your current IP using the `Add my IP` option. Users are not limited to how many IPs they can whitelist. Alternatively, IPs can be added when the token is first created.<br>

<figure><img src="/files/NqzeLIe3ydYlslWDYGXy" alt=""><figcaption><p>To whitelist an IP, select 'Update'</p></figcaption></figure>

<figure><img src="/files/yqlnWHexdlMrSQmYgTBy" alt=""><figcaption><p>Either add your current IP, or enter an IP manually</p></figcaption></figure>

When finished, select `Save`. \
\
The list of a token's permitted IP addresses can be edited while the token remains active.&#x20;


# API Endpoints

A high-level view of all the Sesame Data API endpoints.

## About the data

At Sesame Data, our data infrastructure includes a dedicated endpoint for entities. This endpoint serves as a repository for information sourced from a single custodian (stored in a Portfolio) or from a combination of Portfolios (stored in a legal entity, such as a Trust or Investment Fund).

When data is transmitted from banks, our rigorous analysis and validation processes ensure the integrity of the information before publication. As a result of this scrutiny, we generate an endpoint called 'Entity Dates', which provides a comprehensive overview of all relevant dates associated with an entity, along with each date's current status.

## Endpoints

* [Entity List](/api-endpoints/entity-list):  returns all the entities which are available in the account
* [Entity Dates](/api-endpoints/entity-dates): returns the dates which are available from Sesame per entity
* [Transactions](/api-endpoints/transactions): returns the transactions which have occurred for a specific entity.
* [Holdings](/api-endpoints/holdings): contains the holdings (or positions) of your entities.
* [Sub Portfolio Holdings](/api-endpoints/sub-portfolio-holdings): provides a level more granularity than the entity-level holdings of cash.


# Entity List

The `entitylist` endpoint returns all the entities which are available in the account. This allows users to retrieve the full scope of entities which can then be used in other requests. This endpoint does not require the `entityId` parameter to be present in the request. &#x20;

For the full list of parameters accepted as well as which are required, see `Parameters` below. To view Sample response data, expand the menu under `Responses` and refer to the `Example` tab. To see the format of the response fields, as well as which are mandatory (that is, always returned in the response), select the tab `Schema`, and then expand `object` followed by `content` and finally `object` once more. &#x20;

## Request and Response

{% hint style="info" %}
You might find it helpful to access our [Sesame Data Developer Portal](/sesame-data-developer-portal)
{% endhint %}

{% openapi src="/files/Op9p4eG621woDfclloBE" path="/api/v1/entitylist" method="get" %}
[openapi\_114\_06Jun25.yaml](https://686422464-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FRqYhxcZf6UoirhKFZnW4%2Fuploads%2Fl8kOz8iaZGcmfcJzGmQz%2Fopenapi_114_06Jun25.yaml?alt=media\&token=d7c18101-35d7-4f9d-b950-e2a3b428bd2a)
{% endopenapi %}


# Entity Dates

The `entitydates` endpoint returns the dates which are available from Sesame per entity. The results will indicate which dates are `published`, when it was published and its `pipelineStatus`. Requests are made using the `entityId` parameter, which is mandatory.

For the full list of parameters accepted as well as which are required, see `Parameters` below. To view Sample response data, expand the menu under `Responses` and refer to the `Example` tab. To see the format of the response fields, as well as which are mandatory (that is, always returned in the response), select the tab `Schema`, and then expand `object` followed by `content` and finally `object` once more.&#x20;

## Request and Response

{% hint style="info" %}
You might find it helpful to access our [Sesame Data Developer Portal](/sesame-data-developer-portal)
{% endhint %}

{% openapi src="/files/Op9p4eG621woDfclloBE" path="/api/v1/entitydates/{entityId}" method="get" expanded="true" %}
[openapi\_114\_06Jun25.yaml](https://686422464-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FRqYhxcZf6UoirhKFZnW4%2Fuploads%2Fl8kOz8iaZGcmfcJzGmQz%2Fopenapi_114_06Jun25.yaml?alt=media\&token=d7c18101-35d7-4f9d-b950-e2a3b428bd2a)
{% endopenapi %}


# Transactions

The `transactions` endpoint returns the transactions which have occurred for a specific entity. For each `valueDate` where transactions are received from a custodian, data will be available in the transactions endpoint once standardised through data processing layer. Requests are made using the `entityId` parameter, which is mandatory.&#x20;

For the full list of parameters accepted as well as which are required, see `Parameters` below. To view Sample response data, expand the menu under `Responses` and refer to the `Example` tab. To see the format of the response fields, as well as which are mandatory (that is, always returned in the response), select the tab `Schema`, and then expand `object` followed by `content` and finally `object` once more.&#x20;

## Request and Response

{% hint style="info" %}
You might find it helpful to access our [Sesame Data Developer Portal](/sesame-data-developer-portal)
{% endhint %}

The format of all Sesame Custodial Data APIs is the same. The user is required to provide their account UUID and token in the authorisation, and then make a `GET` request to the `transactions` endpoint, specifying the entityId of the entity being requested.

{% openapi src="/files/Op9p4eG621woDfclloBE" path="/api/v1/transactions/{entityId}" method="get" expanded="true" fullWidth="false" %}
[openapi\_114\_06Jun25.yaml](https://686422464-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FRqYhxcZf6UoirhKFZnW4%2Fuploads%2Fl8kOz8iaZGcmfcJzGmQz%2Fopenapi_114_06Jun25.yaml?alt=media\&token=d7c18101-35d7-4f9d-b950-e2a3b428bd2a)
{% endopenapi %}

## Investment Hub and Doc AI

While Sesame Data Custodial generally involves data from custodied feeds being requested over API, Sesame also supports loading of transactions pertaining to private assets in general, and private funds in particular. The Investment Hub allows users to manage all their non-custodied transactions and positions. Doc AI allows you to quickly and accurately extract data from private equity and private credit notices (like capital statements, call and distribution notices), making maintaining your privates in Sesame easy. \
\
These transactions and positions are also available in the Sesame Data API.&#x20;

## Supported Transaction Subtypes

| <ul><li>Admin Fees</li><li>Borrowing</li><li>Brokerage Fees</li><li>Capital Call</li><li>Commitment</li><li>Commitment Reduction</li><li>Coupon</li><li>Custodian Fees</li><li>Deposits</li><li>Derivative Cash Settlement</li><li>Derivative Premium</li><li>Distribution</li><li>Dividend</li><li>Dividend in Kind</li><li>Equalisation</li><li>Interest</li><li>Internal FX Transaction</li><li>Management Fees</li><li>Other Costs</li><li>Other Fees</li><li>Principal Repayment</li><li>Purchase</li><li>Redemption</li><li>Reverse Stock Split</li><li>Rights Issue</li><li>Rights Issue Exercise</li><li>Sales</li><li>Security Transfer In</li><li>Security Transfer Out</li><li>Spin Off</li><li>Stock Split</li><li>Subscription</li><li>Taxes</li><li>Withdrawals </li></ul> |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |


# Holdings

The `holdings` endpoint contains the holdings (or positions) of your entities. For each date where holdings are received from a custodian, data will be available in the holdings endpoint once standardised through the data processing layer. Requests are made using the `entityId` parameter, which is mandatory.&#x20;

For the full list of parameters accepted as well as which are required, see `Parameters` below. To view Sample response data, expand the menu under `Responses` and refer to the `Example` tab. To see the format of the response fields, as well as which are mandatory (that is, always returned in the response), select the tab `Schema`, and then expand `object` followed by `content` and finally `object` once more.&#x20;

## Request and Response

{% hint style="info" %}
You might find it helpful to access our [Sesame Data Developer Portal](/sesame-data-developer-portal)
{% endhint %}

The format of all Sesame Custodial Data APIs is the same. The user is required to provide their account UUID and token in the authorisation, and then make a `GET` request to the `holdings` endpoint, specifying the entityId of the entity being requested.\
\
In the response, the results of shown per holding, which is an asset held on a date. All results within that JSON level (for example, quantity, unit price) pertain to that holding.

{% openapi src="/files/Op9p4eG621woDfclloBE" path="/api/v1/holdings/{entityId}" method="get" expanded="true" %}
[openapi\_114\_06Jun25.yaml](https://686422464-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FRqYhxcZf6UoirhKFZnW4%2Fuploads%2Fl8kOz8iaZGcmfcJzGmQz%2Fopenapi_114_06Jun25.yaml?alt=media\&token=d7c18101-35d7-4f9d-b950-e2a3b428bd2a)
{% endopenapi %}


# Sub Portfolio Holdings

The `subportfolioholdings` endpoint returns cash holdings split by sub-portfolio code. The sub-portfolio code provides a level more granularity than the entity-level balances. That is, a sub-portfolio code reflects the cash balances separated by the specific sub-account codes. These codes will differ per currency, and per intention. For example, `capital` versus `income` accounts. Requests are made using the `entityId` parameter, which is mandatory.&#x20;

For the full list of parameters accepted as well as which are required, see `Parameters` below. To view Sample response data, expand the menu under `Responses` and refer to the `Example` tab. To see the format of the response fields, as well as which are mandatory (that is, always returned in the response), select the tab `Schema`, and then expand `object` followed by `content` and finally `object` once more.&#x20;

## Request and Response

{% hint style="info" %}
You might find it helpful to access our [Sesame Data Developer Portal](/sesame-data-developer-portal)
{% endhint %}

The format of all Sesame Custodial Data APIs is the same. The user is required to provide their account UUID and token in the authorisation, and then make a `GET` request to the `subportfolioholdings` endpoint, specifying the entityId of the entity being requested.

{% openapi src="/files/Op9p4eG621woDfclloBE" path="/api/v1/subPortfolioHoldings/{entityId}" method="get" expanded="true" %}
[openapi\_114\_06Jun25.yaml](https://686422464-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FRqYhxcZf6UoirhKFZnW4%2Fuploads%2Fl8kOz8iaZGcmfcJzGmQz%2Fopenapi_114_06Jun25.yaml?alt=media\&token=d7c18101-35d7-4f9d-b950-e2a3b428bd2a)
{% endopenapi %}


# Entity Risk

{% hint style="info" %}
Only available for Sesame Enterprise clients
{% endhint %}

{% hint style="warning" %}
Please note, the endpoint for retrieving Entity Risk is called /entityinfo, as detailed below.
{% endhint %}

The `entityinfo` endpoint returns various risk metrics which are provided for the entity, rather than its constituents. The request can be made for specific dates, or for all dates for which there is data (ie no date filters). Requests are made using the `entityId` parameter, which is mandatory.&#x20;

For the full list of parameters accepted as well as which are required, see `Parameters` below. To view Sample response data, expand the menu under `Responses` and refer to the `Example` tab. To see the format of the response fields, as well as which are mandatory (that is, always returned in the response), select the tab `Schema`, and then expand `object` followed by `content` and finally `object` once more.&#x20;

## Request and Response

{% hint style="info" %}
You might find it helpful to access our [Sesame Data Developer Portal](/sesame-data-developer-portal)
{% endhint %}

The format of all Sesame Custodial Data APIs is the same. The user is required to provide their account UUID and token in the authorisation, and then make a `GET` request to the `entityinfo` endpoint, specifying the entityId of the entity being requested.

{% openapi src="/files/Op9p4eG621woDfclloBE" path="/api/v1/entityinfo/{entityId}" method="get" expanded="true" %}
[openapi\_114\_06Jun25.yaml](https://686422464-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FRqYhxcZf6UoirhKFZnW4%2Fuploads%2Fl8kOz8iaZGcmfcJzGmQz%2Fopenapi_114_06Jun25.yaml?alt=media\&token=d7c18101-35d7-4f9d-b950-e2a3b428bd2a)
{% endopenapi %}


# Asset Risk

{% hint style="info" %}
Only available for Sesame Enterprise clients
{% endhint %}

The `assetrisk` endpoint returns various risk metrics which are provided for the constituent assets of the entity. The request is made per entity. This endpoint does not support the `lookThrough` parameter, as risk is calculated on either a look-through or non-look-through basis, rather than both. The request can be made for specific dates, or for all dates for which there is data (ie no date filters). Requests are made using the `entityId` parameter, which is mandatory.&#x20;

For the full list of parameters accepted as well as which are required, see `Parameters` below. To view Sample response data, expand the menu under `Responses` and refer to the `Example` tab. To see the format of the response fields, as well as which are mandatory (that is, always returned in the response), select the tab `Schema`, and then expand `object` followed by `content` and finally `object` once more.&#x20;

## Request and Response

{% hint style="info" %}
You might find it helpful to access our [Sesame Data Developer Portal](/sesame-data-developer-portal)
{% endhint %}

The format of all Sesame Custodial Data APIs is the same. The user is required to provide their account UUID and token in the authorisation, and then make a `GET` request to the `assetrisk` endpoint, specifying the entityId of the entity being requested.

{% openapi src="/files/Op9p4eG621woDfclloBE" path="/api/v1/assetrisk/{entityId}" method="get" expanded="true" %}
[openapi\_114\_06Jun25.yaml](https://686422464-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FRqYhxcZf6UoirhKFZnW4%2Fuploads%2Fl8kOz8iaZGcmfcJzGmQz%2Fopenapi_114_06Jun25.yaml?alt=media\&token=d7c18101-35d7-4f9d-b950-e2a3b428bd2a)
{% endopenapi %}


# Entity Performance

{% hint style="info" %}
Only available for Sesame Enterprise clients
{% endhint %}

The `entityperformance` endpoint returns performance metrics per date for the entity requested. Some metrics are returns, provided in decimals, while others are in the entity's reporting currency. The request can be made for specific dates, or for all dates for which there is data (ie no date filters). Requests are made using the `entityId` parameter, which is mandatory.&#x20;

For the full list of parameters accepted as well as which are required, see `Parameters` below. To view Sample response data, expand the menu under `Responses` and refer to the `Example` tab. To see the format of the response fields, as well as which are mandatory (that is, always returned in the response), select the tab `Schema`, and then expand `object` followed by `content` and finally `object` once more.&#x20;

## Request and Response

{% hint style="info" %}
You might find it helpful to access our [Sesame Data Developer Portal](/sesame-data-developer-portal)
{% endhint %}

The format of all Sesame Custodial Data APIs is the same. The user is required to provide their account UUID and token in the authorisation, and then make a `GET` request to the `entityperformance` endpoint, specifying the entityId of the entity being requested.

{% openapi src="/files/Op9p4eG621woDfclloBE" path="/api/v1/entityperformance/{entityId}" method="get" expanded="true" %}
[openapi\_114\_06Jun25.yaml](https://686422464-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FRqYhxcZf6UoirhKFZnW4%2Fuploads%2Fl8kOz8iaZGcmfcJzGmQz%2Fopenapi_114_06Jun25.yaml?alt=media\&token=d7c18101-35d7-4f9d-b950-e2a3b428bd2a)
{% endopenapi %}


# Sesame Data Developer Portal

To enhance the user onboarding process, we have a comprehensive Developer Portal. Within this portal, users gain access to a multifunctional dashboard that provides charts of API usage.&#x20;

<figure><img src="/files/gvOV4OMmXkNdOmKdBvIk" alt=""><figcaption></figcaption></figure>

It is possible to preview the `Entity List` in the Portal. This enables users to navigate through a comprehensive list of entities, whether the data is sourced from a custodian (in the case of portfolios) or represent legal entities like investment funds (in the case of legal entities). Furthermore, users have the convenience of exporting this entity data to CSV format for further analysis or integration with external systems.

<figure><img src="/files/kNAIj4MyS7hdsOwOVSy4" alt=""><figcaption></figcaption></figure>

The `API Endpoints` page contains several child-pages, one per endpoint that your account has access to. In the `Get started` page you will find helpful links to this Documentation Center.

<figure><img src="/files/jn6KLVkMR8VRUqqeloEK" alt=""><figcaption></figcaption></figure>

Our `Try it` feature allows users to engage with the API in real time, facilitating experimentation and exploration of its capabilities. Through this interactive functionality, users can make test requests (also available as cURLs) and observe API responses, gaining a deeper understanding of how the API functions and its potential applications.

<figure><img src="/files/436iPjpn2lBS7JBH28Y6" alt=""><figcaption></figcaption></figure>

Users also have access to `Logs`. These are either per endpoint (as found in the `API Endpoints` page) or across all endpoints (as found in the `Logs` page). The logs provide valuable insights into system activities, errors, and events, empowering users to troubleshoot issues effectively and monitor system performance proactively. [Viewing Logs](/faq-and-troubleshooting/viewing-logs)

<figure><img src="/files/c1VLKuhn9aw3X5EgT8Mn" alt=""><figcaption></figcaption></figure>

The `Documents` page is a useful page for loading and accessing documents related to any of your account's entities or custodial data, such as bank communications or statements showing bank account details.

<figure><img src="/files/4GpW2YVMwjI8JeqJn1qi" alt=""><figcaption></figcaption></figure>


# Data Feeds

Sesame currently has integrations with over 400 custodians, and we continue to add new feeds every month. We consider a custodian to be a bank, prime broker, wealth manager, portfolio management system, trading platform or other stakeholder which maintains a record of position and transaction data on behalf of our mutual clients.&#x20;

We are able to support connection to new custodians, provided they support SFTP push/pull, EBICS or API-based data transfers.&#x20;

If you would like to check Sesame Data's coverage of your custodians, please contact <sales@landytech.com> or [request a demo](https://www.landytech.com/request-a-demo).&#x20;


# Tutorials/Recipes

This page contains useful guides to performing common use-cases with Sesame Data APIs.


# How to use pagination

Many of the endpoints are paged. This means that sequential requests are required, each one specifying a different page number, to retrieve all the available data. Pagination ensures that the volume of the data returned in the response does not overwhelm the Sesame Data servers, or your own servers.&#x20;

{% hint style="info" %}
**Sending a request without pagination will cause partial data to be retrieved.**&#x20;
{% endhint %}

Sesame Data pagination endpoints are Zero index-based, which means the first page is `0` and the second page is `1`.&#x20;

While doing an integration, users will need to use the below metadata fields to ensure that all elements in the response are retrieved:

* `totalElements`: The total number of items in the response
* `size`: The number of records per page of the response

Alternatively, it's possible to wrap the calls inside a `While loop`  that keep requesting pages until the parameter `last` is equals to `true`.

```
{
   "content": [ /*DATA HERE*/ ]
   "totalPages": 3,
   "totalElements": 270,
   "last": false,
   "size": 100,
   "first": true,
   "number": 0,
   "numberOfElements": 100,
   "empty": false
}
```


# Using Sesame Data with Postman

## Using Postman and the Sesame Data API EndPoints

1. Open Postman
2. Create a new request
3. Use verb = `GET`
4. Select Auth
5. Insert Username, more info [Create and manage your API token](/authentication/create-and-manage-your-api-token)
6. Insert Password
7. Insert the URL (of any [API Endpoints](/api-endpoints))
8. Hit `Send`

<figure><img src="/files/0Sc5PshAEZ09AWpIYfkE" alt=""><figcaption><p>Generating a Postman request using Username and Password</p></figcaption></figure>

## Importing a CURL into Postman

1. Open Postman
2. In Sesame, API Endpoints, `Try It` section, after populating the required fields, copy the CURL of a request you would like to make in Postman&#x20;
3. In Postman, select `Import` and then paste the CURL
4. Hit `Send`

<figure><img src="/files/FSBJ8Ctzyweu0SqHn8jZ" alt=""><figcaption><p>Generating a Postman request using CURL</p></figcaption></figure>


# Using Sesame Data with Excel

In this tutorial, the combination of Sesame Data and the power of Excel will be demonstrated. To achieve this it will be used Power Query, the user-friendly technology from Microsoft, will be utilized for data transformation.

## Get Entity List (no code)

1. Open Excel, and navigate: `Data > From Web`<br>

   <figure><img src="/files/MU5vTKnI9W7RkvnCMG8V" alt=""><figcaption></figcaption></figure>
2. Insert the URL of the endpoint.\
   In this example, `https://data.api.landytech.net/api/v1/entitylist`, [confirm here](/api-endpoints/entity-list).<br>

   <figure><img src="/files/Hg5HOAWGxtkCzJ7AJCiK" alt=""><figcaption></figcaption></figure>
3. In the authentication, select "Basic" and inform your username and password ([read more](/authentication/how-to-authenticate)). Use "Connect" at the end to confirm.<br>

   <figure><img src="/files/POM2HWmMMZ5Cugr8FgdD" alt=""><figcaption></figcaption></figure>
4. Upon a successful connection, Excel should show a page similar to the following. \
   Right-click above the column title `List`, and use the option `To Table`.

   <figure><img src="/files/K5fUB0YwPuavV4MnDiU3" alt=""><figcaption></figcaption></figure>
5. Use the following options:\
   **Select or enter delimiter**: None\
   **How to handle extra columns**: Show as errors

   <figure><img src="/files/PC7yQEu0BQA2TAbJlFkS" alt=""><figcaption></figcaption></figure>
6. The output should be a `Column1` with many record lines. Click on the little icon that says `Expand`, see image below, point `1`.  \
   \
   This will show the list of columns that should be pulled, which you may change at your best convenience.\
   \
   Uncheck the option `Use Original column name as prefix`.

   <figure><img src="/files/qYIF77MhfNv3AtxIbl4h" alt=""><figcaption></figcaption></figure>
7. Excel will allow you to review the information, click on `Close & Load`.

   <figure><img src="/files/0g5fDeTvnZYFVHdd0jeE" alt=""><figcaption></figcaption></figure>
8. All set! Your data should be ready.

   <figure><img src="/files/fAnR0NjanHnELU03SHcL" alt=""><figcaption></figcaption></figure>

***

## Get Holdings (using Advanced Editor)

Dealing with pagination slightly increases the complexity of Power Query. There are two ways of doing it. The first requires to adding a few lines of code, nothing too complex:

1. Open Excel, and navigate: `Data > From Web`
2. Use the following URL\
   Please replace `{entityId}` with your [entityId](/api-endpoints/entity-list).

   ```javascript
   https://data.api.landytech.net/api/v1/holdings/{entityId}?pageSize=10
   ```
3. Open the editor: `Right-click on the newly created query > Advanced Editor`

<figure><img src="/files/LEy48C3q1291B57neELM" alt=""><figcaption></figcaption></figure>

4. You can use the following statement. \
   :warning: Note, when pasting the below, replace `14422` with your [entityId](/api-endpoints/entity-list).

   ```javascript
   let
       // Define the base URL
       baseUrl = "https://data.api.landytech.net/api/v1/holdings/14422?pageSize=10",
    
       // Get data from the first page
       data = Json.Document(Web.Contents(baseUrl)),
       totalPages = data[totalPages],

       // Extract data from all pages
       allData =  List.Combine(List.Accumulate(
                       {0..totalPages-1},
                       {},
                       (accumulator, pageNumber) => accumulator & {Json.Document(Web.Contents(baseUrl & "&pageNumber=" &  Number.ToText(pageNumber))) [content]}
                   )),

       // Parse the content into a table and expand it to columns
       table = Table.FromList(allData, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
       expanded = Table.ExpandRecordColumn(table, "Column1", {"entityId", "date", "entityName", "assetName", "assetId", "assetType", "quantity", "localCurrency", "unitPrice", "marketValueLc", "riskCountry"}, {"entityId", "date", "entityName", "assetName", "assetId", "assetType", "quantity", "localCurrency", "unitPrice", "marketValueLc", "riskCountry"})
   in
       // Return the table with all records
       expanded
   ```

5. Confirm and `Close & Load`. Your data should be available!

{% hint style="info" %}
For the '`transactions'` endpoint, use this code:
{% endhint %}

```
let
    // Define the base URL
    baseUrl = "https://data.api.landytech.net/api/v1/transactions/14422?pageSize=100",
 
    // Get data from the first page
    data = Json.Document(Web.Contents(baseUrl)),
    totalPages = data[totalPages],

    // Extract data from all pages
    allData =  List.Combine(List.Accumulate(
                    {0..totalPages-1},
                    {},
                    (accumulator, pageNumber) => accumulator & {Json.Document(Web.Contents(baseUrl & "&pageNumber=" &  Number.ToText(pageNumber))) [content]}
                )),

    // Parse the content into a table and expand it to columns
    table = Table.FromList(allData, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    expanded = Table.ExpandRecordColumn(table, "Column1", {"entityId", "entityName", "assetId", "assetName", "isin","valueDate", "tradeDate", "settlementDate", "transactionSubtype", "description", "quantity", "unitPrice", "localCurrency", "localCurrency2", "amount", "grossMovementLc", "movementRc", "grossMovementRc",  "transactionId", "commissionsLc", "stampDutyLc", "withholdingTaxLc", "collectionChargeLc", "taxLc", "accruedInterestLc", "capitalOrIncome", "subPortfolioCode", "subPortfolioCode2", "reversal"}, {"entityId", "entityName", "assetId", "assetName", "isin","valueDate", "tradeDate", "settlementDate", "transactionSubtype", "description", "quantity", "unitPrice", "localCurrency", "localCurrency2", "amount", "grossMovementLc", "movementRc", "grossMovementRc",  "transactionId", "commissionsLc", "stampDutyLc", "withholdingTaxLc", "collectionChargeLc", "taxLc", "accruedInterestLc", "capitalOrIncome", "subPortfolioCode", "subPortfolioCode2", "reversal"})
in
    // Return the table with all records
    expanded
```

{% hint style="info" %}
For the '`subportfolioholdings'` endpoint, use this code:
{% endhint %}

```
let
    // Define the base URL
    baseUrl = "https://data.api.landytech.net/api/v1/subportfolioholdings/14422?pageSize=100",
 
    // Get data from the first page
    data = Json.Document(Web.Contents(baseUrl)),
    totalPages = data[totalPages],

    // Extract data from all pages
    allData =  List.Combine(List.Accumulate(
                    {0..totalPages-1},
                    {},
                    (accumulator, pageNumber) => accumulator & {Json.Document(Web.Contents(baseUrl & "&pageNumber=" &  Number.ToText(pageNumber))) [content]}
                )),

    // Parse the content into a table and expand it to columns
    table = Table.FromList(allData, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    expanded = Table.ExpandRecordColumn(table, "Column1", {"entityId", "entityName", "date", "localCurrency", "marketValueLc", "subPortfolioCode"}, {"entityId", "entityName", "date", "localCurrency", "marketValueLc", "subPortfolioCode"})
in
    // Return the table with all records
    expanded
```

The second way of using pagination with Power Query is demonstrated in our tutorial of PowerBi.&#x20;


# Using Sesame Data with PowerBi

This guide will show you how to use PowerBi to fetch Holdings data from the Sesame Data API.

1. We will begin by fetching the URL from Sesame. In your Sesame Data Experience, navigate to ‘Endpoints’ and then the endpoint you would like to fetch data from. Here we will be using the `Holdings` endpoint. Select ‘Try it’. Choose the ‘entity’ you will be fetching data for. If you need to filter for Look through results, select ‘Look through’.  Finally, copy the base URL.

<figure><img src="/files/aRfOohCq7mMcLijAUL1N" alt=""><figcaption></figcaption></figure>

2. After opening the PowerBi desktop application, click on ‘Get data’ and then select ‘Web’&#x20;

<figure><img src="/files/ppfys5cOeVFs1oUBwIKb" alt=""><figcaption></figcaption></figure>

3. Paste the Sesame Data URL from (1) and then click ‘OK’

<figure><img src="/files/dqmjGHMevAAP5xIqrYpJ" alt=""><figcaption></figcaption></figure>

4. When the authorization window pops up, select ‘Basic’, type in your Username and Password. You will get these from the ‘API Tokens’ menu in Sesame - [read more about this here](https://docs.landytech.com/authentication/how-to-authenticate). If you see a section allowing you to 'Select which level to apply these settings to', you can leave it as the default (<https://data.api.landytech.net/>).

<figure><img src="/files/G6gPgbRFABnZLHbWRcIn" alt=""><figcaption></figcaption></figure>

Note: If you have already configured an API source from your PowerBi application, these details will be retained by the application. If you want to update them later, you can navigate to ‘File’ > ‘Options and settings’ > ‘Data source settings’.

After adding your username and password, select ‘Save’ or 'Connect'.

5. PowerBi will arrive at a screen similar as below.&#x20;

Before continuing, delete the ‘Applied Steps’ other than ‘Source’:

<figure><img src="/files/cphGooFPOruUuQSBJYbK" alt=""><figcaption></figcaption></figure>

Afterwards, you will see this table, with only 'Source' remaining as an applied step:

<figure><img src="/files/1EGZV4gcHW5sJmqZDIQg" alt=""><figcaption></figcaption></figure>

6. Next, right-click in the cell next to ‘totalPages’ and then select ‘Add as New Query’:

<figure><img src="/files/wo8bDx1HZNJzXJKTm47U" alt=""><figcaption></figcaption></figure>

7. Next, click on ‘Advanced Editor’ at the top:

<figure><img src="/files/Lx91cCQQz112EhPxegkq" alt=""><figcaption></figcaption></figure>

8. Then change the query to produce a list of pages by replacing line 3 by in this text:

&#x20;`totalPages1 = {0..Source[totalPages] -1}`

<figure><img src="/files/thrCiISMgHrKHGFFB6cY" alt=""><figcaption></figcaption></figure>

then click ‘Done’.

9. Right click on ‘List’ and then select  ‘To Table’:

<figure><img src="/files/fHA2LBbYOYlg1IVMcm9F" alt=""><figcaption></figcaption></figure>

Click ‘OK’ on the popup.

10. Select the original table and click on ‘List’. This will open a new table (or *list*):

<figure><img src="/files/ZoGr9YvxB4PlG7VSRIlo" alt=""><figcaption></figcaption></figure>

11. Then right-click on ‘List’ and then select the ‘To Table’ option and click ‘OK’ on the popup:&#x20;

<figure><img src="/files/uqEdKVoEeZ5uiI9jjAbG" alt=""><figcaption></figcaption></figure>

12. Click on Expand Columns icon:

<figure><img src="/files/ju42FLsv4qgeJD8pytVk" alt=""><figcaption></figcaption></figure>

13. Deselect ‘*Use original column value as pre-fix*’, and click ‘Load more’

<figure><img src="/files/vKh5irjchH1SGgJv0Eag" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/eVbFG2lqLoPBYDR0DfmI" alt=""><figcaption></figcaption></figure>

Select OK

14. Next, click on ‘Advanced Editor’ (in the ‘Home’ tab)&#x20;

<figure><img src="/files/GRZ5Ck1ikdzLY0cPQQ6Z" alt=""><figcaption></figcaption></figure>

15. Add the following code as the first line:\
    `(page as text) =>`

And, in the ‘Source’ line, after the entityId, remove the closing quote, and replace it with:

`?pageNumber="&page`

<figure><img src="/files/IQc19X3Y9BvRSnlky0Yl" alt=""><figcaption></figcaption></figure>

The click ‘Done’

16. To ease readability, rename the function to getPages

Do this by right-clicking, ‘Rename’ on the item itself

<figure><img src="/files/beW70l0a1wv2kLAOmqSe" alt=""><figcaption></figcaption></figure>

17. Navigate back to your table in the left hand navigation, then on ‘ABC/123’ icon, select ‘Text’ to change the column type to Text:

<figure><img src="/files/GfSiNOFb6u0JjneWIe3R" alt=""><figcaption></figcaption></figure>

18. In the ‘Add Column’ tab, select ‘Invoke Custom Function’:

<figure><img src="/files/1GXD2V0D79UkXXHoCXkA" alt=""><figcaption></figcaption></figure>

&#x20;

19. Select the function (‘getPages’) you created previously.

If not already selected, under ‘Page’, select ‘Column Name’. Then select Column1 from the right hand menu.&#x20;

<figure><img src="/files/6fuyZGWorghlb5HpEJoH" alt=""><figcaption></figcaption></figure>

Finally, click ‘OK’

PowerBi will now begin fetching your data from Sesame. If there are many records, and therefore many pages, this will take a bit of time.

20. When the data fetching is complete, click ‘Expand Columns’:

<figure><img src="/files/oWuC1uiC3qgO2WkEUBt6" alt=""><figcaption></figcaption></figure>

21. Select ‘Load more’ before selecting ‘OK’

&#x20;

<figure><img src="/files/i1qzFZAgnr7aZ3NJ8Oee" alt=""><figcaption></figcaption></figure>

22. Now, you can rename any columns that are being imported, or remove any if required. You will observe that each column appears twice. Please ensure that you rename or remove both values if choosing to do so.

<figure><img src="/files/Ndrof4crQ2BduK2Xg66s" alt=""><figcaption></figcaption></figure>

As ‘accountCode’ is a legacy field, and so we can remove it if desired, as seen below.

<figure><img src="/files/nQQJMViiQmRIIoyiirHB" alt=""><figcaption></figcaption></figure>

23. Finally, click Close & Apply:

<figure><img src="/files/RKeCJLkyLdKWKTyifAYB" alt=""><figcaption></figcaption></figure>

After a few seconds, you will observe the below as PowerBi imports your data from Sesame Data.

<figure><img src="/files/FqX9QuzoueQbfUgrIBZs" alt=""><figcaption></figcaption></figure>

Once loading is complete, you will see this screen, with your table and columns as below:

<figure><img src="/files/MNoHZHiGdpb9FQP8Tc1G" alt=""><figcaption></figcaption></figure>


# FAQ and Troubleshooting

## Frequently Asked Questions

<details>

<summary>How are NULL fields handled in the response?</summary>

NULL results which are part of a response element are not returned. Certain fields are mandatory, you can see which in the [API Endpoints](/api-endpoints) page.

</details>

<details>

<summary>How do I link my each Sesame Data entityId to my specific bank account?</summary>

We recommend giving the entity a name which communicates its distinct bank account code. The [Entity List](/api-endpoints/entity-list)  endpoint also provides the custodian name and entity reporting currency which may be useful. We recommend that Sesame Data clients maintain a mapping table of entityId to bank account number.&#x20;

</details>

<details>

<summary>ISIN is available in transactions and holdings endpoints. How should I know which asset is in the response if the custodian sends a CUSIP, SEDOL or Valoren?</summary>

We recommend clients maintain a mapping table of `assetId` to the asset security (ie asset) object on their relevant software. This will require updating when a new asset is transacted or hel

</details>

<details>

<summary>What if I have an error message that I cannot resolve?</summary>

Raise a Sesame support ticket by emailing <support@landytech.com>. Please provide details of the request made.

</details>

<details>

<summary>What if I have a query about the data returned in the response, or the data does not reflect what is in my bank statement?</summary>

Raise a Sesame support ticket by emailing <support@landytech.com>. Please provide details of the request made and the discrepancy.&#x20;

</details>

<details>

<summary>Do you separate different asset types between endpoints?</summary>

No. For example, all positions (regardless of the underlying asset type) are found in the `holdings` endpoint. Similarly, all transactions (regardless of the underlying asset type) are all found in the `transactions` endpoint.

</details>

<details>

<summary>How are cash transactions and positions treated? </summary>

Like any other asset or liability, different currencies have their own assetIds. In the subportfolioholdings endpoint, you can rely on the localCurrency field to inform which currency the balance is in.

</details>

<details>

<summary>Can I make changes to the transaction subtype, amount, etc in the API data? </summary>

Changes to the output data is not supported as all data must respect our data integrity protocols. If you have a concern you would like to discuss, please raise a Sesame support ticket by emailing <support@landytech.com>.

</details>

<details>

<summary>How does Sub Portfolio Holdings differ from Holdings?</summary>

For a given date, Sub Portfolio Holdings provides multiple cash balances of per currency per entity, where these have been received from the custodian. In holdings, these are aggregated in a single balance. The field subPortfolioCode must be distinct between different balances for this to be relevant for a custodian. This field can also be referred to as broker code or broke account code, and is unique to each sub classification of cash (classification is usually based on intention).

</details>

<details>

<summary>How do you handle transactions which are reversals of previous transactions?</summary>

In the transaction endpoint, the `reversal` field will indicate if a transaction is a reversal. Where true, the directions of fields like amount and movementRc will be opposite to those from the original transaction. Where possible, the description will help link the reversal and original transactions.&#x20;

</details>


# Viewing Logs

The Sesame Data `Logs` feature provides developers with a comprehensive toolset for investigating system activities and events. Through this functionality, users can access detailed records of actions, errors, and system activities, aiding in troubleshooting, performance optimization, and security analysis.

Key components of the Logs feature include:

1. **Event Tracking**: Logs capture a wide range of system events, including API requests, errors, response time and the token used.
2. **Timestamps**: Each log entry is timestamped, enabling users to precisely track the sequence of events and identify correlations between actions.
3. **Status**: If the calls are success or failure and the details of errors.
4. **Search and Filtering**: Developers can efficiently search and filter log entries based on various criteria such as time range, status, token name, and specific error messages.

{% hint style="info" %}
Please note that **our logs do not store** any personal or financial information. They exclusively retain technical errors and details about the requests made.
{% endhint %}

## How to view logs

Access `Sesame > Sesame Data > Logs`.

<figure><img src="/files/3CXBHzv6vacLYYDGcgf7" alt=""><figcaption><p>The Logs page</p></figcaption></figure>


# Glossary

This page explains key concepts to successfully use the Sesame Data API.

#### Holding

An asset (the term is used generically, but also includes liabilities) within an entity on a business date.&#x20;

#### Entity

An entity is an object which contains holdings of one or more assets. All Sesame Data requires an entity. For example, a holding is a position in an asset on date, *within an entity.* Transactions are also recognised as being for an asset, which is within an entity. \
\
An entity can either be a `Portfolio` or a `Vehicle`. A portfolio contains a collection of holdings from a single custodian. A vehicle is an aggregation of the holdings and transactions one of or more portfolios. Most `Custodial` use cases require data per portfolio (that is, per custodian), while `Enterprise` use cases typically require data at a vehicle (or consolidated) level. &#x20;

#### Date Publication

A holdings date for which data which is ready for retrieval from the different endpoints is `Published` data. In order to be `Published`, after receipt, data is standardised and then run through the Sesame `Pipeline`. Once this is complete, the data will be available via the the various endpoints. To understand the status of a particular date, the `entityDates` endpoint can be used.&#x20;

#### Pipeline

All data must flow through the Sesame `Pipeline` before being available in the various endpoints. The Pipeline performs various operations including data integrity checks, consolidations as well as risk and performance computations. Data must have the Pipeline status of `Ready` before it can be requested from an endpoint. You can see this status, as well as when an entity was published in the `entityDates` endpoint. &#x20;

#### Usage of accountCode output field

The output field `accountCode` is a legacy field which contains the same information as `entityId`. It will be deprecated ultimately, but for now remains available to support backward compatibility.&#x20;

#### AssetId

A distinct id per asset (or liability). You can use this in conjunction with asset name and ISIN to map  assets to objects in your own software or system.&#x20;


# Introduction

Sesame Data is Landytech’s data access layer, designed to provide flexible yet robust access to entity, transaction and position data via the Sesame Data API.

This documentation covers the `/v2` API, which introduces a modern, unified API architecture for consuming Sesame Data programmatically. The `/v2` endpoints are built to support a wide range of integration, reporting, and analytics use cases, while remaining fully aligned with the data users see inside Sesame.

These Docs will guide you through how to use Sesame Data. If you still have any queries, please consult the [`FAQ`](/sesame-data-v2/faq-and-troubleshooting) section or reach out to us at <sales@landytech.com>.

If you are using the  `/v1` API, you can access those Docs by changing the page on the top left of this page.

### Who is Sesame Data for?

Sesame Data is built for:

* **Private banks and entities with complex system landscapes** unifying data from multiple core banking and portfolio systems, enabling a consolidated view of wealth, accurate analytics generation, and client insights without manual spreadsheets or system-specific queries
* **Trust companies** automating the bookkeeping of transactions from custodial & non-custodial sources, and using transactions for AML validations
* **Data and BI teams or advanced Sesame users** who require analytics insights and dashboards embedded in a software outside of Sesame&#x20;
* **Integration partners** connecting Sesame Data to third‑party platforms

### How Sesame Data Relates to the Sesame Platform

Sesame Data is an extension of Sesame: the data exposed via the API uses the **same business logic** as the Sesame application. As soon as data is available in the Sesame application, it is available via the Sesame Data API also. This ensures consistency between what users see in Sesame and what is retrieved programmatically from the API.

### What these docs cover

This documentation is structured to help you get value quickly:

* [Use Cases](/sesame-data-v2/use-cases) - Common problems that Sesame Data addresses
* [Authentication](/sesame-data-v2/authentication) - Token management and making requests
* [API Endpoints](/sesame-data-v2/api-endpoints) - Detailed documentation for all `/v2` endpoints
* [Sesame Data Experience](/sesame-data-v2/sesame-data-experience) - How to access the API via the Sesame application
* [Data Feeds](/sesame-data-v2/data-feeds) - Understand Landytech's coverage, and how to determine how complete the coverage is of your scope
* [Tutorials/Recipes](/sesame-data-v2/tutorials-recipes) - Use Sesame Data in third party systems
* &#x20;[FAQ and Troubleshooting](/sesame-data-v2/faq-and-troubleshooting) - Answers to common questions on behaviour, limits, and performance

## Getting Started

The best way to get started is using the [Sesame Data Experience](https://app.landytech.net/sesame-data-v2/destinations/destinations/destinations-hub) in Sesame. This requires a Sesame account, if you don't have one, you can book a [request for a demo account](https://www.landytech.com/request-a-demo).

Follow these steps to access your data:

1. The first step is to [Create and manage your API token](/sesame-data-v2/authentication/create-and-manage-your-api-token)
2. Next, learn [How to Authenticate](/sesame-data-v2/authentication/how-to-authenticate) and use the token to get access to your data
3. Then explore our [API Endpoints](/sesame-data-v2/api-endpoints). We recommend starting with [Entities](/sesame-data-v2/api-endpoints/entities) endpoint. This endpoint contains all entities (Legal entities, Portfolios, Consolidations) that are available in your account
4. You can use the endpoint [Entities](/sesame-data-v2/api-endpoints/entities) to determine the dates for which data has been received from your custodians, and which are available for you to request following processing in Sesame
5. After you may want to start with the [Transactions](/sesame-data-v2/api-endpoints/transactions) endpoint to see your transactions per entity, and then consult [Positions](/sesame-data-v2/api-endpoints/positions) for your positions
6. Finally, the [Analytics](/sesame-data-v2/api-endpoints/analytics) endpoint, allows you to define your flexible request body to fetch the precise set or analytics, transaction or position information you require

You may also find it valuable to explore [Sesame Data Experience](/sesame-data-v2/sesame-data-experience) or our tutorial on [Using Sesame Data with Postman](/sesame-data-v2/tutorials-recipes/using-sesame-data-with-postman).


# Use Cases

The Sesame Data product use-cases generally fall into 2 groups: Custodial and Analytics. Learn more about each of these below.

### Custodial

Sesame Data enables companies to deliver modern digital experiences and automate operations while keeping existing trust systems as the core. The [Transactions](/sesame-data-v2/api-endpoints/transactions) and [Positions](/sesame-data-v2/api-endpoints/positions) endpoints deliver rich transaction and position data per entity requested, and for the date range requested. Client systems will use this data to achieve the following outcomes:&#x20;

#### 1. Automate bookkeeping

* Scale trust administration without linear headcount growth by utilising off the shelf integrations with 3rd party accounting and trust softwares, or integrating to another software
* Enable T+1 bookkeeping, avoiding the post quarter-end rush&#x20;
* Reduce errors, write-offs, and compliance risk by ingesting all transactions more quickly and timeously

#### 2. Improve AML risk-based monitoring

* Rest assured knowing that Sesame will share up-to-date client transaction and position data daily, making this data available on demand for AML monitoring&#x20;

<figure><img src="/files/P1qwGg8FR7Y7m9BDq98W" alt=""><figcaption><p>A representation of the flow of data from custodians, through the Sesame file processing and data standardisation layer, and then made available via API in a common format, for consumption by software like Quantios QCore and PlainSail.</p></figcaption></figure>

### Analytics

Sesame Data feeds your existing systems with data, reporting, and insights you cannot source or produce yourself without adding new teams or replacing your core infrastructure. Analytics users can access a breadth of data, covering performance, PnL, risk, exposures and other position and transaction data.&#x20;

The [Analytics](/sesame-data-v2/api-endpoints/analytics) API allows users the flexibility to request only the data fields they want, joining data across entities, positions, transactions and assets. Client systems will use this data to achieve the following outcomes:&#x20;

#### 1. Data & Analytics Foundation

* Normalise data across custodians and portfolios of private or alternative assets, under a single data model
* Feed normalised data into existing systems via API or connectors
* Eliminate manual data collection and having to build rules to unify inconsistent datasets

#### 2. Operational Efficiency at Scale

* On-demand reporting: Generate consistent reports across all asset classes without spreadsheets
* Generate analytics more quickly, across hundreds of entities and with lower costs to produce

#### 3. Client & Advisor Value

* Equip relationship managers with timely, actionable intelligence to inform and guide their clients
* Improve retention, wallet share, and client satisfaction


# Authentication

In this section of the documentation, you will find information about how to create and manage your tokens and how to use your token to authenticate.

The Sesame Data uses Basic Authentication, utilising a combination of a username and API tokens as passwords. Upon token generation, clients will receive their unique password. This password and their client-specific username are required as authentication when making requests.&#x20;

<table data-header-hidden><thead><tr><th width="131"></th><th></th></tr></thead><tbody><tr><td>Username</td><td>A unique code belonging to each client. This will be available in the Sesame Data Experience</td></tr><tr><td>Password</td><td>The token which allows you to make requests. This is generated in the Sesame Data Experience</td></tr></tbody></table>

Additionally, the API provides support for IP whitelisting, enhancing data security by restricting authentication to a predefined list of IPs. This feature ensures that only authorised IPs can authenticate by presenting a valid token.

You may also find it valuable to explore our tutorial on [Using Sesame Data with Postman](/sesame-data-v2/tutorials-recipes/using-sesame-data-with-postman).

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td>Tokens are your key to access your data similar to a password.</td><td><a href="/files/2HC6zTLqMqRaDwOY1tK4">/files/2HC6zTLqMqRaDwOY1tK4</a></td><td><a href="/pages/xATEiqyRXeYaCRdF2mnZ">/pages/xATEiqyRXeYaCRdF2mnZ</a></td></tr><tr><td>Use generated tokens to access to authenticate and have access to your data.</td><td><a href="/files/7mXuLPB4baiTV5gWAph8">/files/7mXuLPB4baiTV5gWAph8</a></td><td><a href="/pages/kPhDK44iAqBT74AbXl7u">/pages/kPhDK44iAqBT74AbXl7u</a></td></tr><tr><td>Increase the security by optionally enabling protection by IPs.</td><td><a href="/files/wzr3z6WyBAxiWKWrayPh">/files/wzr3z6WyBAxiWKWrayPh</a></td><td><a href="/pages/17aLtG70o1MdFveb0O2i">/pages/17aLtG70o1MdFveb0O2i</a></td></tr></tbody></table>


# Create and manage your API token

Application access tokens are created and managed in the Sesame Application. Due to the sensitivity of the information available from Sesame Data, token management is closely controlled. Within your Sesame Application, only users who are Account Administrators will be able to create and manage tokens. However, as this is an application token, any user with the token can make requests.&#x20;

{% hint style="info" %}
Note that if you are not an Account Administrator, ask the Account Admin of your Sesame account to generate and send you the token Username and Password.
{% endhint %}

## How to create an API Token

Once logged in to Sesame, in the `Sesame Data Experience`, Account Administrator users can generate a token from the `Destinations` menu: under `API` select `Tokens` and then `Create Token`.

The user is required to name the token and provide an expiration date. The field `Description` can be used to add more information about where the token is used. As Sesame has integrations to a growing list of partner software solutions, to assist in monitoring the usage of different tokens, the target software can be set from the list of available ones.&#x20;

For security, after saving the token, Account Administrators will be notified by email of the newly created token. Sesame will also automatically email the token creator when the token is two days away from expiration to allow time for a new token to be created, helping to avoid connectivity disruptions.&#x20;

To enhance security of their connections in the event a token is accidentally leaked, users can optionally utilise [IP Whitelisting](/sesame-data-v2/authentication/ip-whitelisting).

<div data-full-width="false"><figure><img src="/files/1E4otgcuEICd2B2GAzbV" alt="" width="375"><figcaption></figcaption></figure></div>

## Reviewing, revoking and managing existing tokens

Post creation of a token, users can later retrieve the token password and username by selecting the `Edit` option.  Users can also manage the name, description and whitelisted IPs. Users can revoke tokens that they no longer require. Revoked tokens stop working immediately.

<figure><img src="/files/yiZ5JsRUJqSWKPtHFLWG" alt="" width="375"><figcaption></figcaption></figure>


# How to Authenticate

Sesame uses Basic authentication for its APIs. Learn how to authenticate on this page.

After generating an [API Token](/sesame-data-v2/authentication/create-and-manage-your-api-token#how-to-create-an-api-token), the system displays the associated Username and password for authentication, which is based on the Basic authentication method.

If needed, a token can be retrieved after creation by navigating to  `Sesame Data > Destinations > API > Tokens > [Edit]`.

<figure><img src="/files/Wbzwrwy5XSgMLTplqMEr" alt="" width="375"><figcaption></figcaption></figure>

In your preferred tool, select the Authorisation type as `Basic Auth`. Your tool will prompt you to enter the Username and Password - input the credentials as provided by Sesame.

The simplest call that you can make is [Entities](/sesame-data-v2/api-endpoints/entities), which returns all Legal Entities, Portfolios and Consolidations of your account. This endpoint does not require any additional request parameter, but if desired, providing an entity's ID in the url, the API will only return data for that single entity only.

The Authentication and requests to the Sesame Data APIs require:

1\. Basic Authentication

* All API requests must include HTTP Basic Authentication credentials
* Include your credentials in the Authorisation header using the format: Basic {base64(username:password)}

2\. Base URL `https://data.api.landytech.net`

3\. Request Headers

* Content-Type: application/json (for POST requests)
* X-Result-Limit (optional): Maximum number of items to retrieve per request
* Type: Integer
* Example: 20

4\. Standard Response Codes

* 200 - Successful request
* 401 - Unauthorised - missing or invalid authentication credentials
* 403 - Forbidden - authenticated user does not have permission to access the resource

**Example Request (GET)**

{% tabs %}
{% tab title="Use curl -u (recommended)" %}
{% code title="GET /api/v2/entities" %}

```bash
curl -X GET "https://data.api.landytech.net/api/v2/entities" \
  -u "USERNAME:PASSWORD" \
  -H "X-Result-Limit: 20"
```

{% endcode %}

`curl -u` automatically sends the `Authorization: Basic` header.
{% endtab %}

{% tab title="Use Authorization header" %}
{% code title="GET /api/v2/entities" %}

```bash
# Create the base64 value for "username:password"
ENCODED_CREDENTIALS="$(printf '%s' 'USERNAME:PASSWORD' | base64)"

curl -X GET "https://data.api.landytech.net/api/v2/entities" \
  -H "Authorization: Basic ${ENCODED_CREDENTIALS}" \
  -H "X-Result-Limit: 20"
```

{% endcode %}
{% endtab %}
{% endtabs %}

**Example Request (POST)**

{% code title="POST /api/v2/analytics" %}

```bash
# Create the base64 value for "username:password"
ENCODED_CREDENTIALS="$(printf '%s' 'USERNAME:PASSWORD' | base64)"

curl 'https://data.api.landytech.net/api/v2/analytics' \
  -X POST \
  -H 'Content-Type: application/json' \
  -H "Authorization: Basic ${ENCODED_CREDENTIALS}" \
  -d '{
  "fields": [
    { "code": "ENTITY.ID" },
    { "code": "ENTITY.NAME" },
    { "code": "POSITION.DATE" },
    { "code": "ASSET.NAME" },
    { "code": "ASSET.TYPE" },
    { "code": "POSITION.CUSTODIAN_NAME" },
    { "code": "ENTITY.REPORTING_CURRENCY" },
    { "code": "POSITION.MARKET_VALUE_REPORTING" },
    {
      "name": "YTD Return",
      "code": "POSITION.RETURN",
      "parameters": { "period": "YTD" }
    },
    {
      "name": "1D VaR MC 95",
      "code": "POSITION.RISK",
      "parameters": { "risk_measure_id": 250 }
    },
    {
      "name": "Lehman Crisis (2008)",
      "code": "POSITION.RISK",
      "parameters": { "risk_measure_id": 522 }
    }
  ],
  "ids": [1, 2, 3],
  "consolidationType": "DIRECT",
  "since": "2025-09-30"
}'
```

{% endcode %}

You may also find it valuable to explore our tutorial on [Using Sesame Data with Postman](/sesame-data-v2/tutorials-recipes/using-sesame-data-with-postman).

Users can troubleshoot the results by [Viewing Logs](/sesame-data-v2/faq-and-troubleshooting/viewing-logs).


# IP Whitelisting

IP whitelisting provides an additional layer of security for your API integrations by restricting access to requests originating from pre-approved IP addresses. This approach significantly reduces the risk of unauthorized access, even if credentials are compromised, by ensuring that API calls can only be made from trusted network locations.&#x20;

IP whitelisting is particularly valuable for enterprise environments where API access occurs from known, static locations such as corporate networks or dedicated servers. By limiting the attack surface, IP whitelisting helps protect sensitive financial data, ensures regulatory compliance, and provides an audit trail of authorised access points.

To whitelist an IP, add the allowed IPs when creating the token, or alternatively select `Edit` on your active token and then `Add More` to add all approved IP addresses to the list of valid IPs. To enhance security while testing the API on your local device, you can add your current IP using the `Add my IP` option.&#x20;

<figure><img src="/files/s9T9WhnTXAVZFKs1SxKi" alt=""><figcaption></figcaption></figure>

When finished, select `Save`. \
\
If API requests are made from any non-whitelisted IP addresses, Sesame will return a 401 Unauthorised result, which will also be available in the logs.


# API Endpoints

Data from Sesame Data is accessed via 4 API endpoints. The parameterisation and output fields of each, and the OpenAPI spec can be found in this section. Below is a brief summary of the endpoints.

## Summary of the endpoints

* Entities — discover your account's portfolios, legal entities, and consolidations and get each one's entity ID - used to request data from other endpoints.&#x20;
* Transactions — full transaction history, including breakdown by gross and net, costs, taxes and accruals. For private fund transactions, the granularity of these is also provided. Suited for automating bookkeeping, transaction monitoring and reconciliations.
* Positions — historical holdings per published date with quantities, market values, and prices. Suited to portfolio reporting and end-of-day reconciliation.
* Analytics — computed metrics (returns, risk, PnL, exposures, etc.) across Entity-level and Position-level, also including Asset details and Transaction objects, each with configurable parameters. Suited to quantitative analysis, performance reporting, and risk dashboards. Points users to the field reference schemas for the complete parameter catalog

To learn more about each endpoint, the available parameters and the fields in the response, see the individual endpoints in the pages that follow.


# Entities

## Fetch entities

> The \`entities\` endpoint returns all entities available in the account, along with optional date attributes and other metadata that can be used across the Sesame Data APIs.

```json
{"openapi":"3.1.0","info":{"title":"gateway-api","version":"0.0.1"},"servers":[{"url":"https://data.api.landytech.net","description":"Generated server url"}],"security":[{"basicAuth":[]}],"paths":{"/api/v2/entities":{"get":{"tags":["entities"],"summary":"Fetch entities","description":"The `entities` endpoint returns all entities available in the account, along with optional date attributes and other metadata that can be used across the Sesame Data APIs.","operationId":"getEntities","parameters":[{"name":"X-Result-Limit","in":"header","description":"Maximum number of items to retrieve","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"fields","in":"query","description":"List of field names to retrieve. If empty, all fields will be returned.","required":false,"schema":{"type":"array","items":{"type":"string"}}},{"name":"entityId","in":"query","description":"Unique identifier provided by Landytech","required":false,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"List of entities with selected fields","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntityResponse"}}}},"401":{"description":"Unauthorized, missing or invalid authentication"},"403":{"description":"Forbidden, user does not have permission"}}}}},"components":{"schemas":{"EntityResponse":{"type":"object","description":"Entity data returned by the API","properties":{"data":{"oneOf":[{"$ref":"#/components/schemas/EntityDetails"},{"type":"null"}]}}},"EntityDetails":{"type":"object","description":"Summary of the key dates of an entity","properties":{"ENTITY.ID":{"type":"integer","format":"int64","description":"Unique identifier of the entity. This identifier is created by Sesame"},"ENTITY.NAME":{"type":"string","description":"Name of the entity"},"ENTITY.TYPE":{"type":"string","description":"Type of the entity","enum":["FUND","HOLDING_COMPANY","TRUST","PORTFOLIO","PERSONAL","BASKET","BENCHMARK","GROUPING","CONSOLIDATION"]},"ENTITY.PORTFOLIO_PARENT_ENTITY_ID":{"type":"integer","format":"int64","description":"Parent entity ID of a portfolio entity"},"ENTITY.PORTFOLIO_CODES":{"type":"array","description":"List of portfolio codes for this portfolio. These codes are received in the custodial feed, and used to identify which portfolio the data belongs to. Depending on the feed, a portfolio may have only one or several PORTFOLIO_CODES","items":{"type":"string"}},"ENTITY.REPORTING_CURRENCY":{"type":"string","description":"Reporting currency of the entity, as defined in Sesame"},"ENTITY.CONSOLIDATION_TYPE":{"type":"string","description":"Indicates whether the entity was set up as DIRECT (Direct returns the entity's directly held assets) or LOOK_THROUGH (Look Through allows an entity to look-through its holdings, into underlying entities linked through Sesame-configured look-through relationships. For example, shares of ownership for a holding company will be represented as the proportional ownership of the positions and transactions of the holding company when an entity is LOOK_THROUGH)","enum":["DIRECT","LOOK_THROUGH"]},"ENTITY.PORTFOLIO_FEED":{"type":"string","description":"Name of the feed that populates data for this portfolio"},"ENTITY.CONSOLIDATION_DETAILS":{"$ref":"#/components/schemas/ConsolidationDetails","description":"Entities and participation within a consolidation."},"ENTITY.DETAILED_DATES":{"$ref":"#/components/schemas/EntityDetailedDatesDetails","description":"Key reporting and verification dates."},"ENTITY.KEY_DATES":{"$ref":"#/components/schemas/EntityKeyDatesDetails","description":"Summary of key date metrics."}},"required":["ENTITY.CONSOLIDATION_TYPE","ENTITY.ID","ENTITY.NAME","ENTITY.REPORTING_CURRENCY","ENTITY.TYPE"]},"ConsolidationDetails":{"type":"object","description":"A breakdown of the consolidation configuration, indicating which entities are included in the consolidation, and percentage of their participation. Only relevant for entities with type = 'CONSOLIDATION'","properties":{"ENTITY_ID":{"type":"integer","format":"int64","description":"ID of sub-entity in the consolidation."},"PARTICIPATION":{"type":"number","description":"Participation percentage in consolidation."}}},"EntityDetailedDatesDetails":{"type":"object","description":"Summary of the publication and pipeline status of all position dates per each entity","properties":{"DATE":{"type":"string","format":"date","description":"Date of position"},"PUBLISHED":{"type":"boolean","description":"Whether data is published, meaning that data can be requested for that date"},"PIPELINE_STATUS":{"type":"string","description":"Processing status of the position date in the Sesame data pipeline","enum":["RUNNING","FAILED","READY"]},"DATE_PUBLISHED":{"type":"string","description":"Timestamp of publication."}}},"EntityKeyDatesDetails":{"type":"object","description":"Key dates to help users understand the entity's history","properties":{"LATEST_PUBLISHED_DATE":{"type":"string","format":"date","description":"Most recent published date. Dates can only be published when there is a position on that date"},"FIRST_PUBLISHED_DATE":{"type":"string","format":"date","description":"Earliest published date. Dates can only be published when there is a position on that date"},"LATEST_TRANSACTION_DATE":{"type":"string","format":"date","description":"Most recent transaction date."},"FIRST_TRANSACTION_DATE":{"type":"string","format":"date","description":"Earliest transaction date."}}}}}}
```


# Transactions

## Fetch transactions

> The \`transactions\` endpoint returns all transactions, per published entity date. If a transaction falls on a date which has no positions, it will be be available once a position on that date or a subsequent date is published

```json
{"openapi":"3.1.0","info":{"title":"gateway-api","version":"0.0.1"},"servers":[{"url":"https://data.api.landytech.net","description":"Generated server url"}],"security":[{"basicAuth":[]}],"paths":{"/api/v2/transactions/{entityId}":{"get":{"tags":["transactions"],"summary":"Fetch transactions","description":"The `transactions` endpoint returns all transactions, per published entity date. If a transaction falls on a date which has no positions, it will be be available once a position on that date or a subsequent date is published","operationId":"getTransactions","parameters":[{"name":"fields","in":"query","description":"List of field names to retrieve. If empty, all fields will be returned.","required":false,"schema":{"type":"array","items":{"type":"string"}}},{"name":"entityId","in":"path","description":"Unique identifier provided by Landytech","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fromDate","in":"query","description":"Start of transaction date range (inclusive)","required":false,"schema":{"type":"string","format":"date"}},{"name":"toDate","in":"query","description":"End of transaction date range (inclusive)","required":false,"schema":{"type":"string","format":"date"}},{"name":"consolidationType","in":"query","description":"DIRECT returns the entity's directly held assets. LOOK_THROUGH includes transactions of underlying entities linked through configured look-through relationships. If not provided, DIRECT is used","required":false,"schema":{"type":"string"}},{"name":"fromUpdatedDate","in":"query","description":"Return only records that have been updated on or after the specified date time","required":false,"schema":{"type":"string"}},{"name":"requestPageSize","in":"query","description":"Number of records per page","required":false,"schema":{"type":"integer","format":"int32","default":1000,"maximum":10000}},{"name":"pageToken","in":"query","description":"Token used for pagination. For the first page, this should not be provided. For subsequent pages, use the `nextPageToken` value returned in the previous response","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"List of transactions with selected fields","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionResponse"}}}},"401":{"description":"Unauthorized, missing or invalid authentication"},"403":{"description":"Forbidden, user does not have permission"}}}}},"components":{"schemas":{"TransactionResponse":{"type":"object","description":"Transaction data returned by the API","properties":{"data":{"oneOf":[{"$ref":"#/components/schemas/TransactionDetails"},{"type":"null"}]},"pagination":{"oneOf":[{"$ref":"#/components/schemas/PaginationDetails"},{"type":"null"}]},"meta":{"oneOf":[{"$ref":"#/components/schemas/MetadataDetails"},{"type":"null"}]}}},"TransactionDetails":{"type":"object","description":"Transaction details returned by the API","properties":{"ENTITY.ID":{"type":"integer","format":"int64","description":"Unique identifier of the entity the request was made for. This identifier is created by Sesame"},"ENTITY.NAME":{"type":"string","description":"Name of the entity the request was made for"},"ASSET.NAME":{"type":"string","description":"Name of the investment being transacted"},"ASSET.ID":{"type":"integer","format":"int64","description":"ID of the investment being transacted. This identifier is created by Sesame"},"ASSET.TYPE":{"type":"string","description":"Type of the investment being transacted"},"TRANSACTION.SUBTYPE":{"type":"string","description":"Subtype of the transaction. For a full list of supported subtypes, see the list in `FAQ and Troubleshooting`"},"TRANSACTION.CUSTODIAN_TRANSACTION_ID":{"type":"string","description":"Unique identifier of the transaction, as provided in the custodial feed. When not provided by the custodian, a unique transaction Id is generated by Sesame"},"TRANSACTION.DESCRIPTION":{"type":"string","description":"Description of the transaction, as provided in the custodial feed. When not provided by the custodian, a description is generated by Sesame"},"TRANSACTION.DATE":{"type":"string","format":"date","description":"Date of the transaction."},"TRANSACTION.SETTLEMENT_DATE":{"type":"string","format":"date","description":"Settlement date of the transaction."},"TRANSACTION.MOVEMENT_LOCAL":{"type":"number","description":"Net transaction value, in local currency"},"TRANSACTION.GROSS_MOVEMENT_LOCAL":{"type":"number","description":"Gross transaction value, in local currency"},"TRANSACTION.QUANTITY":{"type":"number","description":"Units of the investment transacted"},"TRANSACTION.NET_UNIT_PRICE_LOCAL":{"type":"number","description":"Net unit price of the transaction, in local currency"},"TRANSACTION.GROSS_UNIT_PRICE_LOCAL":{"type":"number","description":"Gross unit price of the transaction, in local currency"},"TRANSACTION.LOCAL_CURRENCY":{"type":"string","description":"Currency that the transaction is denominated in"},"TRANSACTION.LOCAL_CURRENCY2":{"type":"string","description":"The local currency of the incoming cash where the transaction is an internal FX transaction"},"TRANSACTION.MOVEMENT_REPORTING":{"type":"number","description":"Net transaction value, in reporting currency"},"TRANSACTION.GROSS_MOVEMENT_REPORTING":{"type":"number","description":"Gross transaction value, in reporting currency"},"TRANSACTION.SUB_PORTFOLIO_CODE":{"type":"string","description":"A string providing further granularity about the sub-account involved in the transaction. This could be a bank account number which differs per currency, or nature (capital/income), within the main account. The main account or portfolio identifier is shown in the PORTFOLIO_CODES field in the `entities` endpoint"},"TRANSACTION.SUB_PORTFOLIO_CODE2":{"type":"string","description":"A string providing further granularity about the second account involved in the transaction. This is required for internal FX transactions. In this case, the subPortfolioCode2 represents the sub-account that the incoming cash is received into. The main account or portfolio identifier is shown in the PORTFOLIO_CODES field in the `entities` endpoint"},"TRANSACTION.CAPITAL_OR_INCOME":{"type":"string","description":"A string indicating whether the transaction is in-to or out-of a CAPITAL, INCOME or MIXED account"},"TRANSACTION.GRANULARITY":{"$ref":"#/components/schemas/TransactionGranularityDetails","description":"Granularity of the transaction."},"TRANSACTION.PRIVATE_FUND_GRANULARITY":{"$ref":"#/components/schemas/PrivateFundGranularityDetails","description":"Private fund granularity of the transaction."},"TRANSACTION.REVERSAL":{"type":"boolean","description":"A boolean indicating whether this transaction is reversing a previous transaction"},"TRANSACTION.CUSTODIAN_REVERSED_TRANSACTION_ID":{"type":"string","description":"Where available, the CUSTODIAN_TRANSACTION_ID of the transaction which this transaction is reversing. Only seen for transactions where reversal = `true`. This field helps users connect reversal transactions and the transactions that they are reversing"},"TRANSACTION.UPDATED_DATE":{"type":"string","format":"date-time","description":"Last updated date of the transaction."}},"required":["ASSET.ID","ASSET.NAME","ASSET.TYPE","ENTITY.ID","ENTITY.NAME","TRANSACTION.CUSTODIAN_TRANSACTION_ID","TRANSACTION.DATE","TRANSACTION.DESCRIPTION","TRANSACTION.LOCAL_CURRENCY","TRANSACTION.MOVEMENT_LOCAL","TRANSACTION.QUANTITY","TRANSACTION.REVERSAL","TRANSACTION.SUBTYPE"]},"TransactionGranularityDetails":{"type":"object","description":"A breakdown of the difference between MOVEMENT_LOCAL and GROSS_MOVEMENT_LOCAL","properties":{"COMMISSIONS_LOCAL":{"type":"integer","format":"int64","description":"Value of commissions associated with the transaction, in local currency"},"STAMP_DUTY_LOCAL":{"type":"integer","format":"int64","description":"Value of stamp duties associated with the transaction, in local currency"},"WITHHOLDING_TAX_LOCAL":{"type":"integer","format":"int64","description":"Value of withholdings tax associated with the transaction, in local currency"},"COLLECTION_CHARGE_LOCAL":{"type":"integer","format":"int64","description":"Value of collection charges associated with the transaction, in local currency"},"TAX_LOCAL":{"type":"integer","format":"int64","description":"Value of taxes, duties associated with the transaction, in local currency"},"ACCRUED_INTEREST_LOCAL":{"type":"integer","format":"int64","description":"The value of the accrued interest when a fixed income investment is transacted, in local currency"}}},"PrivateFundGranularityDetails":{"type":"object","description":"Provides a breakdown of MOVEMENT_LOCAL for Capital Calls, Distributions and Equalisations","properties":{"PE_DEDUCTIBLE":{"type":"integer","format":"int64","description":"The portion of a capital call which reduces the remaining commitment or the portion of an equalisation which increases the remaining commitment, in local currency"},"PE_NON_DEDUCTIBLE":{"type":"integer","format":"int64","description":"The portion of a capital call which does not reduce the remaining commitment or the portion of an equalisation which does not increase the remaining commitment, in local currency"},"PE_INVESTMENT":{"type":"integer","format":"int64","description":"The portion of a capital call which goes towards purchasing portfolio companies or the portion of an equalisation which refunds for amounts previously paid towards purchasing portfolio companies, in local currency"},"PE_MANAGEMENT_FEES":{"type":"integer","format":"int64","description":"The portion of a capital call which is used for covering management fees or the portion an equalisation representing the pro-rata rebate for previously paid management fees, in local currency"},"PE_FUND_EXPENSES":{"type":"integer","format":"int64","description":"The portion of a capital call which is used for covering fund expenses or the portion of an equalisation representing the pro-rata rebate for previously paid fund expenses, in local currency"},"PE_OTHER_FEES":{"type":"integer","format":"int64","description":"The portion of a capital call which is used for covering other fund fees or the portion an equalisation representing the pro-rata rebate for previously paid other fund fees, in local currency"},"PE_EQUALISATION":{"type":"integer","format":"int64","description":"The portion of a capital call which is a catch-up equalisation payment or the portion of an equalisation which is received following catch-up equalisation by other investors, where above granularity is not provided, in local currency"},"PE_RECALLABLE":{"type":"integer","format":"int64","description":"The portion of the distribution that is recallable, in local currency"},"PE_NON_RECALLABLE":{"type":"integer","format":"int64","description":"The portion of the distribution that is non-recallable, in local currency"},"PE_CAPITAL_RETURN":{"type":"integer","format":"int64","description":"The portion of the distribution that represents a return of capital to the LP, in local currency"},"PE_CAPITAL_GAIN":{"type":"integer","format":"int64","description":"The portion of the distribution that is a capital gain (this can be negative, indicating a capital loss), in local currency"},"PE_INCOME":{"type":"integer","format":"int64","description":"The portion of the distribution that represents income, in local currency"}}},"PaginationDetails":{"type":"object","description":"Pagination data returned by the API","properties":{"nextPageToken":{"type":["string","null"],"description":"Token used to fetch the next page of result. This token is opaque and must be used as is"},"hasNextPage":{"type":["boolean","null"],"description":"A boolean indicating if there is a next page to this resource"},"pageSize":{"type":["integer","null"],"format":"int64","description":"Number of elements in the current page. This API is not providing the total number of elements for this resource."}},"required":["hasNextPage","pageSize"]},"MetadataDetails":{"type":"object","description":"Metadata returned by the API","properties":{"requestId":{"type":["string","null"],"format":"uuid","description":"Id of the request"},"responseType":{"type":["string","null"],"description":"Format of the request"}},"required":["requestId"]}}}}
```


# Positions

## Fetch Positions

> The \`positions\` endpoint returns the positions, per published entity date

```json
{"openapi":"3.1.0","info":{"title":"gateway-api","version":"0.0.1"},"servers":[{"url":"https://data.api.landytech.net","description":"Generated server url"}],"security":[{"basicAuth":[]}],"paths":{"/api/v2/positions/{entityId}":{"get":{"tags":["positions"],"summary":"Fetch Positions","description":"The `positions` endpoint returns the positions, per published entity date","operationId":"getPositions","parameters":[{"name":"fields","in":"query","description":"List of field names to retrieve. If empty, all fields will be returned.","required":false,"schema":{"type":"array","items":{"type":"string"}}},{"name":"entityId","in":"path","description":"Unique identifier provided by Landytech","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"fromDate","in":"query","description":"Start of position date range (inclusive)","required":false,"schema":{"type":"string","format":"date"}},{"name":"toDate","in":"query","description":"End of position date range (inclusive)","required":false,"schema":{"type":"string","format":"date"}},{"name":"consolidationType","in":"query","description":"DIRECT returns the entity's directly held assets. LOOK_THROUGH includes transactions of underlying entities linked through configured look-through relationships. If not provided, DIRECT is used","required":false,"schema":{"type":"string"}},{"name":"fromUpdatedDate","in":"query","description":"Return only records that have been updated on or after the specified date time","required":false,"schema":{"type":"string"}},{"name":"requestPageSize","in":"query","description":"Number of records per page","required":false,"schema":{"type":"integer","format":"int32","default":1000,"maximum":10000}},{"name":"pageToken","in":"query","description":"Token used for pagination. For the first page, this should not be provided. For subsequent pages, use the `nextPageToken` value returned in the previous response","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"List of entities with selected fields","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PositionResponse"}}}},"401":{"description":"Unauthorized, missing or invalid authentication"},"403":{"description":"Forbidden, user does not have permission"}}}}},"components":{"schemas":{"PositionResponse":{"type":"object","description":"Position data returned by the API","properties":{"data":{"oneOf":[{"$ref":"#/components/schemas/PositionDetails"},{"type":"null"}]},"pagination":{"oneOf":[{"$ref":"#/components/schemas/PaginationDetails"},{"type":"null"}]},"meta":{"oneOf":[{"$ref":"#/components/schemas/MetadataDetails"},{"type":"null"}]}}},"PositionDetails":{"type":"object","description":"Position data returned by the API","properties":{"ENTITY.ID":{"type":"integer","format":"int64","description":"Unique identifier of the entity the request was made for. This identifier is created by Sesame"},"ENTITY.NAME":{"type":"string","description":"Name of the entity the request was made for"},"ASSET.NAME":{"type":"string","description":"Name of the investment held"},"ASSET.ID":{"type":"integer","format":"int64","description":"ID of the investment held. This identifier is created by Sesame"},"ASSET.TYPE":{"type":"string","description":"Type of the investment held"},"POSITION.DATE":{"type":"string","format":"date","description":"The date of the position in the investment"},"POSITION.QUANTITY":{"type":"number","description":"Quantity of units of the investment held"},"POSITION.MARKET_VALUE_LOCAL":{"type":"number","description":"Market value of the holding, in local currency"},"POSITION.UNIT_PRICE_LOCAL":{"type":"number","description":"Price per unit of the investment held, in local currency"},"POSITION.LOCAL_CURRENCY":{"type":"string","description":"Currency that the position is denominated in"},"POSITION.GRANULARITY":{"$ref":"#/components/schemas/PositionGranularityDetails","description":"Granularity of the position."},"POSITION.UPDATED_DATE":{"type":"string","format":"date-time","description":"Last updated date of the position."}},"required":["ASSET.ID","ASSET.NAME","ASSET.TYPE","ENTITY.ID","ENTITY.NAME","POSITION.DATE","POSITION.LOCAL_CURRENCY","POSITION.MARKET_VALUE_LOCAL","POSITION.QUANTITY","POSITION.UNIT_PRICE_LOCAL"]},"PositionGranularityDetails":{"type":"object","description":"Returns cash holdings split by sub-portfolio codes. The sub-portfolio code provides a level more granularity than the entity-level balances. That is, a sub-portfolio code reflects the cash balances separated by the specific sub-account codes. These codes will differ per currency, and per intention. For example, capital versus income accounts","properties":{"SUB_PORTFOLIO":{"$ref":"#/components/schemas/SubPortfolioDetails","description":"Breakdown of holdings by sub-portfolio."}}},"SubPortfolioDetails":{"type":"object","description":"The cash balance (position) for the POSITION.DATE, decomposed into the underlying SUB_PORTFOLIO_CODEs","properties":{"SUB_PORTFOLIO_CODE":{"type":"string","description":"A string providing further granularity about the sub bank accounts balance which contribute to the cash position on this date. This could be a bank account number which differs per nature (capital/income), within the main account. The main account or portfolio identifier is shown in the PORTFOLIO_CODES field in the `entities` endpoint"},"MARKET_VALUE_LOCAL":{"type":"number","description":"The cash balance of that SUB_PORTFOLIO_CODE on the position date"}}},"PaginationDetails":{"type":"object","description":"Pagination data returned by the API","properties":{"nextPageToken":{"type":["string","null"],"description":"Token used to fetch the next page of result. This token is opaque and must be used as is"},"hasNextPage":{"type":["boolean","null"],"description":"A boolean indicating if there is a next page to this resource"},"pageSize":{"type":["integer","null"],"format":"int64","description":"Number of elements in the current page. This API is not providing the total number of elements for this resource."}},"required":["hasNextPage","pageSize"]},"MetadataDetails":{"type":"object","description":"Metadata returned by the API","properties":{"requestId":{"type":["string","null"],"format":"uuid","description":"Id of the request"},"responseType":{"type":["string","null"],"description":"Format of the request"}},"required":["requestId"]}}}}
```


# Analytics

## Fetch analytics data

> The \`analytics\` endpoint returns all analytical data for an entity, position, transaction or asset. This includes market values, exposures, risk, performance, and other metrics.

```json
{"openapi":"3.1.0","info":{"title":"gateway-api","version":"0.0.1"},"servers":[{"url":"https://data.api.landytech.net","description":"Generated server url"}],"security":[{"basicAuth":[]}],"paths":{"/api/v2/analytics":{"post":{"tags":["analytics"],"summary":"Fetch analytics data","description":"The `analytics` endpoint returns all analytical data for an entity, position, transaction or asset. This includes market values, exposures, risk, performance, and other metrics.","operationId":"getAnalyticsData","parameters":[{"name":"requestPageSize","in":"query","description":"Number of records per page","required":false,"schema":{"type":"integer","format":"int32","default":1000,"maximum":10000}},{"name":"pageToken","in":"query","description":"Token used for pagination. For the first page, this should not be provided. For subsequent pages, use the `nextPageToken` value returned in the previous response","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyticsDataBody"}}},"required":true},"responses":{"200":{"description":"List of data with selected fields","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyticsResponse"}}}},"401":{"description":"Unauthorized, missing or invalid authentication"},"403":{"description":"Forbidden, user does not have permission"}}}}},"components":{"schemas":{"AnalyticsDataBody":{"type":"object","description":"Request body for analytics data","properties":{"fields":{"type":"array","description":"List of analytics fields to request","items":{"$ref":"#/components/schemas/AnalyticsField"}},"ids":{"type":"array","description":"List of entity ids to fetch","items":{"type":"integer","format":"int64"}},"consolidationType":{"type":"string","default":"DIRECT","description":"DIRECT returns the entity's directly held assets. LOOK_THROUGH includes transactions of underlying entities linked through configured look-through relationships. If not provided, DIRECT is used","enum":["DIRECT","LOOK_THROUGH"]},"since":{"type":"string","format":"date","default":"2000-01-01","description":"Start date for the data to fetch"},"until":{"type":["string","null"],"format":"date","description":"End date for the data to fetch. If not provided, latest published date is used"},"sort":{"oneOf":[{"$ref":"#/components/schemas/AnalyticsSort"},{"type":"null"}]}},"required":["consolidationType","fields","ids","since"]},"AnalyticsField":{"type":"object","description":"List of fields to request","properties":{"code":{"type":"string","description":"Field code"},"name":{"type":["string","null"],"description":"Field name. Has the same value as code by default"},"parameters":{"type":["object","null"],"additionalProperties":{},"description":"Additional parameters for the field"}},"required":["code"]},"AnalyticsSort":{"type":"object","properties":{"name":{"type":"string","description":"Field code used for sorting. Default value depends on the data being requested: POSITION.DATE, TRANSACTION.DATE, ENTITY.ID or ASSET.ID"},"ascending":{"type":"boolean","default":true,"description":"True if sorting by the chosen field in ascending order, false if descending"}},"required":["ascending","name"]},"AnalyticsResponse":{"type":"object","description":"Analytics data returned by the API","properties":{"data":{"oneOf":[{"$ref":"#/components/schemas/AnalyticsDetails"},{"type":"null"}]},"pagination":{"oneOf":[{"$ref":"#/components/schemas/PaginationDetails"},{"type":"null"}]},"meta":{"oneOf":[{"$ref":"#/components/schemas/MetadataDetails"},{"type":"null"}]}}},"AnalyticsDetails":{"type":"object","description":"Analytics data details returned by the API","properties":{"ENTITY.ID":{"type":"integer","format":"int64","description":"Unique identifier of the entity the request was made for. This identifier is created by Sesame"},"ENTITY.NAME":{"type":"string","description":"Name of the entity the request was made for"},"ENTITY.TYPE":{"type":"string","description":"Type of the entity","enum":["FUND","HOLDING_COMPANY","TRUST","PORTFOLIO","PERSONAL","BASKET","BENCHMARK","GROUPING","CONSOLIDATION"]},"ENTITY.PORTFOLIO_PARENT_ENTITY_ID":{"type":"integer","format":"int64","description":"Parent entity ID of a portfolio entity"},"ENTITY.REPORTING_CURRENCY":{"type":"string","description":"Reporting currency of the entity, as defined in Sesame"},"ASSET.NAME":{"type":"string","description":"Name of the investment being transacted"},"ASSET.ID":{"type":"integer","format":"int64","description":"ID of the investment being transacted. This identifier is created by Sesame"},"ASSET.TYPE":{"type":"string","description":"Type of the investment being transacted"},"TRANSACTION.SUBTYPE":{"type":"string","description":"Subtype of the transaction. For a full list of supported subtypes, see the list in `FAQ and Troubleshooting`"},"TRANSACTION.CUSTODIAN_TRANSACTION_ID":{"type":"string","description":"Unique identifier of the transaction, as provided in the custodial feed. When not provided by the custodian, a unique transaction Id is generated by Sesame"},"TRANSACTION.DESCRIPTION":{"type":"string","description":"Description of the transaction, as provided in the custodial feed. When not provided by the custodian, a description is generated by Sesame"},"TRANSACTION.DATE":{"type":"string","format":"date","description":"Date of the transaction."},"TRANSACTION.SETTLEMENT_DATE":{"type":"string","format":"date","description":"Settlement date of the transaction."},"TRANSACTION.MOVEMENT_LOCAL":{"type":"number","description":"Net transaction value, in local currency"},"TRANSACTION.GROSS_MOVEMENT_LOCAL":{"type":"number","description":"Gross transaction value, in local currency"},"TRANSACTION.QUANTITY":{"type":"number","description":"Units of the investment transacted"},"TRANSACTION.NET_UNIT_PRICE_LOCAL":{"type":"number","description":"Net unit price of the transaction, in local currency"},"TRANSACTION.GROSS_UNIT_PRICE_LOCAL":{"type":"number","description":"Gross unit price of the transaction, in local currency"},"TRANSACTION.LOCAL_CURRENCY":{"type":"string","description":"Currency that the transaction is denominated in"},"TRANSACTION.LOCAL_CURRENCY2":{"type":"string","description":"The local currency of the incoming cash where the transaction is an internal FX transaction"},"TRANSACTION.MOVEMENT_REPORTING":{"type":"number","description":"Net transaction value, in reporting currency"},"TRANSACTION.GROSS_MOVEMENT_REPORTING":{"type":"number","description":"Gross transaction value, in reporting currency"},"TRANSACTION.GRANULARITY":{"$ref":"#/components/schemas/TransactionGranularityDetails","description":"Granularity of the transaction."},"TRANSACTION.PRIVATE_FUND_GRANULARITY":{"$ref":"#/components/schemas/PrivateFundGranularityDetails","description":"Private fund granularity of the transaction."},"TRANSACTION.REVERSAL":{"type":"boolean","description":"A boolean indicating whether this transaction is reversing a previous transaction"},"TRANSACTION.CUSTODIAN_REVERSED_TRANSACTION_ID":{"type":"string","description":"Where available, the CUSTODIAN_TRANSACTION_ID of the transaction which this transaction is reversing. Only seen for transactions where reversal = `true`. This field helps users connect reversal transactions and the transactions that they are reversing"},"POSITION.DATE":{"type":"string","format":"date","description":"The date of the position in the investment"},"POSITION.QUANTITY":{"type":"number","description":"Quantity of units of the investment held"},"POSITION.MARKET_VALUE_LOCAL":{"type":"number","description":"Market value of the holding, in local currency"},"POSITION.UNIT_PRICE_LOCAL":{"type":"number","description":"Price per unit of the investment held, in local currency"},"POSITION.LOCAL_CURRENCY":{"type":"string","description":"Currency that the position is denominated in"},"POSITION.COST_VALUE_REPORTING":{"type":"number","description":"Total cost value of the holding, in reporting currency"},"POSITION.AVERAGE_UNIT_COST_PRICE_LOCAL":{"type":"number","description":"Average cost per unit of the investment held, in local currency"},"POSITION.VWAP":{"type":"number","description":"Volume-weighted average price"},"ENTITY.RETURN":{"type":"number","description":"Total gain or loss generated by an investment entity over a specific period, expressed as a percentage of the portfolio's value.\nNeeds the period parameter (possible values are: \"DTD\", \"FYTD\", \"ITD\", \"LAST\", \"MTD\", \"QTD\", \"WTD\", \"YTD\")\nOptional parameters are:\n- methodology (possible values are: \"SIMPLE\", \"COMPOUNDED\", \"STDEV\", \"AVG\")\n- entity (possible values are: \"ENTITY\", \"DEFAULT_BENCHMARK\")\n- frequency (possible values are: \"DAILY\", \"WEEKLY\", \"MONTHLY\", \"YEARLY\")\n- start_date: From the given date (\"YYYY-MM-DD\")\n- end_date: To the given date (\"YYYY-MM-DD\")"},"POSITION.RETURN":{"type":"number","description":"The position return is calculated by compounding daily returns from t0 to t, using the daily PnL or the position at t in reporting currency, the previous days market value notional of the position in reporting currency, and the sum of transactions for the position on t. For Trading Pnl (and therefore FX Pnl) we use FX rate as of t when transforming daily PnL from t0 to t into reporting currency.\nNeeds the period parameter (possible values are: \"DTD\", \"FYTD\", \"ITD\", \"LAST\", \"MTD\", \"QTD\", \"WTD\", \"YTD\")\nOptional parameters are:\n- frequency (possible values are: \"DAILY\", \"WEEKLY\", \"MONTHLY\", \"YEARLY\")\n- start_date: From the given date (\"YYYY-MM-DD\")\n- end_date: To the given date (\"YYYY-MM-DD\")"},"ENTITY.EXPOSURE":{"type":"number","description":"Total notional exposure of the entity, expressed in %AUM.\nNeeds the kind parameter (possible values are: \"LONG\", \"SHORT\", \"NET\", \"GROSS\")\nOptional parameters are:\n- _format (possible values are: \"AMOUNT\", \"PERCENTAGE\", \"BASIS_POINTS\")\n- exposure_aggregation (possible values are: \"SUM\", \"MAX\", \"MIN\", \"COUNT\")"},"POSITION.EXPOSURE":{"type":"number","description":"Total notional exposure of the position, expressed in %AUM.\nOptional parameters are:\n- kind (possible values are: \"LONG\", \"SHORT\", \"NET\", \"GROSS\")"},"POSITION.AGGREGATED_PNL":{"type":"number","description":"Aggregated pnl value of the position.\nNeeds the period parameter (possible values are: \"DTD\", \"FYTD\", \"ITD\", \"LAST\", \"MTD\", \"QTD\", \"WTD\", \"YTD\")\nOptional parameters are:\n- _format (possible values are: \"AMOUNT\", \"PERCENTAGE\", \"BASIS_POINTS\")\n- aggregation (possible values are: \"SUM\", \"MAX\", \"MIN\", \"AVG\", \"PROD\")\n- frequency (possible values are: \"DAILY\", \"WEEKLY\", \"MONTHLY\", \"YEARLY\")\n- _types (possible values in the array are: \"TOTAL\", \"INCOME\", \"FX\", \"TRADING\", \"REALISED\", \"UNREALISED\")\n- start_date: From the given date (\"YYYY-MM-DD\")\n- end_date: To the given date (\"YYYY-MM-DD\")"},"ENTITY.PNL":{"type":"number","description":"Aggregation of the DTD PnLs of an entity for a given period of time.\nNeeds the period parameter (possible values are: \"DTD\", \"FYTD\", \"ITD\", \"LAST\", \"MTD\", \"QTD\", \"WTD\", \"YTD\")\nOptional parameters are:\n- _format (possible values are: \"AMOUNT\", \"PERCENTAGE\", \"BASIS_POINTS\")\n- aggregation (possible values are: \"SUM\", \"MAX\", \"MIN\", \"AVG\", \"PROD\")\n- frequency (possible values are: \"DAILY\", \"WEEKLY\", \"MONTHLY\", \"YEARLY\")\n- _types (possible values in the array are: \"TOTAL\", \"INCOME\", \"FX\", \"TRADING\", \"REALISED\", \"UNREALISED\")\n- methodology (possible values are: \"SIMPLE\", \"CARINO\")\n- start_date: From the given date (\"YYYY-MM-DD\")\n- end_date: To the given date (\"YYYY-MM-DD\")"},"POSITION.MARKET_VALUE_NOTIONAL_REPORTING":{"type":"number","description":"Market value of the position in reporting currency."},"ENTITY.CUMULATIVE_PERFORMANCE":{"type":"number","description":"Cumulative performance value of the entity."},"ASSET.CUMULATIVE_PERFORMANCE":{"type":"number","description":"Cumulative performance value of the asset.\nNeeds the period parameter (possible values are: \"DTD\", \"FYTD\", \"ITD\", \"LAST\", \"MTD\", \"QTD\", \"WTD\", \"YTD\")"},"ENTITY.RISK":{"type":"number","description":"Risk value of the entity.\nNeeds the risk_measure_id parameter (integer), which can be found at docs.landytech.com"},"POSITION.RISK":{"type":"number","description":"Risk value of the position.\nNeeds the risk_measure_id parameter (integer), which can be found at docs.landytech.com"}},"required":["ASSET.CUMULATIVE_PERFORMANCE","ASSET.ID","ASSET.NAME","ASSET.TYPE","ENTITY.CUMULATIVE_PERFORMANCE","ENTITY.EXPOSURE","ENTITY.ID","ENTITY.NAME","ENTITY.PNL","ENTITY.REPORTING_CURRENCY","ENTITY.RETURN","ENTITY.RISK","ENTITY.TYPE","POSITION.AGGREGATED_PNL","POSITION.DATE","POSITION.EXPOSURE","POSITION.LOCAL_CURRENCY","POSITION.MARKET_VALUE_LOCAL","POSITION.MARKET_VALUE_NOTIONAL_REPORTING","POSITION.QUANTITY","POSITION.RETURN","POSITION.RISK","POSITION.UNIT_PRICE_LOCAL","TRANSACTION.CUSTODIAN_TRANSACTION_ID","TRANSACTION.DATE","TRANSACTION.DESCRIPTION","TRANSACTION.LOCAL_CURRENCY","TRANSACTION.MOVEMENT_LOCAL","TRANSACTION.QUANTITY","TRANSACTION.REVERSAL","TRANSACTION.SUBTYPE"]},"TransactionGranularityDetails":{"type":"object","description":"A breakdown of the difference between MOVEMENT_LOCAL and GROSS_MOVEMENT_LOCAL","properties":{"COMMISSIONS_LOCAL":{"type":"integer","format":"int64","description":"Value of commissions associated with the transaction, in local currency"},"STAMP_DUTY_LOCAL":{"type":"integer","format":"int64","description":"Value of stamp duties associated with the transaction, in local currency"},"WITHHOLDING_TAX_LOCAL":{"type":"integer","format":"int64","description":"Value of withholdings tax associated with the transaction, in local currency"},"COLLECTION_CHARGE_LOCAL":{"type":"integer","format":"int64","description":"Value of collection charges associated with the transaction, in local currency"},"TAX_LOCAL":{"type":"integer","format":"int64","description":"Value of taxes, duties associated with the transaction, in local currency"},"ACCRUED_INTEREST_LOCAL":{"type":"integer","format":"int64","description":"The value of the accrued interest when a fixed income investment is transacted, in local currency"}}},"PrivateFundGranularityDetails":{"type":"object","description":"Provides a breakdown of MOVEMENT_LOCAL for Capital Calls, Distributions and Equalisations","properties":{"PE_DEDUCTIBLE":{"type":"integer","format":"int64","description":"The portion of a capital call which reduces the remaining commitment or the portion of an equalisation which increases the remaining commitment, in local currency"},"PE_NON_DEDUCTIBLE":{"type":"integer","format":"int64","description":"The portion of a capital call which does not reduce the remaining commitment or the portion of an equalisation which does not increase the remaining commitment, in local currency"},"PE_INVESTMENT":{"type":"integer","format":"int64","description":"The portion of a capital call which goes towards purchasing portfolio companies or the portion of an equalisation which refunds for amounts previously paid towards purchasing portfolio companies, in local currency"},"PE_MANAGEMENT_FEES":{"type":"integer","format":"int64","description":"The portion of a capital call which is used for covering management fees or the portion an equalisation representing the pro-rata rebate for previously paid management fees, in local currency"},"PE_FUND_EXPENSES":{"type":"integer","format":"int64","description":"The portion of a capital call which is used for covering fund expenses or the portion of an equalisation representing the pro-rata rebate for previously paid fund expenses, in local currency"},"PE_OTHER_FEES":{"type":"integer","format":"int64","description":"The portion of a capital call which is used for covering other fund fees or the portion an equalisation representing the pro-rata rebate for previously paid other fund fees, in local currency"},"PE_EQUALISATION":{"type":"integer","format":"int64","description":"The portion of a capital call which is a catch-up equalisation payment or the portion of an equalisation which is received following catch-up equalisation by other investors, where above granularity is not provided, in local currency"},"PE_RECALLABLE":{"type":"integer","format":"int64","description":"The portion of the distribution that is recallable, in local currency"},"PE_NON_RECALLABLE":{"type":"integer","format":"int64","description":"The portion of the distribution that is non-recallable, in local currency"},"PE_CAPITAL_RETURN":{"type":"integer","format":"int64","description":"The portion of the distribution that represents a return of capital to the LP, in local currency"},"PE_CAPITAL_GAIN":{"type":"integer","format":"int64","description":"The portion of the distribution that is a capital gain (this can be negative, indicating a capital loss), in local currency"},"PE_INCOME":{"type":"integer","format":"int64","description":"The portion of the distribution that represents income, in local currency"}}},"PaginationDetails":{"type":"object","description":"Pagination data returned by the API","properties":{"nextPageToken":{"type":["string","null"],"description":"Token used to fetch the next page of result. This token is opaque and must be used as is"},"hasNextPage":{"type":["boolean","null"],"description":"A boolean indicating if there is a next page to this resource"},"pageSize":{"type":["integer","null"],"format":"int64","description":"Number of elements in the current page. This API is not providing the total number of elements for this resource."}},"required":["hasNextPage","pageSize"]},"MetadataDetails":{"type":"object","description":"Metadata returned by the API","properties":{"requestId":{"type":["string","null"],"format":"uuid","description":"Id of the request"},"responseType":{"type":["string","null"],"description":"Format of the request"}},"required":["requestId"]}}}}
```


# Models

## The AnalyticsDataBody object

```json
{"openapi":"3.1.0","info":{"title":"gateway-api","version":"0.0.1"},"components":{"schemas":{"AnalyticsDataBody":{"type":"object","description":"Request body for analytics data","properties":{"fields":{"type":"array","description":"List of analytics fields to request","items":{"$ref":"#/components/schemas/AnalyticsField"}},"ids":{"type":"array","description":"List of entity ids to fetch","items":{"type":"integer","format":"int64"}},"consolidationType":{"type":"string","default":"DIRECT","description":"DIRECT returns the entity's directly held assets. LOOK_THROUGH includes transactions of underlying entities linked through configured look-through relationships. If not provided, DIRECT is used","enum":["DIRECT","LOOK_THROUGH"]},"since":{"type":"string","format":"date","default":"2000-01-01","description":"Start date for the data to fetch"},"until":{"type":["string","null"],"format":"date","description":"End date for the data to fetch. If not provided, latest published date is used"},"sort":{"oneOf":[{"$ref":"#/components/schemas/AnalyticsSort"},{"type":"null"}]}},"required":["consolidationType","fields","ids","since"]},"AnalyticsField":{"type":"object","description":"List of fields to request","properties":{"code":{"type":"string","description":"Field code"},"name":{"type":["string","null"],"description":"Field name. Has the same value as code by default"},"parameters":{"type":["object","null"],"additionalProperties":{},"description":"Additional parameters for the field"}},"required":["code"]},"AnalyticsSort":{"type":"object","properties":{"name":{"type":"string","description":"Field code used for sorting. Default value depends on the data being requested: POSITION.DATE, TRANSACTION.DATE, ENTITY.ID or ASSET.ID"},"ascending":{"type":"boolean","default":true,"description":"True if sorting by the chosen field in ascending order, false if descending"}},"required":["ascending","name"]}}}}
```

## The AnalyticsField object

```json
{"openapi":"3.1.0","info":{"title":"gateway-api","version":"0.0.1"},"components":{"schemas":{"AnalyticsField":{"type":"object","description":"List of fields to request","properties":{"code":{"type":"string","description":"Field code"},"name":{"type":["string","null"],"description":"Field name. Has the same value as code by default"},"parameters":{"type":["object","null"],"additionalProperties":{},"description":"Additional parameters for the field"}},"required":["code"]}}}}
```

## The AnalyticsSort object

```json
{"openapi":"3.1.0","info":{"title":"gateway-api","version":"0.0.1"},"components":{"schemas":{"AnalyticsSort":{"type":"object","properties":{"name":{"type":"string","description":"Field code used for sorting. Default value depends on the data being requested: POSITION.DATE, TRANSACTION.DATE, ENTITY.ID or ASSET.ID"},"ascending":{"type":"boolean","default":true,"description":"True if sorting by the chosen field in ascending order, false if descending"}},"required":["ascending","name"]}}}}
```

## The AnalyticsDetails object

```json
{"openapi":"3.1.0","info":{"title":"gateway-api","version":"0.0.1"},"components":{"schemas":{"AnalyticsDetails":{"type":"object","description":"Analytics data details returned by the API","properties":{"ENTITY.ID":{"type":"integer","format":"int64","description":"Unique identifier of the entity the request was made for. This identifier is created by Sesame"},"ENTITY.NAME":{"type":"string","description":"Name of the entity the request was made for"},"ENTITY.TYPE":{"type":"string","description":"Type of the entity","enum":["FUND","HOLDING_COMPANY","TRUST","PORTFOLIO","PERSONAL","BASKET","BENCHMARK","GROUPING","CONSOLIDATION"]},"ENTITY.PORTFOLIO_PARENT_ENTITY_ID":{"type":"integer","format":"int64","description":"Parent entity ID of a portfolio entity"},"ENTITY.REPORTING_CURRENCY":{"type":"string","description":"Reporting currency of the entity, as defined in Sesame"},"ASSET.NAME":{"type":"string","description":"Name of the investment being transacted"},"ASSET.ID":{"type":"integer","format":"int64","description":"ID of the investment being transacted. This identifier is created by Sesame"},"ASSET.TYPE":{"type":"string","description":"Type of the investment being transacted"},"TRANSACTION.SUBTYPE":{"type":"string","description":"Subtype of the transaction. For a full list of supported subtypes, see the list in `FAQ and Troubleshooting`"},"TRANSACTION.CUSTODIAN_TRANSACTION_ID":{"type":"string","description":"Unique identifier of the transaction, as provided in the custodial feed. When not provided by the custodian, a unique transaction Id is generated by Sesame"},"TRANSACTION.DESCRIPTION":{"type":"string","description":"Description of the transaction, as provided in the custodial feed. When not provided by the custodian, a description is generated by Sesame"},"TRANSACTION.DATE":{"type":"string","format":"date","description":"Date of the transaction."},"TRANSACTION.SETTLEMENT_DATE":{"type":"string","format":"date","description":"Settlement date of the transaction."},"TRANSACTION.MOVEMENT_LOCAL":{"type":"number","description":"Net transaction value, in local currency"},"TRANSACTION.GROSS_MOVEMENT_LOCAL":{"type":"number","description":"Gross transaction value, in local currency"},"TRANSACTION.QUANTITY":{"type":"number","description":"Units of the investment transacted"},"TRANSACTION.NET_UNIT_PRICE_LOCAL":{"type":"number","description":"Net unit price of the transaction, in local currency"},"TRANSACTION.GROSS_UNIT_PRICE_LOCAL":{"type":"number","description":"Gross unit price of the transaction, in local currency"},"TRANSACTION.LOCAL_CURRENCY":{"type":"string","description":"Currency that the transaction is denominated in"},"TRANSACTION.LOCAL_CURRENCY2":{"type":"string","description":"The local currency of the incoming cash where the transaction is an internal FX transaction"},"TRANSACTION.MOVEMENT_REPORTING":{"type":"number","description":"Net transaction value, in reporting currency"},"TRANSACTION.GROSS_MOVEMENT_REPORTING":{"type":"number","description":"Gross transaction value, in reporting currency"},"TRANSACTION.GRANULARITY":{"$ref":"#/components/schemas/TransactionGranularityDetails","description":"Granularity of the transaction."},"TRANSACTION.PRIVATE_FUND_GRANULARITY":{"$ref":"#/components/schemas/PrivateFundGranularityDetails","description":"Private fund granularity of the transaction."},"TRANSACTION.REVERSAL":{"type":"boolean","description":"A boolean indicating whether this transaction is reversing a previous transaction"},"TRANSACTION.CUSTODIAN_REVERSED_TRANSACTION_ID":{"type":"string","description":"Where available, the CUSTODIAN_TRANSACTION_ID of the transaction which this transaction is reversing. Only seen for transactions where reversal = `true`. This field helps users connect reversal transactions and the transactions that they are reversing"},"POSITION.DATE":{"type":"string","format":"date","description":"The date of the position in the investment"},"POSITION.QUANTITY":{"type":"number","description":"Quantity of units of the investment held"},"POSITION.MARKET_VALUE_LOCAL":{"type":"number","description":"Market value of the holding, in local currency"},"POSITION.UNIT_PRICE_LOCAL":{"type":"number","description":"Price per unit of the investment held, in local currency"},"POSITION.LOCAL_CURRENCY":{"type":"string","description":"Currency that the position is denominated in"},"POSITION.COST_VALUE_REPORTING":{"type":"number","description":"Total cost value of the holding, in reporting currency"},"POSITION.AVERAGE_UNIT_COST_PRICE_LOCAL":{"type":"number","description":"Average cost per unit of the investment held, in local currency"},"POSITION.VWAP":{"type":"number","description":"Volume-weighted average price"},"ENTITY.RETURN":{"type":"number","description":"Total gain or loss generated by an investment entity over a specific period, expressed as a percentage of the portfolio's value.\nNeeds the period parameter (possible values are: \"DTD\", \"FYTD\", \"ITD\", \"LAST\", \"MTD\", \"QTD\", \"WTD\", \"YTD\")\nOptional parameters are:\n- methodology (possible values are: \"SIMPLE\", \"COMPOUNDED\", \"STDEV\", \"AVG\")\n- entity (possible values are: \"ENTITY\", \"DEFAULT_BENCHMARK\")\n- frequency (possible values are: \"DAILY\", \"WEEKLY\", \"MONTHLY\", \"YEARLY\")\n- start_date: From the given date (\"YYYY-MM-DD\")\n- end_date: To the given date (\"YYYY-MM-DD\")"},"POSITION.RETURN":{"type":"number","description":"The position return is calculated by compounding daily returns from t0 to t, using the daily PnL or the position at t in reporting currency, the previous days market value notional of the position in reporting currency, and the sum of transactions for the position on t. For Trading Pnl (and therefore FX Pnl) we use FX rate as of t when transforming daily PnL from t0 to t into reporting currency.\nNeeds the period parameter (possible values are: \"DTD\", \"FYTD\", \"ITD\", \"LAST\", \"MTD\", \"QTD\", \"WTD\", \"YTD\")\nOptional parameters are:\n- frequency (possible values are: \"DAILY\", \"WEEKLY\", \"MONTHLY\", \"YEARLY\")\n- start_date: From the given date (\"YYYY-MM-DD\")\n- end_date: To the given date (\"YYYY-MM-DD\")"},"ENTITY.EXPOSURE":{"type":"number","description":"Total notional exposure of the entity, expressed in %AUM.\nNeeds the kind parameter (possible values are: \"LONG\", \"SHORT\", \"NET\", \"GROSS\")\nOptional parameters are:\n- _format (possible values are: \"AMOUNT\", \"PERCENTAGE\", \"BASIS_POINTS\")\n- exposure_aggregation (possible values are: \"SUM\", \"MAX\", \"MIN\", \"COUNT\")"},"POSITION.EXPOSURE":{"type":"number","description":"Total notional exposure of the position, expressed in %AUM.\nOptional parameters are:\n- kind (possible values are: \"LONG\", \"SHORT\", \"NET\", \"GROSS\")"},"POSITION.AGGREGATED_PNL":{"type":"number","description":"Aggregated pnl value of the position.\nNeeds the period parameter (possible values are: \"DTD\", \"FYTD\", \"ITD\", \"LAST\", \"MTD\", \"QTD\", \"WTD\", \"YTD\")\nOptional parameters are:\n- _format (possible values are: \"AMOUNT\", \"PERCENTAGE\", \"BASIS_POINTS\")\n- aggregation (possible values are: \"SUM\", \"MAX\", \"MIN\", \"AVG\", \"PROD\")\n- frequency (possible values are: \"DAILY\", \"WEEKLY\", \"MONTHLY\", \"YEARLY\")\n- _types (possible values in the array are: \"TOTAL\", \"INCOME\", \"FX\", \"TRADING\", \"REALISED\", \"UNREALISED\")\n- start_date: From the given date (\"YYYY-MM-DD\")\n- end_date: To the given date (\"YYYY-MM-DD\")"},"ENTITY.PNL":{"type":"number","description":"Aggregation of the DTD PnLs of an entity for a given period of time.\nNeeds the period parameter (possible values are: \"DTD\", \"FYTD\", \"ITD\", \"LAST\", \"MTD\", \"QTD\", \"WTD\", \"YTD\")\nOptional parameters are:\n- _format (possible values are: \"AMOUNT\", \"PERCENTAGE\", \"BASIS_POINTS\")\n- aggregation (possible values are: \"SUM\", \"MAX\", \"MIN\", \"AVG\", \"PROD\")\n- frequency (possible values are: \"DAILY\", \"WEEKLY\", \"MONTHLY\", \"YEARLY\")\n- _types (possible values in the array are: \"TOTAL\", \"INCOME\", \"FX\", \"TRADING\", \"REALISED\", \"UNREALISED\")\n- methodology (possible values are: \"SIMPLE\", \"CARINO\")\n- start_date: From the given date (\"YYYY-MM-DD\")\n- end_date: To the given date (\"YYYY-MM-DD\")"},"POSITION.MARKET_VALUE_NOTIONAL_REPORTING":{"type":"number","description":"Market value of the position in reporting currency."},"ENTITY.CUMULATIVE_PERFORMANCE":{"type":"number","description":"Cumulative performance value of the entity."},"ASSET.CUMULATIVE_PERFORMANCE":{"type":"number","description":"Cumulative performance value of the asset.\nNeeds the period parameter (possible values are: \"DTD\", \"FYTD\", \"ITD\", \"LAST\", \"MTD\", \"QTD\", \"WTD\", \"YTD\")"},"ENTITY.RISK":{"type":"number","description":"Risk value of the entity.\nNeeds the risk_measure_id parameter (integer), which can be found at docs.landytech.com"},"POSITION.RISK":{"type":"number","description":"Risk value of the position.\nNeeds the risk_measure_id parameter (integer), which can be found at docs.landytech.com"}},"required":["ASSET.CUMULATIVE_PERFORMANCE","ASSET.ID","ASSET.NAME","ASSET.TYPE","ENTITY.CUMULATIVE_PERFORMANCE","ENTITY.EXPOSURE","ENTITY.ID","ENTITY.NAME","ENTITY.PNL","ENTITY.REPORTING_CURRENCY","ENTITY.RETURN","ENTITY.RISK","ENTITY.TYPE","POSITION.AGGREGATED_PNL","POSITION.DATE","POSITION.EXPOSURE","POSITION.LOCAL_CURRENCY","POSITION.MARKET_VALUE_LOCAL","POSITION.MARKET_VALUE_NOTIONAL_REPORTING","POSITION.QUANTITY","POSITION.RETURN","POSITION.RISK","POSITION.UNIT_PRICE_LOCAL","TRANSACTION.CUSTODIAN_TRANSACTION_ID","TRANSACTION.DATE","TRANSACTION.DESCRIPTION","TRANSACTION.LOCAL_CURRENCY","TRANSACTION.MOVEMENT_LOCAL","TRANSACTION.QUANTITY","TRANSACTION.REVERSAL","TRANSACTION.SUBTYPE"]},"TransactionGranularityDetails":{"type":"object","description":"A breakdown of the difference between MOVEMENT_LOCAL and GROSS_MOVEMENT_LOCAL","properties":{"COMMISSIONS_LOCAL":{"type":"integer","format":"int64","description":"Value of commissions associated with the transaction, in local currency"},"STAMP_DUTY_LOCAL":{"type":"integer","format":"int64","description":"Value of stamp duties associated with the transaction, in local currency"},"WITHHOLDING_TAX_LOCAL":{"type":"integer","format":"int64","description":"Value of withholdings tax associated with the transaction, in local currency"},"COLLECTION_CHARGE_LOCAL":{"type":"integer","format":"int64","description":"Value of collection charges associated with the transaction, in local currency"},"TAX_LOCAL":{"type":"integer","format":"int64","description":"Value of taxes, duties associated with the transaction, in local currency"},"ACCRUED_INTEREST_LOCAL":{"type":"integer","format":"int64","description":"The value of the accrued interest when a fixed income investment is transacted, in local currency"}}},"PrivateFundGranularityDetails":{"type":"object","description":"Provides a breakdown of MOVEMENT_LOCAL for Capital Calls, Distributions and Equalisations","properties":{"PE_DEDUCTIBLE":{"type":"integer","format":"int64","description":"The portion of a capital call which reduces the remaining commitment or the portion of an equalisation which increases the remaining commitment, in local currency"},"PE_NON_DEDUCTIBLE":{"type":"integer","format":"int64","description":"The portion of a capital call which does not reduce the remaining commitment or the portion of an equalisation which does not increase the remaining commitment, in local currency"},"PE_INVESTMENT":{"type":"integer","format":"int64","description":"The portion of a capital call which goes towards purchasing portfolio companies or the portion of an equalisation which refunds for amounts previously paid towards purchasing portfolio companies, in local currency"},"PE_MANAGEMENT_FEES":{"type":"integer","format":"int64","description":"The portion of a capital call which is used for covering management fees or the portion an equalisation representing the pro-rata rebate for previously paid management fees, in local currency"},"PE_FUND_EXPENSES":{"type":"integer","format":"int64","description":"The portion of a capital call which is used for covering fund expenses or the portion of an equalisation representing the pro-rata rebate for previously paid fund expenses, in local currency"},"PE_OTHER_FEES":{"type":"integer","format":"int64","description":"The portion of a capital call which is used for covering other fund fees or the portion an equalisation representing the pro-rata rebate for previously paid other fund fees, in local currency"},"PE_EQUALISATION":{"type":"integer","format":"int64","description":"The portion of a capital call which is a catch-up equalisation payment or the portion of an equalisation which is received following catch-up equalisation by other investors, where above granularity is not provided, in local currency"},"PE_RECALLABLE":{"type":"integer","format":"int64","description":"The portion of the distribution that is recallable, in local currency"},"PE_NON_RECALLABLE":{"type":"integer","format":"int64","description":"The portion of the distribution that is non-recallable, in local currency"},"PE_CAPITAL_RETURN":{"type":"integer","format":"int64","description":"The portion of the distribution that represents a return of capital to the LP, in local currency"},"PE_CAPITAL_GAIN":{"type":"integer","format":"int64","description":"The portion of the distribution that is a capital gain (this can be negative, indicating a capital loss), in local currency"},"PE_INCOME":{"type":"integer","format":"int64","description":"The portion of the distribution that represents income, in local currency"}}}}}}
```

## The AnalyticsResponse object

```json
{"openapi":"3.1.0","info":{"title":"gateway-api","version":"0.0.1"},"components":{"schemas":{"AnalyticsResponse":{"type":"object","description":"Analytics data returned by the API","properties":{"data":{"oneOf":[{"$ref":"#/components/schemas/AnalyticsDetails"},{"type":"null"}]},"pagination":{"oneOf":[{"$ref":"#/components/schemas/PaginationDetails"},{"type":"null"}]},"meta":{"oneOf":[{"$ref":"#/components/schemas/MetadataDetails"},{"type":"null"}]}}},"AnalyticsDetails":{"type":"object","description":"Analytics data details returned by the API","properties":{"ENTITY.ID":{"type":"integer","format":"int64","description":"Unique identifier of the entity the request was made for. This identifier is created by Sesame"},"ENTITY.NAME":{"type":"string","description":"Name of the entity the request was made for"},"ENTITY.TYPE":{"type":"string","description":"Type of the entity","enum":["FUND","HOLDING_COMPANY","TRUST","PORTFOLIO","PERSONAL","BASKET","BENCHMARK","GROUPING","CONSOLIDATION"]},"ENTITY.PORTFOLIO_PARENT_ENTITY_ID":{"type":"integer","format":"int64","description":"Parent entity ID of a portfolio entity"},"ENTITY.REPORTING_CURRENCY":{"type":"string","description":"Reporting currency of the entity, as defined in Sesame"},"ASSET.NAME":{"type":"string","description":"Name of the investment being transacted"},"ASSET.ID":{"type":"integer","format":"int64","description":"ID of the investment being transacted. This identifier is created by Sesame"},"ASSET.TYPE":{"type":"string","description":"Type of the investment being transacted"},"TRANSACTION.SUBTYPE":{"type":"string","description":"Subtype of the transaction. For a full list of supported subtypes, see the list in `FAQ and Troubleshooting`"},"TRANSACTION.CUSTODIAN_TRANSACTION_ID":{"type":"string","description":"Unique identifier of the transaction, as provided in the custodial feed. When not provided by the custodian, a unique transaction Id is generated by Sesame"},"TRANSACTION.DESCRIPTION":{"type":"string","description":"Description of the transaction, as provided in the custodial feed. When not provided by the custodian, a description is generated by Sesame"},"TRANSACTION.DATE":{"type":"string","format":"date","description":"Date of the transaction."},"TRANSACTION.SETTLEMENT_DATE":{"type":"string","format":"date","description":"Settlement date of the transaction."},"TRANSACTION.MOVEMENT_LOCAL":{"type":"number","description":"Net transaction value, in local currency"},"TRANSACTION.GROSS_MOVEMENT_LOCAL":{"type":"number","description":"Gross transaction value, in local currency"},"TRANSACTION.QUANTITY":{"type":"number","description":"Units of the investment transacted"},"TRANSACTION.NET_UNIT_PRICE_LOCAL":{"type":"number","description":"Net unit price of the transaction, in local currency"},"TRANSACTION.GROSS_UNIT_PRICE_LOCAL":{"type":"number","description":"Gross unit price of the transaction, in local currency"},"TRANSACTION.LOCAL_CURRENCY":{"type":"string","description":"Currency that the transaction is denominated in"},"TRANSACTION.LOCAL_CURRENCY2":{"type":"string","description":"The local currency of the incoming cash where the transaction is an internal FX transaction"},"TRANSACTION.MOVEMENT_REPORTING":{"type":"number","description":"Net transaction value, in reporting currency"},"TRANSACTION.GROSS_MOVEMENT_REPORTING":{"type":"number","description":"Gross transaction value, in reporting currency"},"TRANSACTION.GRANULARITY":{"$ref":"#/components/schemas/TransactionGranularityDetails","description":"Granularity of the transaction."},"TRANSACTION.PRIVATE_FUND_GRANULARITY":{"$ref":"#/components/schemas/PrivateFundGranularityDetails","description":"Private fund granularity of the transaction."},"TRANSACTION.REVERSAL":{"type":"boolean","description":"A boolean indicating whether this transaction is reversing a previous transaction"},"TRANSACTION.CUSTODIAN_REVERSED_TRANSACTION_ID":{"type":"string","description":"Where available, the CUSTODIAN_TRANSACTION_ID of the transaction which this transaction is reversing. Only seen for transactions where reversal = `true`. This field helps users connect reversal transactions and the transactions that they are reversing"},"POSITION.DATE":{"type":"string","format":"date","description":"The date of the position in the investment"},"POSITION.QUANTITY":{"type":"number","description":"Quantity of units of the investment held"},"POSITION.MARKET_VALUE_LOCAL":{"type":"number","description":"Market value of the holding, in local currency"},"POSITION.UNIT_PRICE_LOCAL":{"type":"number","description":"Price per unit of the investment held, in local currency"},"POSITION.LOCAL_CURRENCY":{"type":"string","description":"Currency that the position is denominated in"},"POSITION.COST_VALUE_REPORTING":{"type":"number","description":"Total cost value of the holding, in reporting currency"},"POSITION.AVERAGE_UNIT_COST_PRICE_LOCAL":{"type":"number","description":"Average cost per unit of the investment held, in local currency"},"POSITION.VWAP":{"type":"number","description":"Volume-weighted average price"},"ENTITY.RETURN":{"type":"number","description":"Total gain or loss generated by an investment entity over a specific period, expressed as a percentage of the portfolio's value.\nNeeds the period parameter (possible values are: \"DTD\", \"FYTD\", \"ITD\", \"LAST\", \"MTD\", \"QTD\", \"WTD\", \"YTD\")\nOptional parameters are:\n- methodology (possible values are: \"SIMPLE\", \"COMPOUNDED\", \"STDEV\", \"AVG\")\n- entity (possible values are: \"ENTITY\", \"DEFAULT_BENCHMARK\")\n- frequency (possible values are: \"DAILY\", \"WEEKLY\", \"MONTHLY\", \"YEARLY\")\n- start_date: From the given date (\"YYYY-MM-DD\")\n- end_date: To the given date (\"YYYY-MM-DD\")"},"POSITION.RETURN":{"type":"number","description":"The position return is calculated by compounding daily returns from t0 to t, using the daily PnL or the position at t in reporting currency, the previous days market value notional of the position in reporting currency, and the sum of transactions for the position on t. For Trading Pnl (and therefore FX Pnl) we use FX rate as of t when transforming daily PnL from t0 to t into reporting currency.\nNeeds the period parameter (possible values are: \"DTD\", \"FYTD\", \"ITD\", \"LAST\", \"MTD\", \"QTD\", \"WTD\", \"YTD\")\nOptional parameters are:\n- frequency (possible values are: \"DAILY\", \"WEEKLY\", \"MONTHLY\", \"YEARLY\")\n- start_date: From the given date (\"YYYY-MM-DD\")\n- end_date: To the given date (\"YYYY-MM-DD\")"},"ENTITY.EXPOSURE":{"type":"number","description":"Total notional exposure of the entity, expressed in %AUM.\nNeeds the kind parameter (possible values are: \"LONG\", \"SHORT\", \"NET\", \"GROSS\")\nOptional parameters are:\n- _format (possible values are: \"AMOUNT\", \"PERCENTAGE\", \"BASIS_POINTS\")\n- exposure_aggregation (possible values are: \"SUM\", \"MAX\", \"MIN\", \"COUNT\")"},"POSITION.EXPOSURE":{"type":"number","description":"Total notional exposure of the position, expressed in %AUM.\nOptional parameters are:\n- kind (possible values are: \"LONG\", \"SHORT\", \"NET\", \"GROSS\")"},"POSITION.AGGREGATED_PNL":{"type":"number","description":"Aggregated pnl value of the position.\nNeeds the period parameter (possible values are: \"DTD\", \"FYTD\", \"ITD\", \"LAST\", \"MTD\", \"QTD\", \"WTD\", \"YTD\")\nOptional parameters are:\n- _format (possible values are: \"AMOUNT\", \"PERCENTAGE\", \"BASIS_POINTS\")\n- aggregation (possible values are: \"SUM\", \"MAX\", \"MIN\", \"AVG\", \"PROD\")\n- frequency (possible values are: \"DAILY\", \"WEEKLY\", \"MONTHLY\", \"YEARLY\")\n- _types (possible values in the array are: \"TOTAL\", \"INCOME\", \"FX\", \"TRADING\", \"REALISED\", \"UNREALISED\")\n- start_date: From the given date (\"YYYY-MM-DD\")\n- end_date: To the given date (\"YYYY-MM-DD\")"},"ENTITY.PNL":{"type":"number","description":"Aggregation of the DTD PnLs of an entity for a given period of time.\nNeeds the period parameter (possible values are: \"DTD\", \"FYTD\", \"ITD\", \"LAST\", \"MTD\", \"QTD\", \"WTD\", \"YTD\")\nOptional parameters are:\n- _format (possible values are: \"AMOUNT\", \"PERCENTAGE\", \"BASIS_POINTS\")\n- aggregation (possible values are: \"SUM\", \"MAX\", \"MIN\", \"AVG\", \"PROD\")\n- frequency (possible values are: \"DAILY\", \"WEEKLY\", \"MONTHLY\", \"YEARLY\")\n- _types (possible values in the array are: \"TOTAL\", \"INCOME\", \"FX\", \"TRADING\", \"REALISED\", \"UNREALISED\")\n- methodology (possible values are: \"SIMPLE\", \"CARINO\")\n- start_date: From the given date (\"YYYY-MM-DD\")\n- end_date: To the given date (\"YYYY-MM-DD\")"},"POSITION.MARKET_VALUE_NOTIONAL_REPORTING":{"type":"number","description":"Market value of the position in reporting currency."},"ENTITY.CUMULATIVE_PERFORMANCE":{"type":"number","description":"Cumulative performance value of the entity."},"ASSET.CUMULATIVE_PERFORMANCE":{"type":"number","description":"Cumulative performance value of the asset.\nNeeds the period parameter (possible values are: \"DTD\", \"FYTD\", \"ITD\", \"LAST\", \"MTD\", \"QTD\", \"WTD\", \"YTD\")"},"ENTITY.RISK":{"type":"number","description":"Risk value of the entity.\nNeeds the risk_measure_id parameter (integer), which can be found at docs.landytech.com"},"POSITION.RISK":{"type":"number","description":"Risk value of the position.\nNeeds the risk_measure_id parameter (integer), which can be found at docs.landytech.com"}},"required":["ASSET.CUMULATIVE_PERFORMANCE","ASSET.ID","ASSET.NAME","ASSET.TYPE","ENTITY.CUMULATIVE_PERFORMANCE","ENTITY.EXPOSURE","ENTITY.ID","ENTITY.NAME","ENTITY.PNL","ENTITY.REPORTING_CURRENCY","ENTITY.RETURN","ENTITY.RISK","ENTITY.TYPE","POSITION.AGGREGATED_PNL","POSITION.DATE","POSITION.EXPOSURE","POSITION.LOCAL_CURRENCY","POSITION.MARKET_VALUE_LOCAL","POSITION.MARKET_VALUE_NOTIONAL_REPORTING","POSITION.QUANTITY","POSITION.RETURN","POSITION.RISK","POSITION.UNIT_PRICE_LOCAL","TRANSACTION.CUSTODIAN_TRANSACTION_ID","TRANSACTION.DATE","TRANSACTION.DESCRIPTION","TRANSACTION.LOCAL_CURRENCY","TRANSACTION.MOVEMENT_LOCAL","TRANSACTION.QUANTITY","TRANSACTION.REVERSAL","TRANSACTION.SUBTYPE"]},"TransactionGranularityDetails":{"type":"object","description":"A breakdown of the difference between MOVEMENT_LOCAL and GROSS_MOVEMENT_LOCAL","properties":{"COMMISSIONS_LOCAL":{"type":"integer","format":"int64","description":"Value of commissions associated with the transaction, in local currency"},"STAMP_DUTY_LOCAL":{"type":"integer","format":"int64","description":"Value of stamp duties associated with the transaction, in local currency"},"WITHHOLDING_TAX_LOCAL":{"type":"integer","format":"int64","description":"Value of withholdings tax associated with the transaction, in local currency"},"COLLECTION_CHARGE_LOCAL":{"type":"integer","format":"int64","description":"Value of collection charges associated with the transaction, in local currency"},"TAX_LOCAL":{"type":"integer","format":"int64","description":"Value of taxes, duties associated with the transaction, in local currency"},"ACCRUED_INTEREST_LOCAL":{"type":"integer","format":"int64","description":"The value of the accrued interest when a fixed income investment is transacted, in local currency"}}},"PrivateFundGranularityDetails":{"type":"object","description":"Provides a breakdown of MOVEMENT_LOCAL for Capital Calls, Distributions and Equalisations","properties":{"PE_DEDUCTIBLE":{"type":"integer","format":"int64","description":"The portion of a capital call which reduces the remaining commitment or the portion of an equalisation which increases the remaining commitment, in local currency"},"PE_NON_DEDUCTIBLE":{"type":"integer","format":"int64","description":"The portion of a capital call which does not reduce the remaining commitment or the portion of an equalisation which does not increase the remaining commitment, in local currency"},"PE_INVESTMENT":{"type":"integer","format":"int64","description":"The portion of a capital call which goes towards purchasing portfolio companies or the portion of an equalisation which refunds for amounts previously paid towards purchasing portfolio companies, in local currency"},"PE_MANAGEMENT_FEES":{"type":"integer","format":"int64","description":"The portion of a capital call which is used for covering management fees or the portion an equalisation representing the pro-rata rebate for previously paid management fees, in local currency"},"PE_FUND_EXPENSES":{"type":"integer","format":"int64","description":"The portion of a capital call which is used for covering fund expenses or the portion of an equalisation representing the pro-rata rebate for previously paid fund expenses, in local currency"},"PE_OTHER_FEES":{"type":"integer","format":"int64","description":"The portion of a capital call which is used for covering other fund fees or the portion an equalisation representing the pro-rata rebate for previously paid other fund fees, in local currency"},"PE_EQUALISATION":{"type":"integer","format":"int64","description":"The portion of a capital call which is a catch-up equalisation payment or the portion of an equalisation which is received following catch-up equalisation by other investors, where above granularity is not provided, in local currency"},"PE_RECALLABLE":{"type":"integer","format":"int64","description":"The portion of the distribution that is recallable, in local currency"},"PE_NON_RECALLABLE":{"type":"integer","format":"int64","description":"The portion of the distribution that is non-recallable, in local currency"},"PE_CAPITAL_RETURN":{"type":"integer","format":"int64","description":"The portion of the distribution that represents a return of capital to the LP, in local currency"},"PE_CAPITAL_GAIN":{"type":"integer","format":"int64","description":"The portion of the distribution that is a capital gain (this can be negative, indicating a capital loss), in local currency"},"PE_INCOME":{"type":"integer","format":"int64","description":"The portion of the distribution that represents income, in local currency"}}},"PaginationDetails":{"type":"object","description":"Pagination data returned by the API","properties":{"nextPageToken":{"type":["string","null"],"description":"Token used to fetch the next page of result. This token is opaque and must be used as is"},"hasNextPage":{"type":["boolean","null"],"description":"A boolean indicating if there is a next page to this resource"},"pageSize":{"type":["integer","null"],"format":"int64","description":"Number of elements in the current page. This API is not providing the total number of elements for this resource."}},"required":["hasNextPage","pageSize"]},"MetadataDetails":{"type":"object","description":"Metadata returned by the API","properties":{"requestId":{"type":["string","null"],"format":"uuid","description":"Id of the request"},"responseType":{"type":["string","null"],"description":"Format of the request"}},"required":["requestId"]}}}}
```

## The MetadataDetails object

```json
{"openapi":"3.1.0","info":{"title":"gateway-api","version":"0.0.1"},"components":{"schemas":{"MetadataDetails":{"type":"object","description":"Metadata returned by the API","properties":{"requestId":{"type":["string","null"],"format":"uuid","description":"Id of the request"},"responseType":{"type":["string","null"],"description":"Format of the request"}},"required":["requestId"]}}}}
```

## The PaginationDetails object

```json
{"openapi":"3.1.0","info":{"title":"gateway-api","version":"0.0.1"},"components":{"schemas":{"PaginationDetails":{"type":"object","description":"Pagination data returned by the API","properties":{"nextPageToken":{"type":["string","null"],"description":"Token used to fetch the next page of result. This token is opaque and must be used as is"},"hasNextPage":{"type":["boolean","null"],"description":"A boolean indicating if there is a next page to this resource"},"pageSize":{"type":["integer","null"],"format":"int64","description":"Number of elements in the current page. This API is not providing the total number of elements for this resource."}},"required":["hasNextPage","pageSize"]}}}}
```

## The PrivateFundGranularityDetails object

```json
{"openapi":"3.1.0","info":{"title":"gateway-api","version":"0.0.1"},"components":{"schemas":{"PrivateFundGranularityDetails":{"type":"object","description":"Provides a breakdown of MOVEMENT_LOCAL for Capital Calls, Distributions and Equalisations","properties":{"PE_DEDUCTIBLE":{"type":"integer","format":"int64","description":"The portion of a capital call which reduces the remaining commitment or the portion of an equalisation which increases the remaining commitment, in local currency"},"PE_NON_DEDUCTIBLE":{"type":"integer","format":"int64","description":"The portion of a capital call which does not reduce the remaining commitment or the portion of an equalisation which does not increase the remaining commitment, in local currency"},"PE_INVESTMENT":{"type":"integer","format":"int64","description":"The portion of a capital call which goes towards purchasing portfolio companies or the portion of an equalisation which refunds for amounts previously paid towards purchasing portfolio companies, in local currency"},"PE_MANAGEMENT_FEES":{"type":"integer","format":"int64","description":"The portion of a capital call which is used for covering management fees or the portion an equalisation representing the pro-rata rebate for previously paid management fees, in local currency"},"PE_FUND_EXPENSES":{"type":"integer","format":"int64","description":"The portion of a capital call which is used for covering fund expenses or the portion of an equalisation representing the pro-rata rebate for previously paid fund expenses, in local currency"},"PE_OTHER_FEES":{"type":"integer","format":"int64","description":"The portion of a capital call which is used for covering other fund fees or the portion an equalisation representing the pro-rata rebate for previously paid other fund fees, in local currency"},"PE_EQUALISATION":{"type":"integer","format":"int64","description":"The portion of a capital call which is a catch-up equalisation payment or the portion of an equalisation which is received following catch-up equalisation by other investors, where above granularity is not provided, in local currency"},"PE_RECALLABLE":{"type":"integer","format":"int64","description":"The portion of the distribution that is recallable, in local currency"},"PE_NON_RECALLABLE":{"type":"integer","format":"int64","description":"The portion of the distribution that is non-recallable, in local currency"},"PE_CAPITAL_RETURN":{"type":"integer","format":"int64","description":"The portion of the distribution that represents a return of capital to the LP, in local currency"},"PE_CAPITAL_GAIN":{"type":"integer","format":"int64","description":"The portion of the distribution that is a capital gain (this can be negative, indicating a capital loss), in local currency"},"PE_INCOME":{"type":"integer","format":"int64","description":"The portion of the distribution that represents income, in local currency"}}}}}}
```

## The TransactionGranularityDetails object

```json
{"openapi":"3.1.0","info":{"title":"gateway-api","version":"0.0.1"},"components":{"schemas":{"TransactionGranularityDetails":{"type":"object","description":"A breakdown of the difference between MOVEMENT_LOCAL and GROSS_MOVEMENT_LOCAL","properties":{"COMMISSIONS_LOCAL":{"type":"integer","format":"int64","description":"Value of commissions associated with the transaction, in local currency"},"STAMP_DUTY_LOCAL":{"type":"integer","format":"int64","description":"Value of stamp duties associated with the transaction, in local currency"},"WITHHOLDING_TAX_LOCAL":{"type":"integer","format":"int64","description":"Value of withholdings tax associated with the transaction, in local currency"},"COLLECTION_CHARGE_LOCAL":{"type":"integer","format":"int64","description":"Value of collection charges associated with the transaction, in local currency"},"TAX_LOCAL":{"type":"integer","format":"int64","description":"Value of taxes, duties associated with the transaction, in local currency"},"ACCRUED_INTEREST_LOCAL":{"type":"integer","format":"int64","description":"The value of the accrued interest when a fixed income investment is transacted, in local currency"}}}}}}
```

## The TransactionDetails object

```json
{"openapi":"3.1.0","info":{"title":"gateway-api","version":"0.0.1"},"components":{"schemas":{"TransactionDetails":{"type":"object","description":"Transaction details returned by the API","properties":{"ENTITY.ID":{"type":"integer","format":"int64","description":"Unique identifier of the entity the request was made for. This identifier is created by Sesame"},"ENTITY.NAME":{"type":"string","description":"Name of the entity the request was made for"},"ASSET.NAME":{"type":"string","description":"Name of the investment being transacted"},"ASSET.ID":{"type":"integer","format":"int64","description":"ID of the investment being transacted. This identifier is created by Sesame"},"ASSET.TYPE":{"type":"string","description":"Type of the investment being transacted"},"TRANSACTION.SUBTYPE":{"type":"string","description":"Subtype of the transaction. For a full list of supported subtypes, see the list in `FAQ and Troubleshooting`"},"TRANSACTION.CUSTODIAN_TRANSACTION_ID":{"type":"string","description":"Unique identifier of the transaction, as provided in the custodial feed. When not provided by the custodian, a unique transaction Id is generated by Sesame"},"TRANSACTION.DESCRIPTION":{"type":"string","description":"Description of the transaction, as provided in the custodial feed. When not provided by the custodian, a description is generated by Sesame"},"TRANSACTION.DATE":{"type":"string","format":"date","description":"Date of the transaction."},"TRANSACTION.SETTLEMENT_DATE":{"type":"string","format":"date","description":"Settlement date of the transaction."},"TRANSACTION.MOVEMENT_LOCAL":{"type":"number","description":"Net transaction value, in local currency"},"TRANSACTION.GROSS_MOVEMENT_LOCAL":{"type":"number","description":"Gross transaction value, in local currency"},"TRANSACTION.QUANTITY":{"type":"number","description":"Units of the investment transacted"},"TRANSACTION.NET_UNIT_PRICE_LOCAL":{"type":"number","description":"Net unit price of the transaction, in local currency"},"TRANSACTION.GROSS_UNIT_PRICE_LOCAL":{"type":"number","description":"Gross unit price of the transaction, in local currency"},"TRANSACTION.LOCAL_CURRENCY":{"type":"string","description":"Currency that the transaction is denominated in"},"TRANSACTION.LOCAL_CURRENCY2":{"type":"string","description":"The local currency of the incoming cash where the transaction is an internal FX transaction"},"TRANSACTION.MOVEMENT_REPORTING":{"type":"number","description":"Net transaction value, in reporting currency"},"TRANSACTION.GROSS_MOVEMENT_REPORTING":{"type":"number","description":"Gross transaction value, in reporting currency"},"TRANSACTION.SUB_PORTFOLIO_CODE":{"type":"string","description":"A string providing further granularity about the sub-account involved in the transaction. This could be a bank account number which differs per currency, or nature (capital/income), within the main account. The main account or portfolio identifier is shown in the PORTFOLIO_CODES field in the `entities` endpoint"},"TRANSACTION.SUB_PORTFOLIO_CODE2":{"type":"string","description":"A string providing further granularity about the second account involved in the transaction. This is required for internal FX transactions. In this case, the subPortfolioCode2 represents the sub-account that the incoming cash is received into. The main account or portfolio identifier is shown in the PORTFOLIO_CODES field in the `entities` endpoint"},"TRANSACTION.CAPITAL_OR_INCOME":{"type":"string","description":"A string indicating whether the transaction is in-to or out-of a CAPITAL, INCOME or MIXED account"},"TRANSACTION.GRANULARITY":{"$ref":"#/components/schemas/TransactionGranularityDetails","description":"Granularity of the transaction."},"TRANSACTION.PRIVATE_FUND_GRANULARITY":{"$ref":"#/components/schemas/PrivateFundGranularityDetails","description":"Private fund granularity of the transaction."},"TRANSACTION.REVERSAL":{"type":"boolean","description":"A boolean indicating whether this transaction is reversing a previous transaction"},"TRANSACTION.CUSTODIAN_REVERSED_TRANSACTION_ID":{"type":"string","description":"Where available, the CUSTODIAN_TRANSACTION_ID of the transaction which this transaction is reversing. Only seen for transactions where reversal = `true`. This field helps users connect reversal transactions and the transactions that they are reversing"},"TRANSACTION.UPDATED_DATE":{"type":"string","format":"date-time","description":"Last updated date of the transaction."}},"required":["ASSET.ID","ASSET.NAME","ASSET.TYPE","ENTITY.ID","ENTITY.NAME","TRANSACTION.CUSTODIAN_TRANSACTION_ID","TRANSACTION.DATE","TRANSACTION.DESCRIPTION","TRANSACTION.LOCAL_CURRENCY","TRANSACTION.MOVEMENT_LOCAL","TRANSACTION.QUANTITY","TRANSACTION.REVERSAL","TRANSACTION.SUBTYPE"]},"TransactionGranularityDetails":{"type":"object","description":"A breakdown of the difference between MOVEMENT_LOCAL and GROSS_MOVEMENT_LOCAL","properties":{"COMMISSIONS_LOCAL":{"type":"integer","format":"int64","description":"Value of commissions associated with the transaction, in local currency"},"STAMP_DUTY_LOCAL":{"type":"integer","format":"int64","description":"Value of stamp duties associated with the transaction, in local currency"},"WITHHOLDING_TAX_LOCAL":{"type":"integer","format":"int64","description":"Value of withholdings tax associated with the transaction, in local currency"},"COLLECTION_CHARGE_LOCAL":{"type":"integer","format":"int64","description":"Value of collection charges associated with the transaction, in local currency"},"TAX_LOCAL":{"type":"integer","format":"int64","description":"Value of taxes, duties associated with the transaction, in local currency"},"ACCRUED_INTEREST_LOCAL":{"type":"integer","format":"int64","description":"The value of the accrued interest when a fixed income investment is transacted, in local currency"}}},"PrivateFundGranularityDetails":{"type":"object","description":"Provides a breakdown of MOVEMENT_LOCAL for Capital Calls, Distributions and Equalisations","properties":{"PE_DEDUCTIBLE":{"type":"integer","format":"int64","description":"The portion of a capital call which reduces the remaining commitment or the portion of an equalisation which increases the remaining commitment, in local currency"},"PE_NON_DEDUCTIBLE":{"type":"integer","format":"int64","description":"The portion of a capital call which does not reduce the remaining commitment or the portion of an equalisation which does not increase the remaining commitment, in local currency"},"PE_INVESTMENT":{"type":"integer","format":"int64","description":"The portion of a capital call which goes towards purchasing portfolio companies or the portion of an equalisation which refunds for amounts previously paid towards purchasing portfolio companies, in local currency"},"PE_MANAGEMENT_FEES":{"type":"integer","format":"int64","description":"The portion of a capital call which is used for covering management fees or the portion an equalisation representing the pro-rata rebate for previously paid management fees, in local currency"},"PE_FUND_EXPENSES":{"type":"integer","format":"int64","description":"The portion of a capital call which is used for covering fund expenses or the portion of an equalisation representing the pro-rata rebate for previously paid fund expenses, in local currency"},"PE_OTHER_FEES":{"type":"integer","format":"int64","description":"The portion of a capital call which is used for covering other fund fees or the portion an equalisation representing the pro-rata rebate for previously paid other fund fees, in local currency"},"PE_EQUALISATION":{"type":"integer","format":"int64","description":"The portion of a capital call which is a catch-up equalisation payment or the portion of an equalisation which is received following catch-up equalisation by other investors, where above granularity is not provided, in local currency"},"PE_RECALLABLE":{"type":"integer","format":"int64","description":"The portion of the distribution that is recallable, in local currency"},"PE_NON_RECALLABLE":{"type":"integer","format":"int64","description":"The portion of the distribution that is non-recallable, in local currency"},"PE_CAPITAL_RETURN":{"type":"integer","format":"int64","description":"The portion of the distribution that represents a return of capital to the LP, in local currency"},"PE_CAPITAL_GAIN":{"type":"integer","format":"int64","description":"The portion of the distribution that is a capital gain (this can be negative, indicating a capital loss), in local currency"},"PE_INCOME":{"type":"integer","format":"int64","description":"The portion of the distribution that represents income, in local currency"}}}}}}
```

## The TransactionResponse object

```json
{"openapi":"3.1.0","info":{"title":"gateway-api","version":"0.0.1"},"components":{"schemas":{"TransactionResponse":{"type":"object","description":"Transaction data returned by the API","properties":{"data":{"oneOf":[{"$ref":"#/components/schemas/TransactionDetails"},{"type":"null"}]},"pagination":{"oneOf":[{"$ref":"#/components/schemas/PaginationDetails"},{"type":"null"}]},"meta":{"oneOf":[{"$ref":"#/components/schemas/MetadataDetails"},{"type":"null"}]}}},"TransactionDetails":{"type":"object","description":"Transaction details returned by the API","properties":{"ENTITY.ID":{"type":"integer","format":"int64","description":"Unique identifier of the entity the request was made for. This identifier is created by Sesame"},"ENTITY.NAME":{"type":"string","description":"Name of the entity the request was made for"},"ASSET.NAME":{"type":"string","description":"Name of the investment being transacted"},"ASSET.ID":{"type":"integer","format":"int64","description":"ID of the investment being transacted. This identifier is created by Sesame"},"ASSET.TYPE":{"type":"string","description":"Type of the investment being transacted"},"TRANSACTION.SUBTYPE":{"type":"string","description":"Subtype of the transaction. For a full list of supported subtypes, see the list in `FAQ and Troubleshooting`"},"TRANSACTION.CUSTODIAN_TRANSACTION_ID":{"type":"string","description":"Unique identifier of the transaction, as provided in the custodial feed. When not provided by the custodian, a unique transaction Id is generated by Sesame"},"TRANSACTION.DESCRIPTION":{"type":"string","description":"Description of the transaction, as provided in the custodial feed. When not provided by the custodian, a description is generated by Sesame"},"TRANSACTION.DATE":{"type":"string","format":"date","description":"Date of the transaction."},"TRANSACTION.SETTLEMENT_DATE":{"type":"string","format":"date","description":"Settlement date of the transaction."},"TRANSACTION.MOVEMENT_LOCAL":{"type":"number","description":"Net transaction value, in local currency"},"TRANSACTION.GROSS_MOVEMENT_LOCAL":{"type":"number","description":"Gross transaction value, in local currency"},"TRANSACTION.QUANTITY":{"type":"number","description":"Units of the investment transacted"},"TRANSACTION.NET_UNIT_PRICE_LOCAL":{"type":"number","description":"Net unit price of the transaction, in local currency"},"TRANSACTION.GROSS_UNIT_PRICE_LOCAL":{"type":"number","description":"Gross unit price of the transaction, in local currency"},"TRANSACTION.LOCAL_CURRENCY":{"type":"string","description":"Currency that the transaction is denominated in"},"TRANSACTION.LOCAL_CURRENCY2":{"type":"string","description":"The local currency of the incoming cash where the transaction is an internal FX transaction"},"TRANSACTION.MOVEMENT_REPORTING":{"type":"number","description":"Net transaction value, in reporting currency"},"TRANSACTION.GROSS_MOVEMENT_REPORTING":{"type":"number","description":"Gross transaction value, in reporting currency"},"TRANSACTION.SUB_PORTFOLIO_CODE":{"type":"string","description":"A string providing further granularity about the sub-account involved in the transaction. This could be a bank account number which differs per currency, or nature (capital/income), within the main account. The main account or portfolio identifier is shown in the PORTFOLIO_CODES field in the `entities` endpoint"},"TRANSACTION.SUB_PORTFOLIO_CODE2":{"type":"string","description":"A string providing further granularity about the second account involved in the transaction. This is required for internal FX transactions. In this case, the subPortfolioCode2 represents the sub-account that the incoming cash is received into. The main account or portfolio identifier is shown in the PORTFOLIO_CODES field in the `entities` endpoint"},"TRANSACTION.CAPITAL_OR_INCOME":{"type":"string","description":"A string indicating whether the transaction is in-to or out-of a CAPITAL, INCOME or MIXED account"},"TRANSACTION.GRANULARITY":{"$ref":"#/components/schemas/TransactionGranularityDetails","description":"Granularity of the transaction."},"TRANSACTION.PRIVATE_FUND_GRANULARITY":{"$ref":"#/components/schemas/PrivateFundGranularityDetails","description":"Private fund granularity of the transaction."},"TRANSACTION.REVERSAL":{"type":"boolean","description":"A boolean indicating whether this transaction is reversing a previous transaction"},"TRANSACTION.CUSTODIAN_REVERSED_TRANSACTION_ID":{"type":"string","description":"Where available, the CUSTODIAN_TRANSACTION_ID of the transaction which this transaction is reversing. Only seen for transactions where reversal = `true`. This field helps users connect reversal transactions and the transactions that they are reversing"},"TRANSACTION.UPDATED_DATE":{"type":"string","format":"date-time","description":"Last updated date of the transaction."}},"required":["ASSET.ID","ASSET.NAME","ASSET.TYPE","ENTITY.ID","ENTITY.NAME","TRANSACTION.CUSTODIAN_TRANSACTION_ID","TRANSACTION.DATE","TRANSACTION.DESCRIPTION","TRANSACTION.LOCAL_CURRENCY","TRANSACTION.MOVEMENT_LOCAL","TRANSACTION.QUANTITY","TRANSACTION.REVERSAL","TRANSACTION.SUBTYPE"]},"TransactionGranularityDetails":{"type":"object","description":"A breakdown of the difference between MOVEMENT_LOCAL and GROSS_MOVEMENT_LOCAL","properties":{"COMMISSIONS_LOCAL":{"type":"integer","format":"int64","description":"Value of commissions associated with the transaction, in local currency"},"STAMP_DUTY_LOCAL":{"type":"integer","format":"int64","description":"Value of stamp duties associated with the transaction, in local currency"},"WITHHOLDING_TAX_LOCAL":{"type":"integer","format":"int64","description":"Value of withholdings tax associated with the transaction, in local currency"},"COLLECTION_CHARGE_LOCAL":{"type":"integer","format":"int64","description":"Value of collection charges associated with the transaction, in local currency"},"TAX_LOCAL":{"type":"integer","format":"int64","description":"Value of taxes, duties associated with the transaction, in local currency"},"ACCRUED_INTEREST_LOCAL":{"type":"integer","format":"int64","description":"The value of the accrued interest when a fixed income investment is transacted, in local currency"}}},"PrivateFundGranularityDetails":{"type":"object","description":"Provides a breakdown of MOVEMENT_LOCAL for Capital Calls, Distributions and Equalisations","properties":{"PE_DEDUCTIBLE":{"type":"integer","format":"int64","description":"The portion of a capital call which reduces the remaining commitment or the portion of an equalisation which increases the remaining commitment, in local currency"},"PE_NON_DEDUCTIBLE":{"type":"integer","format":"int64","description":"The portion of a capital call which does not reduce the remaining commitment or the portion of an equalisation which does not increase the remaining commitment, in local currency"},"PE_INVESTMENT":{"type":"integer","format":"int64","description":"The portion of a capital call which goes towards purchasing portfolio companies or the portion of an equalisation which refunds for amounts previously paid towards purchasing portfolio companies, in local currency"},"PE_MANAGEMENT_FEES":{"type":"integer","format":"int64","description":"The portion of a capital call which is used for covering management fees or the portion an equalisation representing the pro-rata rebate for previously paid management fees, in local currency"},"PE_FUND_EXPENSES":{"type":"integer","format":"int64","description":"The portion of a capital call which is used for covering fund expenses or the portion of an equalisation representing the pro-rata rebate for previously paid fund expenses, in local currency"},"PE_OTHER_FEES":{"type":"integer","format":"int64","description":"The portion of a capital call which is used for covering other fund fees or the portion an equalisation representing the pro-rata rebate for previously paid other fund fees, in local currency"},"PE_EQUALISATION":{"type":"integer","format":"int64","description":"The portion of a capital call which is a catch-up equalisation payment or the portion of an equalisation which is received following catch-up equalisation by other investors, where above granularity is not provided, in local currency"},"PE_RECALLABLE":{"type":"integer","format":"int64","description":"The portion of the distribution that is recallable, in local currency"},"PE_NON_RECALLABLE":{"type":"integer","format":"int64","description":"The portion of the distribution that is non-recallable, in local currency"},"PE_CAPITAL_RETURN":{"type":"integer","format":"int64","description":"The portion of the distribution that represents a return of capital to the LP, in local currency"},"PE_CAPITAL_GAIN":{"type":"integer","format":"int64","description":"The portion of the distribution that is a capital gain (this can be negative, indicating a capital loss), in local currency"},"PE_INCOME":{"type":"integer","format":"int64","description":"The portion of the distribution that represents income, in local currency"}}},"PaginationDetails":{"type":"object","description":"Pagination data returned by the API","properties":{"nextPageToken":{"type":["string","null"],"description":"Token used to fetch the next page of result. This token is opaque and must be used as is"},"hasNextPage":{"type":["boolean","null"],"description":"A boolean indicating if there is a next page to this resource"},"pageSize":{"type":["integer","null"],"format":"int64","description":"Number of elements in the current page. This API is not providing the total number of elements for this resource."}},"required":["hasNextPage","pageSize"]},"MetadataDetails":{"type":"object","description":"Metadata returned by the API","properties":{"requestId":{"type":["string","null"],"format":"uuid","description":"Id of the request"},"responseType":{"type":["string","null"],"description":"Format of the request"}},"required":["requestId"]}}}}
```

## The PositionDetails object

```json
{"openapi":"3.1.0","info":{"title":"gateway-api","version":"0.0.1"},"components":{"schemas":{"PositionDetails":{"type":"object","description":"Position data returned by the API","properties":{"ENTITY.ID":{"type":"integer","format":"int64","description":"Unique identifier of the entity the request was made for. This identifier is created by Sesame"},"ENTITY.NAME":{"type":"string","description":"Name of the entity the request was made for"},"ASSET.NAME":{"type":"string","description":"Name of the investment held"},"ASSET.ID":{"type":"integer","format":"int64","description":"ID of the investment held. This identifier is created by Sesame"},"ASSET.TYPE":{"type":"string","description":"Type of the investment held"},"POSITION.DATE":{"type":"string","format":"date","description":"The date of the position in the investment"},"POSITION.QUANTITY":{"type":"number","description":"Quantity of units of the investment held"},"POSITION.MARKET_VALUE_LOCAL":{"type":"number","description":"Market value of the holding, in local currency"},"POSITION.UNIT_PRICE_LOCAL":{"type":"number","description":"Price per unit of the investment held, in local currency"},"POSITION.LOCAL_CURRENCY":{"type":"string","description":"Currency that the position is denominated in"},"POSITION.GRANULARITY":{"$ref":"#/components/schemas/PositionGranularityDetails","description":"Granularity of the position."},"POSITION.UPDATED_DATE":{"type":"string","format":"date-time","description":"Last updated date of the position."}},"required":["ASSET.ID","ASSET.NAME","ASSET.TYPE","ENTITY.ID","ENTITY.NAME","POSITION.DATE","POSITION.LOCAL_CURRENCY","POSITION.MARKET_VALUE_LOCAL","POSITION.QUANTITY","POSITION.UNIT_PRICE_LOCAL"]},"PositionGranularityDetails":{"type":"object","description":"Returns cash holdings split by sub-portfolio codes. The sub-portfolio code provides a level more granularity than the entity-level balances. That is, a sub-portfolio code reflects the cash balances separated by the specific sub-account codes. These codes will differ per currency, and per intention. For example, capital versus income accounts","properties":{"SUB_PORTFOLIO":{"$ref":"#/components/schemas/SubPortfolioDetails","description":"Breakdown of holdings by sub-portfolio."}}},"SubPortfolioDetails":{"type":"object","description":"The cash balance (position) for the POSITION.DATE, decomposed into the underlying SUB_PORTFOLIO_CODEs","properties":{"SUB_PORTFOLIO_CODE":{"type":"string","description":"A string providing further granularity about the sub bank accounts balance which contribute to the cash position on this date. This could be a bank account number which differs per nature (capital/income), within the main account. The main account or portfolio identifier is shown in the PORTFOLIO_CODES field in the `entities` endpoint"},"MARKET_VALUE_LOCAL":{"type":"number","description":"The cash balance of that SUB_PORTFOLIO_CODE on the position date"}}}}}}
```

## The PositionGranularityDetails object

```json
{"openapi":"3.1.0","info":{"title":"gateway-api","version":"0.0.1"},"components":{"schemas":{"PositionGranularityDetails":{"type":"object","description":"Returns cash holdings split by sub-portfolio codes. The sub-portfolio code provides a level more granularity than the entity-level balances. That is, a sub-portfolio code reflects the cash balances separated by the specific sub-account codes. These codes will differ per currency, and per intention. For example, capital versus income accounts","properties":{"SUB_PORTFOLIO":{"$ref":"#/components/schemas/SubPortfolioDetails","description":"Breakdown of holdings by sub-portfolio."}}},"SubPortfolioDetails":{"type":"object","description":"The cash balance (position) for the POSITION.DATE, decomposed into the underlying SUB_PORTFOLIO_CODEs","properties":{"SUB_PORTFOLIO_CODE":{"type":"string","description":"A string providing further granularity about the sub bank accounts balance which contribute to the cash position on this date. This could be a bank account number which differs per nature (capital/income), within the main account. The main account or portfolio identifier is shown in the PORTFOLIO_CODES field in the `entities` endpoint"},"MARKET_VALUE_LOCAL":{"type":"number","description":"The cash balance of that SUB_PORTFOLIO_CODE on the position date"}}}}}}
```

## The PositionResponse object

```json
{"openapi":"3.1.0","info":{"title":"gateway-api","version":"0.0.1"},"components":{"schemas":{"PositionResponse":{"type":"object","description":"Position data returned by the API","properties":{"data":{"oneOf":[{"$ref":"#/components/schemas/PositionDetails"},{"type":"null"}]},"pagination":{"oneOf":[{"$ref":"#/components/schemas/PaginationDetails"},{"type":"null"}]},"meta":{"oneOf":[{"$ref":"#/components/schemas/MetadataDetails"},{"type":"null"}]}}},"PositionDetails":{"type":"object","description":"Position data returned by the API","properties":{"ENTITY.ID":{"type":"integer","format":"int64","description":"Unique identifier of the entity the request was made for. This identifier is created by Sesame"},"ENTITY.NAME":{"type":"string","description":"Name of the entity the request was made for"},"ASSET.NAME":{"type":"string","description":"Name of the investment held"},"ASSET.ID":{"type":"integer","format":"int64","description":"ID of the investment held. This identifier is created by Sesame"},"ASSET.TYPE":{"type":"string","description":"Type of the investment held"},"POSITION.DATE":{"type":"string","format":"date","description":"The date of the position in the investment"},"POSITION.QUANTITY":{"type":"number","description":"Quantity of units of the investment held"},"POSITION.MARKET_VALUE_LOCAL":{"type":"number","description":"Market value of the holding, in local currency"},"POSITION.UNIT_PRICE_LOCAL":{"type":"number","description":"Price per unit of the investment held, in local currency"},"POSITION.LOCAL_CURRENCY":{"type":"string","description":"Currency that the position is denominated in"},"POSITION.GRANULARITY":{"$ref":"#/components/schemas/PositionGranularityDetails","description":"Granularity of the position."},"POSITION.UPDATED_DATE":{"type":"string","format":"date-time","description":"Last updated date of the position."}},"required":["ASSET.ID","ASSET.NAME","ASSET.TYPE","ENTITY.ID","ENTITY.NAME","POSITION.DATE","POSITION.LOCAL_CURRENCY","POSITION.MARKET_VALUE_LOCAL","POSITION.QUANTITY","POSITION.UNIT_PRICE_LOCAL"]},"PositionGranularityDetails":{"type":"object","description":"Returns cash holdings split by sub-portfolio codes. The sub-portfolio code provides a level more granularity than the entity-level balances. That is, a sub-portfolio code reflects the cash balances separated by the specific sub-account codes. These codes will differ per currency, and per intention. For example, capital versus income accounts","properties":{"SUB_PORTFOLIO":{"$ref":"#/components/schemas/SubPortfolioDetails","description":"Breakdown of holdings by sub-portfolio."}}},"SubPortfolioDetails":{"type":"object","description":"The cash balance (position) for the POSITION.DATE, decomposed into the underlying SUB_PORTFOLIO_CODEs","properties":{"SUB_PORTFOLIO_CODE":{"type":"string","description":"A string providing further granularity about the sub bank accounts balance which contribute to the cash position on this date. This could be a bank account number which differs per nature (capital/income), within the main account. The main account or portfolio identifier is shown in the PORTFOLIO_CODES field in the `entities` endpoint"},"MARKET_VALUE_LOCAL":{"type":"number","description":"The cash balance of that SUB_PORTFOLIO_CODE on the position date"}}},"PaginationDetails":{"type":"object","description":"Pagination data returned by the API","properties":{"nextPageToken":{"type":["string","null"],"description":"Token used to fetch the next page of result. This token is opaque and must be used as is"},"hasNextPage":{"type":["boolean","null"],"description":"A boolean indicating if there is a next page to this resource"},"pageSize":{"type":["integer","null"],"format":"int64","description":"Number of elements in the current page. This API is not providing the total number of elements for this resource."}},"required":["hasNextPage","pageSize"]},"MetadataDetails":{"type":"object","description":"Metadata returned by the API","properties":{"requestId":{"type":["string","null"],"format":"uuid","description":"Id of the request"},"responseType":{"type":["string","null"],"description":"Format of the request"}},"required":["requestId"]}}}}
```

## The SubPortfolioDetails object

```json
{"openapi":"3.1.0","info":{"title":"gateway-api","version":"0.0.1"},"components":{"schemas":{"SubPortfolioDetails":{"type":"object","description":"The cash balance (position) for the POSITION.DATE, decomposed into the underlying SUB_PORTFOLIO_CODEs","properties":{"SUB_PORTFOLIO_CODE":{"type":"string","description":"A string providing further granularity about the sub bank accounts balance which contribute to the cash position on this date. This could be a bank account number which differs per nature (capital/income), within the main account. The main account or portfolio identifier is shown in the PORTFOLIO_CODES field in the `entities` endpoint"},"MARKET_VALUE_LOCAL":{"type":"number","description":"The cash balance of that SUB_PORTFOLIO_CODE on the position date"}}}}}}
```

## The ConsolidationDetails object

```json
{"openapi":"3.1.0","info":{"title":"gateway-api","version":"0.0.1"},"components":{"schemas":{"ConsolidationDetails":{"type":"object","description":"A breakdown of the consolidation configuration, indicating which entities are included in the consolidation, and percentage of their participation. Only relevant for entities with type = 'CONSOLIDATION'","properties":{"ENTITY_ID":{"type":"integer","format":"int64","description":"ID of sub-entity in the consolidation."},"PARTICIPATION":{"type":"number","description":"Participation percentage in consolidation."}}}}}}
```

## The EntityDetailedDatesDetails object

```json
{"openapi":"3.1.0","info":{"title":"gateway-api","version":"0.0.1"},"components":{"schemas":{"EntityDetailedDatesDetails":{"type":"object","description":"Summary of the publication and pipeline status of all position dates per each entity","properties":{"DATE":{"type":"string","format":"date","description":"Date of position"},"PUBLISHED":{"type":"boolean","description":"Whether data is published, meaning that data can be requested for that date"},"PIPELINE_STATUS":{"type":"string","description":"Processing status of the position date in the Sesame data pipeline","enum":["RUNNING","FAILED","READY"]},"DATE_PUBLISHED":{"type":"string","description":"Timestamp of publication."}}}}}}
```

## The EntityDetails object

```json
{"openapi":"3.1.0","info":{"title":"gateway-api","version":"0.0.1"},"components":{"schemas":{"EntityDetails":{"type":"object","description":"Summary of the key dates of an entity","properties":{"ENTITY.ID":{"type":"integer","format":"int64","description":"Unique identifier of the entity. This identifier is created by Sesame"},"ENTITY.NAME":{"type":"string","description":"Name of the entity"},"ENTITY.TYPE":{"type":"string","description":"Type of the entity","enum":["FUND","HOLDING_COMPANY","TRUST","PORTFOLIO","PERSONAL","BASKET","BENCHMARK","GROUPING","CONSOLIDATION"]},"ENTITY.PORTFOLIO_PARENT_ENTITY_ID":{"type":"integer","format":"int64","description":"Parent entity ID of a portfolio entity"},"ENTITY.PORTFOLIO_CODES":{"type":"array","description":"List of portfolio codes for this portfolio. These codes are received in the custodial feed, and used to identify which portfolio the data belongs to. Depending on the feed, a portfolio may have only one or several PORTFOLIO_CODES","items":{"type":"string"}},"ENTITY.REPORTING_CURRENCY":{"type":"string","description":"Reporting currency of the entity, as defined in Sesame"},"ENTITY.CONSOLIDATION_TYPE":{"type":"string","description":"Indicates whether the entity was set up as DIRECT (Direct returns the entity's directly held assets) or LOOK_THROUGH (Look Through allows an entity to look-through its holdings, into underlying entities linked through Sesame-configured look-through relationships. For example, shares of ownership for a holding company will be represented as the proportional ownership of the positions and transactions of the holding company when an entity is LOOK_THROUGH)","enum":["DIRECT","LOOK_THROUGH"]},"ENTITY.PORTFOLIO_FEED":{"type":"string","description":"Name of the feed that populates data for this portfolio"},"ENTITY.CONSOLIDATION_DETAILS":{"$ref":"#/components/schemas/ConsolidationDetails","description":"Entities and participation within a consolidation."},"ENTITY.DETAILED_DATES":{"$ref":"#/components/schemas/EntityDetailedDatesDetails","description":"Key reporting and verification dates."},"ENTITY.KEY_DATES":{"$ref":"#/components/schemas/EntityKeyDatesDetails","description":"Summary of key date metrics."}},"required":["ENTITY.CONSOLIDATION_TYPE","ENTITY.ID","ENTITY.NAME","ENTITY.REPORTING_CURRENCY","ENTITY.TYPE"]},"ConsolidationDetails":{"type":"object","description":"A breakdown of the consolidation configuration, indicating which entities are included in the consolidation, and percentage of their participation. Only relevant for entities with type = 'CONSOLIDATION'","properties":{"ENTITY_ID":{"type":"integer","format":"int64","description":"ID of sub-entity in the consolidation."},"PARTICIPATION":{"type":"number","description":"Participation percentage in consolidation."}}},"EntityDetailedDatesDetails":{"type":"object","description":"Summary of the publication and pipeline status of all position dates per each entity","properties":{"DATE":{"type":"string","format":"date","description":"Date of position"},"PUBLISHED":{"type":"boolean","description":"Whether data is published, meaning that data can be requested for that date"},"PIPELINE_STATUS":{"type":"string","description":"Processing status of the position date in the Sesame data pipeline","enum":["RUNNING","FAILED","READY"]},"DATE_PUBLISHED":{"type":"string","description":"Timestamp of publication."}}},"EntityKeyDatesDetails":{"type":"object","description":"Key dates to help users understand the entity's history","properties":{"LATEST_PUBLISHED_DATE":{"type":"string","format":"date","description":"Most recent published date. Dates can only be published when there is a position on that date"},"FIRST_PUBLISHED_DATE":{"type":"string","format":"date","description":"Earliest published date. Dates can only be published when there is a position on that date"},"LATEST_TRANSACTION_DATE":{"type":"string","format":"date","description":"Most recent transaction date."},"FIRST_TRANSACTION_DATE":{"type":"string","format":"date","description":"Earliest transaction date."}}}}}}
```

## The EntityKeyDatesDetails object

```json
{"openapi":"3.1.0","info":{"title":"gateway-api","version":"0.0.1"},"components":{"schemas":{"EntityKeyDatesDetails":{"type":"object","description":"Key dates to help users understand the entity's history","properties":{"LATEST_PUBLISHED_DATE":{"type":"string","format":"date","description":"Most recent published date. Dates can only be published when there is a position on that date"},"FIRST_PUBLISHED_DATE":{"type":"string","format":"date","description":"Earliest published date. Dates can only be published when there is a position on that date"},"LATEST_TRANSACTION_DATE":{"type":"string","format":"date","description":"Most recent transaction date."},"FIRST_TRANSACTION_DATE":{"type":"string","format":"date","description":"Earliest transaction date."}}}}}}
```

## The EntityResponse object

```json
{"openapi":"3.1.0","info":{"title":"gateway-api","version":"0.0.1"},"components":{"schemas":{"EntityResponse":{"type":"object","description":"Entity data returned by the API","properties":{"data":{"oneOf":[{"$ref":"#/components/schemas/EntityDetails"},{"type":"null"}]}}},"EntityDetails":{"type":"object","description":"Summary of the key dates of an entity","properties":{"ENTITY.ID":{"type":"integer","format":"int64","description":"Unique identifier of the entity. This identifier is created by Sesame"},"ENTITY.NAME":{"type":"string","description":"Name of the entity"},"ENTITY.TYPE":{"type":"string","description":"Type of the entity","enum":["FUND","HOLDING_COMPANY","TRUST","PORTFOLIO","PERSONAL","BASKET","BENCHMARK","GROUPING","CONSOLIDATION"]},"ENTITY.PORTFOLIO_PARENT_ENTITY_ID":{"type":"integer","format":"int64","description":"Parent entity ID of a portfolio entity"},"ENTITY.PORTFOLIO_CODES":{"type":"array","description":"List of portfolio codes for this portfolio. These codes are received in the custodial feed, and used to identify which portfolio the data belongs to. Depending on the feed, a portfolio may have only one or several PORTFOLIO_CODES","items":{"type":"string"}},"ENTITY.REPORTING_CURRENCY":{"type":"string","description":"Reporting currency of the entity, as defined in Sesame"},"ENTITY.CONSOLIDATION_TYPE":{"type":"string","description":"Indicates whether the entity was set up as DIRECT (Direct returns the entity's directly held assets) or LOOK_THROUGH (Look Through allows an entity to look-through its holdings, into underlying entities linked through Sesame-configured look-through relationships. For example, shares of ownership for a holding company will be represented as the proportional ownership of the positions and transactions of the holding company when an entity is LOOK_THROUGH)","enum":["DIRECT","LOOK_THROUGH"]},"ENTITY.PORTFOLIO_FEED":{"type":"string","description":"Name of the feed that populates data for this portfolio"},"ENTITY.CONSOLIDATION_DETAILS":{"$ref":"#/components/schemas/ConsolidationDetails","description":"Entities and participation within a consolidation."},"ENTITY.DETAILED_DATES":{"$ref":"#/components/schemas/EntityDetailedDatesDetails","description":"Key reporting and verification dates."},"ENTITY.KEY_DATES":{"$ref":"#/components/schemas/EntityKeyDatesDetails","description":"Summary of key date metrics."}},"required":["ENTITY.CONSOLIDATION_TYPE","ENTITY.ID","ENTITY.NAME","ENTITY.REPORTING_CURRENCY","ENTITY.TYPE"]},"ConsolidationDetails":{"type":"object","description":"A breakdown of the consolidation configuration, indicating which entities are included in the consolidation, and percentage of their participation. Only relevant for entities with type = 'CONSOLIDATION'","properties":{"ENTITY_ID":{"type":"integer","format":"int64","description":"ID of sub-entity in the consolidation."},"PARTICIPATION":{"type":"number","description":"Participation percentage in consolidation."}}},"EntityDetailedDatesDetails":{"type":"object","description":"Summary of the publication and pipeline status of all position dates per each entity","properties":{"DATE":{"type":"string","format":"date","description":"Date of position"},"PUBLISHED":{"type":"boolean","description":"Whether data is published, meaning that data can be requested for that date"},"PIPELINE_STATUS":{"type":"string","description":"Processing status of the position date in the Sesame data pipeline","enum":["RUNNING","FAILED","READY"]},"DATE_PUBLISHED":{"type":"string","description":"Timestamp of publication."}}},"EntityKeyDatesDetails":{"type":"object","description":"Key dates to help users understand the entity's history","properties":{"LATEST_PUBLISHED_DATE":{"type":"string","format":"date","description":"Most recent published date. Dates can only be published when there is a position on that date"},"FIRST_PUBLISHED_DATE":{"type":"string","format":"date","description":"Earliest published date. Dates can only be published when there is a position on that date"},"LATEST_TRANSACTION_DATE":{"type":"string","format":"date","description":"Most recent transaction date."},"FIRST_TRANSACTION_DATE":{"type":"string","format":"date","description":"Earliest transaction date."}}}}}}
```


# Sesame Data Experience

This page gives users an overview of the different features of the Sesame Data Experience. An \`Experience\` in Sesame governs what features a user can access within Sesame, unique to their needs.

For completeness, all features of the Sesame Data Experience are mentioned below. Further detail on each is available within the Sesame Knowledge Base and Academy. If wanting to review only the API feature, jump to the [Destinations](/sesame-data-v2/sesame-data-experience/destinations) page.&#x20;


# Sources

The `Sources` section contains the insights a client will require about the feeds that they have subscribed to, and others that are available via Sesame, but not yet subscribed to. <br>

On the landing page, users can see which feeds they have subscribed to, the quality of the feed, the number of portfolios that are receiving data from that feed, and request data for additional portfolios to be added to the feed. Users can also subscribe to additional feeds by purchasing new feeds. <br>

<figure><img src="/files/EcDKxC7yy6XOFSfwMweK" alt=""><figcaption></figcaption></figure>

By opening a particular feed, users can review the use cases that each feed supports, and review the available fields per each supported data set.

<figure><img src="/files/nSUIyADwD0IIx8lMw3u1" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/2KBdkODquKBxjquWljXZ" alt=""><figcaption></figcaption></figure>

Finally, users can review the portfolio codes (identifiers) which are relevant for each feed

<figure><img src="/files/aJYQphNOtgQrue0AIiHg" alt=""><figcaption></figcaption></figure>

For more information, users can visit the [Sources](https://kb.docs.landytech.com/sources) page of the Sesame Knowledge Base.&#x20;


# Entities

Within `Entities`, users can achieve all their entity management needs. This includes:

* Creating and updating entities, whether legal entities, portfolios or consolidations
* Mapping entities to portfolio codes received from custodians
* Define and assign benchmarks, client director, relationship manager, investment manager, investment risk profile and management basis (where relevant)
* Review all entities, their feeds, benchmarks and other metadata

<figure><img src="/files/No2t9WUDdrmJCqnsZKCR" alt=""><figcaption></figcaption></figure>

For more information, users can visit the [Entities](https://kb.docs.landytech.com/entities) page of the Sesame Knowledge Base.&#x20;


# PMS

The `PMS` allows users to override any custodial data, and populate data for privates and collectibles using the user-managed portfolio and assisted by AI. Assets can be created and managed here. Integrity exceptions can be reviewed and resolved here too.&#x20;

<figure><img src="/files/dUYRhO0uKYuPowbz7eEn" alt=""><figcaption></figcaption></figure>

For more information, users can visit the [PMS](https://kb.docs.landytech.com/pms) page of the Sesame Knowledge Base.&#x20;


# Destinations

Destinations represents the main interaction point for Sesame Data clients. This page assists users to create and test requests, manage tokens and view logs.

#### Destinations Hub

This is the home page, allowing for an overview of your account's requests, logs, tokens and active integrations. From here, users can quickly navigate to other features of `Destinations`.&#x20;

<figure><img src="/files/3Bos2YCYG0sJIq2ULak1" alt=""><figcaption></figcaption></figure>

#### API > Tokens

To learn about token creation and management, see [Create and manage your API token](/sesame-data-v2/authentication/create-and-manage-your-api-token).

<figure><img src="/files/ft8miZQ4yQJXQeYmAD9r" alt=""><figcaption></figcaption></figure>

#### API > V2 Endpoints

The `V2 Endpoints` page lists the 4 endpoints that are the subject of this Docs site.

The `Try it` feature allows users to test the API in real time, facilitating experimentation and exploration of its capabilities. Through this interactive functionality, users can make test requests (also available as cURLs) and observe API responses, gaining a deeper understanding of how the API functions and its applications.

This is especially helpful for the `Analytics` API, which requires users to send a body in their `POST` requests.&#x20;

Users can also download the results to CSV by selecting `Export CSV`.

In the `Documentation` page you will find helpful links to the Docs site you are currently reading.

Users also have access to `Logs`. These are either per endpoint (as found in the `Endpoints` page) or across all endpoints (as found in the `Logs` page seen on the left hand side of the screen).&#x20;

The logs provide insights into system activities and errors, empowering users to troubleshoot issues effectively and monitor system performance proactively. Learn more at [Viewing Logs](/sesame-data-v2/faq-and-troubleshooting/viewing-logs).

<figure><img src="/files/mGlMsZwwiZk91ICLQSkG" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/jQYUAtubK0yuPeL46TBM" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/B9VJNr1kjVa3MeV1kmII" alt=""><figcaption></figcaption></figure>

#### API > V1 Endpoints

For the convenience of clients who are still using the `V1 Endpoints`, the Experience also allows users to interact with these. Access the Docs site for these endpoints via this link.&#x20;

<figure><img src="/files/Bbs1okpdhpzJCPopOTdk" alt=""><figcaption></figcaption></figure>

### Integrations

Monitor the status of your current integrations and review available integrations from the Integrations page.&#x20;

<figure><img src="/files/oLVDkzE25LvNxRJJdsfh" alt=""><figcaption></figcaption></figure>


# Reporting

Within `Reporting`, clients who are subscribed to the Sesame reporting capabilities can create and manage their Workflows and Reports from the Reporting page.&#x20;

<figure><img src="/files/zcPIKIdjsRmzTwUqYkr0" alt=""><figcaption></figcaption></figure>


# Documents

`Documents` allows for the secure transfer of Documents from Sesame to you (in the case or reports which are generated) and from you to Sesame (for example, when providing paperwork from new feeds or portfolios you would like Sesame to consolidate data on).

<figure><img src="/files/JDsTL7DuhcNlY55ENDpa" alt=""><figcaption></figcaption></figure>

For more information, users can visit the [Documents](https://kb.docs.landytech.com/documents) page of the Sesame Knowledge Base.&#x20;


# Integrations


# Data Feeds

Sesame currently has integrations with over 400 feeds, and continues to add new feeds every month. A feed is a bank, prime broker, wealth manager, portfolio management system, trading platform or other stakeholder which maintains a record of position and transaction data on behalf of Sesame clients.&#x20;

Sesame is able to support connection to new custodians, provided they support SFTP push/pull, EBICS or API-based data transfers.

Within the [Sources](/sesame-data-v2/sesame-data-experience#sources) page of the Sesame Data Experience, clients can see the list of feeds that Sesame supports, as well as the use cases that their data is appropriate for, and a scoring of the overall based on data quality, completeness and timeliness.

Users can also subscribe to new feeds here, and add new portfolios to feeds already subscribed to.

<figure><img src="/files/z6GDonII8RuHh2rYETBZ" alt=""><figcaption></figcaption></figure>

&#x20;

If you are not a Sesame user yet and would like to check Sesame Data's coverage of your custodians, please contact <sales@landytech.com> or [request a demo](https://www.landytech.com/request-a-demo).&#x20;


# Tutorials/Recipes

This page contains useful guides to performing common use-cases with Sesame Data APIs.


# Using Sesame Data with Postman

## Using Postman and the Sesame Data API EndPoints

1. Open Postman
2. Create a new request
3. Use verb = `GET`
4. Select `Auth` and then `Basic Auth`
5. Paste `Username` from Sesame (more info [Create and manage your API token](/sesame-data-v2/authentication/create-and-manage-your-api-token))
6. Paste `Password` from Sesame&#x20;
7. Insert the URL (of any GET [API Endpoints](/sesame-data-v2/api-endpoints))
8. Click `Send`

<figure><img src="/files/4oSdy10NBJ0ASBh4tzRt" alt=""><figcaption></figcaption></figure>

## Importing a CURL into Postman

1. Open Postman and then select `File` > `Import`
2. In Sesame, API Endpoints, `Try It` section, after populating the required fields, copy the CURL of the request you would like to make in Postman&#x20;
3. In Postman, paste the CURL, and then either `Import Without Saving` or `Import Into Collection`
4. Click `Send`&#x20;

<figure><img src="/files/KU98jhNv1xiPYFhlHt59" alt=""><figcaption></figcaption></figure>


# FAQ and Troubleshooting

Use the pages below to resolve common integration issues.

* [FAQs](/sesame-data-v2/faq-and-troubleshooting/faqs)
* [Viewing Logs](/sesame-data-v2/faq-and-troubleshooting/viewing-logs)
* [Glossary](/sesame-data-v2/faq-and-troubleshooting/glossary)


# FAQs

Find below a list of commonly asked questions

## Frequently Asked Questions

<details>

<summary>Do requests need to be paginated?</summary>

No, the Sesame Data APIs are unpaginated, meaning all data is returned in a single response.

</details>

<details>

<summary>How are NULL fields handled in the response?</summary>

NULL results which are part of a response element are not returned. Certain fields are mandatory. See [API Endpoints](/sesame-data-v2/api-endpoints).

</details>

<details>

<summary>How do I know which portfolio each bank account's data is being stored in?</summary>

In the `entities` endpoint, the `PORTFOLIO.CODE` field connects the portfolio to the identifier used by banks, brokers and custodians to identify each bank account.

</details>

<details>

<summary>Do you separate different asset types between endpoints?</summary>

No. All positions (regardless of the underlying asset type) are found in the `/positions` endpoint. Similarly, all transactions (regardless of the underlying asset type) are all found in the `/transactions` endpoint.

</details>

<details>

<summary>How are cash transactions and positions treated?</summary>

Like any other asset or liability, different currencies have their own `ASSET.ID`, and any positions or transactions on these will be available via those endpoints.

</details>

<details>

<summary>Why does the <code>/positions</code> endpoint have sub portfolio information?</summary>

Where a feed shares this granularoty, on a given date, the sub portfolio data decomposes a single cash position into multiple cash balances per SUB\_PORTFOLIO\_CODE. SUB\_PORTFOLIO\_CODE can also be referred to as broker code or broker account code. In `POSITION.MARKET_VALUE_LOCAL`, these cash positions in the same currency are aggregated in a single balance.

`POSITION.GRANULARITY` > `SUB_PORTFOLIO` > `SUB_PORTFOLIO_CODE` is distinct per position.

</details>

<details>

<summary>How do you handle transactions which are reversals of previous transactions?</summary>

In the `/transactions` endpoint, the `TRANSACTION.REVERSAL` field will indicate if a transaction is a reversal by way of a true/false flag. Where true, the directions of fields like `TRANSACTION.MOVEMENT_LOCAL` and `TRANSACTION.MOVEMENT_REPORTING` will be opposite to those from the original transaction. Where available, the field `TRANSACTION.CUSTODIAN_REVERSED_TRANSACTION_ID` will link the reversal and original transactions.

</details>

<details>

<summary>What if I have a query about the data returned in the response, or the data does not reflect what is in my bank statement?</summary>

Use the Sesame support chat, and provide the cURL of your request.

</details>

<details>

<summary>What if I have an error message that I cannot resolve?</summary>

Use the Sesame support chat, and provide the cURL of your request.

</details>


# Viewing Logs

Monitor and troubleshoot your API integration with real-time access to all requests and responses within your account.

The API Logs page provides a complete audit trail of every API request made to the Sesame Data APIs. Use this tool to debug integration issues, monitor API usage, verify successful requests, and track performance metrics.

All requests made to your account are automatically logged and displayed in the logs table. Each log entry includes:

* Date of Request: Timestamp when the API request was received (UTC)
* Resource: The API endpoint that was called (e.g., /api/v2/entities, /api/v2/analytics)
* Status: HTTP response code and message
  * 200 Success - Request completed successfully
  * 401 Unauthorized - Authentication failed or credentials are invalid
  * 403 Forbidden - Authenticated but lacks permission to access the resource
  * Other standard HTTP status codes
* Request Duration: Time taken to process the request (in seconds)
* Token Name: Identifier of the API token used to authenticate the request<br>

{% hint style="info" %}
Please note that **the Sesame Data logs do not store** any personal or financial information - they only retain technical errors and details about the requests made.
{% endhint %}

## How to view logs

Access `Destinations > API > Logs` to see logs across all endpoints, and `Destinations > API > [Select endpoint] >Logs` to view logs for a specific endpoint.&#x20;

#### Understanding errors

Where a request had an error, details about the error will be seen on the right of the logs table. For example-&#x20;

<figure><img src="/files/hrskzyY66CXSG37WDNcA" alt=""><figcaption></figcaption></figure>

### Filtering Logs

Refine your log view using the following filters:

#### Time Range

* Request Start Time: Show requests from this date/time onwards
* Request End Time: Show requests up to this date/time

#### Endpoint Filter

Filter by specific API endpoint to focus on particular resources:

* /api/v2/entities
* /api/v2/transactions
* /api/v2/positions
* /api/v2/analytics

#### Status Filter

Filter by response status to quickly identify issues:

* All - Show all requests regardless of status
* Successful (2xx) - Show only successful requests
* Client Errors (4xx) - Show authentication and permission errors
* Server Errors (5xx) - Show server-side errors

#### Token Name Filter

Filter by API token to track usage by specific integrations or applications.

### Common Use Cases

#### Debugging Authentication Issues

If 401 errors are appearing:

1. Filter logs by Status: Client Error
2. Verify the Token Name matches active credentials
3. Confirm the requesting user's IP address is whitelisted (if applicable)
4. Check that credentials haven't expired

#### Monitoring API Performance

Track request duration to identify:

* Slow-performing queries that may need optimization
* Patterns in response times across different endpoints
* Impact of date ranges or result limits on performance

#### Auditing API Usage

* Filter by Token Name to see activity from specific applications
* Use the time range filter to generate usage reports for specific periods
  * For a bulk export, contact Landytech

#### Verifying Data Requests

After making API calls, users can check the logs to confirm:

* Requests were received and processed successfully
* Correct endpoints were called
* Expected response times were achieved

### Best Practices

* Check logs immediately when troubleshooting integration issues
* Filter by recent time periods for faster results when debugging
* Monitor 401/403 errors which may indicate credential or permission issues
* Review request durations to optimise query parameters for better performance
* Use Token Names to distinguish between production and development environments


# Glossary

This page explains key concepts to successfully use the Sesame Data API.

#### Asset

Cash, a liquid investment, loan, derivative or private investment which can be transacted or held. Each asset has a unique `ASSET.ID`, which can be used as a primary key if maintaining an investment master.

Note: there is no split between securities and cash, or assets and liabilities: all are 'assets'.

#### Position

An asset held in a currency within an entity on a date. For example, ASSET.ID `900` with market value in `USD` held in ENTITY.ID `1` on `2026-01-02`.

#### Entity

An entity is an object which contains on or more position. Other than the `entities` endpoint, all API requests require an entityId in the request. \
\
An entity can either be a `Portfolio` , a `Vehicle` or a `Consolidation`. A `Portfolio` contains a collection of holdings from a single feed. A `Vehicle` (also referred to as a legal entity) is an aggregation of the positions and transactions of one or more portfolios. A `Consolidation`  is a custom consolidation of selected `Portfolios` and `Vehicles` with adjustable weights, allowing for specific combinations of other entities in a way that does not reflect the legal reality.

Each entity has a unique `ENTITY.ID`, which can be used as a primary key if maintaining an entity mapping table.

#### Pipeline and Date Publication

After receipt of Position and Transaction data for a date, data flows through the Sesame pipeline before being available in the various endpoints. The pipeline runs data integrity checks, builds consolidations and computes risk. After successful completion, the processed date will have pipeline status of `Ready` , and data for this date can be requested from an endpoint. You can see this status, as well as when an entity was published in the `entities` endpoint. &#x20;


