# Welcome to KAIO

## Overview

KAIO is a protocol purpose-built for RWAs that enables the distribution of alternative assets through the use of blockchain technology. The KAIO protocol utilizes smart contracts to automate and simplify fund issuance and distribution logic, while retaining full compliance. Its tokenization engine allows for investors to access institutional funds and utilise them on DeFi with lower minimums and higher liquidity than traditional ones.

## Get Started

#### Overview

{% content-ref url="/pages/iUbMIKnjzvkiobYVASB1" %}
[Introduction](/overview/what-we-do)
{% endcontent-ref %}

{% content-ref url="/pages/DfAiKB8WiegCSRFIbz4V" %}
[Products](/overview/products)
{% endcontent-ref %}

{% content-ref url="/pages/oBt48uw4mv3Y7Bcfs14m" %}
[Architecture](/how-kaio-works/architecture)
{% endcontent-ref %}

{% content-ref url="/pages/qBcdDITW5wQXhCkU9P0O" %}
[Why KAIO?](/overview/why-kaio)
{% endcontent-ref %}

{% content-ref url="/pages/3XjogVKceMn7rSGyzJPX" %}
[FAQs](/overview/faqs)
{% endcontent-ref %}

#### Community

{% content-ref url="/pages/6hFQpOmS5bPO4MblfVit" %}
[How Do I Get Involved?](/community/how-do-i-get-involved)
{% endcontent-ref %}

{% content-ref url="/pages/ebAcATUk7HzdjvYOZ20U" %}
[Community Airdrop Phase 1](/community/community-airdrop-phase-1)
{% endcontent-ref %}

{% content-ref url="/pages/JYCximE8P9A39vZtVrJK" %}
[Broken mention](broken://pages/JYCximE8P9A39vZtVrJK)
{% endcontent-ref %}

#### Guide To Using KAIO

{% content-ref url="/pages/wNdaLmkpQmmimO322Hk7" %}
[KAIO App](/guide-to-using-kaio/kaio-app)
{% endcontent-ref %}

{% content-ref url="/pages/LYhT1RuhJjHp5en1rwTW" %}
[API](/guide-to-using-kaio/understanding-projects)
{% endcontent-ref %}

#### How KAIO Works

{% content-ref url="/pages/ezUQnPfpJNO7O87yXaNB" %}
[Smart Contracts](/how-kaio-works/smart-contracts)
{% endcontent-ref %}

#### Product Operations

{% content-ref url="/pages/1wa3wDNXBtE7jKwSpSZY" %}
[Security](/product-operations/security)
{% endcontent-ref %}

{% content-ref url="/pages/aRsGLYdEux8kp0oorxZx" %}
[Monitoring](/product-operations/monitoring)
{% endcontent-ref %}

{% content-ref url="/pages/oRhxMUEqEZoLSbJLtypk" %}
[Availability](/product-operations/availability-management)
{% endcontent-ref %}

{% content-ref url="/pages/QW2xWkDN99JIfpq1mm6N" %}
[Disaster Recovery](/product-operations/disaster-recovery)
{% endcontent-ref %}


# Introduction

KAIO is a programmable protocol designed for the compliant issuance and lifecycle management of institutional financial assets. Deployed on Ethereum mainnet, it combines the security and settlement guarantees of the world’s leading smart-contract network with strict regulatory safeguards and automated back-office workflows.

Through its smart contracts, KAIO streamlines investment execution, settlement, and asset servicing for managers and advisors. A modular compliance engine ensures every transaction aligns with jurisdictional rules and investor-level requirements, giving institutions confidence in on-chain operations.

Distributors and wealth platforms can integrate via robust APIs and the KAIO Gateway, gaining access to infrastructure, data, and services without building their own blockchain stack. For investors, this means direct access to institutional-grade financial products that are composable with DeFi and transferable across supported networks at low cost.

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

Composability is built into KAIO. Tokenised assets can move across major networks like Solana, Avalanche, Polygon, Sui, TON, and more—enabling seamless integration with DeFi protocols, liquidity pools, and settlement layers. As a result, regulated products remain portable, tradable, and usable across ecosystems rather than locked into a single chain.

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


# Products

**KAIO brings real-world assets into open finance while preserving the safeguards that regulators and institutions require.**\
By combining blockchain programmability with a robust compliance framework, KAIO enables regulated funds and institutional products to be issued, transferred, and settled on-chain—all while meeting legal obligations and investor protections.

The platform is built for composability across networks, giving investors and managers access to liquidity and making tokenised positions portable, tradable, and usable as collateral.

And it goes beyond simple instruments: KAIO has already proven it can support complex strategies from leading issuers—from money-market portfolios to private credit and digital asset products. This gives managers confidence that even the most sophisticated investments can be offered in a fully compliant, on-chain format.

*Here are few KAIO tokenized funds from top-tier issuers:*

{% columns %}
{% column %}

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

<figure><img src="/files/zmdtIJCtEkHhlmWowMRq" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column %}

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

<figure><img src="/files/QGwqr2Yf93sq5JP4ynmQ" alt=""><figcaption></figcaption></figure>
{% endcolumn %}
{% endcolumns %}

***

### *Disclaimer*

*The information contained on this website is not intended to provide, and should not be relied upon for, investment, accounting, legal or tax advice. Any fund products referenced on this website are solely for access by onboarded Accredited Investors and/or Institutional Investors, as defined by the Securities and Futures Act 2001 (as may be amended from time to time) in Singapore, or its equivalent in other jurisdictions. Further information about the funds will only be provided to eligible Accredited Investors and/or Institutional Investors as permitted by any applicable marketing regulations.*

*All such prospective investors should consult their own professional advisers as to the legal, investment, regulatory, tax, financial and/or other matters relevant to the suitability and consequences of an investment in any fund for such prospective investor. The contents of this website are not to be construed as an offer to sell or solicit an offer to buy any financial instruments in any jurisdiction. This does not constitute any form of regulated financial advice, and your independent financial advisor should be consulted prior to taking any investment decision(s). Please also note that past performances are not indicative of future performance.*

*Conduit Asset Management Pte. Ltd. (the “Manager”) is the investment manager for the above listed funds. The Manager is incorporated in the Republic of Singapore and licensed by the Monetary Authority of Singapore (“MAS”) who holds a Capital Markets Services License issued by the MAS. MAS has no responsibility for reviewing, verifying, and approving the contents of this website and/or other associated documents. The contents may not be reproduced or referenced, either in part or in full, without prior written permission from the Manager.*

*NO OFFER OR INVITATION TO SUBSCRIBE FOR SHARES IS BEING MADE TO THE PUBLIC IN THE CAYMAN ISLANDS. “Public” for these purposes shall have the same meaning as ‘public in the Islands’ as defined in the Cayman Islands Mutual Funds Act (Revised). However, shares may be beneficially owned by persons resident, domiciled, established, incorporated or registered pursuant to the laws of the Cayman Islands.*


# Why KAIO?

KAIO combines institutional-grade infrastructure with DeFi-native composability in a way that few platforms do. While many RWA projects stop at basic tokenization, KAIO is purpose-built as a programmable AppChain to enable true onchain utility - across lending, trading, collateralization, and more - without sacrificing compliance.

What further sets KAIO apart is its backing: Laser Digital (part of the Nomura Group, one of the world’s largest financial institutions) and WebN Group (founded by Alan Howard of Brevan Howard, one of the largest macro hedge funds globally) are not only investors but also strategic partners. Their support brings deep institutional credibility and governance standards that few in the space can match.


# FAQs

**The Brand**

<details>

<summary><strong>What does KAIO mean?</strong></summary>

1. KAIO is derived from the Finnish word for “gleaming light,” reflecting our ambition to bring clarity, transparency, and modern infrastructure to the fragmented world of traditional finance.
2. The name symbolizes a new era where institutional capital can flow securely and efficiently into decentralized finance — illuminating a path forward for tokenized real-world assets.

</details>

<details>

<summary><strong>Did KAIO recently rebrand from Libre Capital?</strong></summary>

1. Yes! The rebrand from Libre Capital to KAIO marks a pivotal shift in our evolution. While Libre laid the foundation by bringing compliant real-world assets (RWAs) onchain, KAIO expands this vision to become a full-stack AppChain platform purpose-built for institutional DeFi.
2. KAIO represents more than a new name — it signals a deeper commitment to interoperability, composability, and institutional scale. With the launch of the Bitcoin Diversified Yield Fund and over $100 million in assets tokenized, the new brand reflects our ambition to lead the next chapter of RWA finance.

</details>

<details>

<summary>What does KAIO actually do?</summary>

1. KAIO provides the tokenization infrastructure and onchain access to traditional institutional grade funds. We are a technology platform that acts as the bridge between the world of TradFi and DeFi. We work with world-class issuers to bring these highly specialized products to the broader crypto market. Doing so allows us to provide greater access with smaller investment tickets to qualified investors. This approach allows us to maintain institutional-grade compliance while enabling composability across DeFi.

</details>

**Product**

<details>

<summary><strong>What is unique about the KAIO ?</strong></summary>

1. KAIO is the first RWA platform built specifically for tokenized funds and institutional DeFi. KAIO’s architecture is optimized for compliant fund issuance, cross-chain interoperability, and composability across DeFi protocols. Assets tokenized via KAIO can be deployed across multiple ecosystems through omnichain infrastructure, while retaining embedded compliance and transfer controls.
2. The platform also integrates native support for fund lifecycle events - such as subscriptions, redemptions, and capital calls - making it uniquely suited to bridge the operational needs of fund managers with the speed and efficiency of DeFi.

</details>

<details>

<summary><strong>What regulatory licenses does KAIO holds in order to tokenize financial products?</strong></summary>

1. KAIO itself does not operate as a licensed fund manager. Instead, we partner with regulated financial institutions, licensed investment managers, who manage the underlying products.
2. KAIO’s role is to provide the tokenization infrastructure and onchain access. . This approach allows us to maintain institutional-grade compliance while enabling composability across DeFi.

</details>

<details>

<summary><strong>How many assets have been tokenized by KAIO to date?</strong></summary>

1. To date, KAIO has facilitated the tokenization of over $200 million in live assets across multiple chains. In addition, we have signed agreements for the tokenization of $500 million in assets related to the Telegram Bond Fund in partnership with TON Foundation, and $100 million in committed capital for the newly tokenized Bitcoin Diversified Yield Fund, managed by Laser Digital.
2. Beyond these, we maintain a strong pipeline of institutional issuers and funds preparing to tokenize through the KAIO platform, reflecting growing market confidence in our infrastructure and regulatory-first approach.

</details>

<details>

<summary><strong>What differentiates KAIO from other RWA tokenization platforms like Ondo, Securitize, or Superstate?</strong></summary>

1. KAIO combines institutional-grade infrastructure with DeFi-native composability in a way that few platforms do. While many RWA projects stop at basic tokenization, KAIO is purpose-built as a programmable AppChain (as part of the roadmap) to enable true onchain utility - across lending, trading, collateralization, and more - without sacrificing compliance.
2. What further sets KAIO apart is its backing: Laser Digital (part of the Nomura Group, one of the world’s largest financial institutions) and WebN Group (founded by Alan Howard of Brevan Howard, one of the largest macro hedge funds globally) are not only investors but also strategic partners. Their support brings deep institutional credibility and governance standards that few in the space can match.

</details>

<details>

<summary><strong>What chains does KAIO currently support and what’s the roadmap for additional chain integrations?</strong></summary>

1. KAIO currently supports Ethereum, with integrations on Polygon, Avalanche, SEI, Solana, NEAR, Hedera, XDC to name a few. Our AppChain architecture allows for rapid rollout of new chain integrations.
2. Our roadmap is designed to enable omnichain access to institutional-grade assets, wherever users are.

</details>

<details>

<summary><strong>How does KAIO approach compliance across different jurisdictions?</strong></summary>

1. KAIO does not hold direct regulatory licenses but operates through partnerships with regulated investment managers and distributors across the jurisdictions where our products are offered. Our regulated fund manager and fund administrator embed best-in-class KYC, AML, and investor eligibility checks into every transaction, and ensure compliance frameworks are upheld.
2. This modular, partner-led approach enables both scalability and jurisdictional flexibility, while maintaining the highest standards of investor protection.

</details>

**Articles**


# How Do I Get Involved?

The best ways to get involved with the KAIO community are to follow us on X ([KAIO\_xyz](https://x.com/KAIO_xyz)) and on Telegram (<https://t.me/kaio_rwa>).


# Community Airdrop Phase 1

<https://www.kaio.xyz/community>


# KAIO App (original)

Website for KAIO

## Content Guide

The Website section of the KAIO documentation provides a learning resource to become familiar with the platform's frontend. This page provides an overview of the KAIO platform, its users, what they can do, and the relationships between them. Each sub-section relates to a particular user type and contains:

* **\[User] How-Tos:** The how-to guides contain the most usual flows for each type of user, with explanations and video demonstrations.
* **\[User] Pages:** The reference pages contain a list of the accessible pages for each type of user, along with what they can do in each one.

## KAIO Website

The KAIO Website enables users to interact with KAIO in a simple manner through a Graphic User Interface.

{% hint style="info" %}
The KAIO Website currently has limited features, for additional functionality the [KAIO API](/guide-to-using-kaio/understanding-projects) may be used.
{% endhint %}

## User Types

There are four user types, as described in the following table:

<table data-full-width="true"><thead><tr><th>User Type</th><th>Description</th><th>Common Flows</th><th>Pages</th></tr></thead><tbody><tr><td><strong>Investor</strong></td><td>Investors are clients of private banks. They sign agreement contracts and let their Dealer manage their orders on their behalf.</td><td><p><a href="/pages/9M4yDLYP9ApenfCzoVVc#log-in">Login</a></p><p><a href="/pages/9M4yDLYP9ApenfCzoVVc#subscription-orders">Subscription Orders</a><br><a href="/pages/9M4yDLYP9ApenfCzoVVc#sign-creations-of-orders">Sign Creations of Orders</a></p></td><td><a href="/pages/ZPbC0YeutzCwSmVhkD09#dashboard">Dashboard</a><br><a href="/pages/ZPbC0YeutzCwSmVhkD09#transactions">Transactions</a><br><a href="/pages/ZPbC0YeutzCwSmVhkD09#products">Products</a><br><a href="/pages/ZPbC0YeutzCwSmVhkD09#holdings">Holdings</a><br><a href="/pages/ZPbC0YeutzCwSmVhkD09#profile">Profile</a></td></tr><tr><td><strong>Dealer</strong></td><td>Dealers are private banks and advisors that are responsible for onboarding investors, managing their profiles, and creating orders on their behalf.</td><td><a href="/pages/Jsreuh5ZDfMrAqGyBAq7#log-in">Login</a><br><a href="/pages/Jsreuh5ZDfMrAqGyBAq7#onboard-investors">Onboard Investors<br></a><a href="/pages/Jsreuh5ZDfMrAqGyBAq7#manage-the-lifecycle-of-orders">Manage the Lifecycle of Orders<br></a><a href="/pages/Jsreuh5ZDfMrAqGyBAq7#download-files">Download Files</a></td><td><p><a href="/pages/tCgO0QDKX3xLLMiaTXkE#transactions">Transactions</a></p><p><a href="/pages/tCgO0QDKX3xLLMiaTXkE#products">Products</a></p><p><a href="/pages/tCgO0QDKX3xLLMiaTXkE#holdings">Holdings</a><a href="/pages/tCgO0QDKX3xLLMiaTXkE#transactions"><br></a><a href="/pages/tCgO0QDKX3xLLMiaTXkE#user-data">User Data</a></p><p><a href="/pages/tCgO0QDKX3xLLMiaTXkE#fund-whitelist">Fund Whitelist</a></p><p><a href="/pages/tCgO0QDKX3xLLMiaTXkE#custom-fields">Custom Fields</a></p></td></tr><tr><td><strong>Fund Admin</strong></td><td>Fund Admins are responsible for managing the Funds they control, and all the Instruments within the Fund.</td><td><a href="/pages/TqXwMr0gX1s5pH9D5JJO#log-in">Log In<br></a><a href="/pages/TqXwMr0gX1s5pH9D5JJO#review-orders">Review Orders<br></a><a href="/pages/TqXwMr0gX1s5pH9D5JJO#grant-fund-access">Grant Fund Access<br></a><a href="/pages/TqXwMr0gX1s5pH9D5JJO#download-files">Download Files</a></td><td><p><a href="/pages/uf2KjzwnHhOlhpGaFOVu#transactions">Transactions</a></p><p><a href="/pages/uf2KjzwnHhOlhpGaFOVu#nav">NAV</a></p><p><a href="/pages/uf2KjzwnHhOlhpGaFOVu#settle">Settle</a><br><a href="/pages/uf2KjzwnHhOlhpGaFOVu#holdings">Holdings</a></p><p><a href="/pages/uf2KjzwnHhOlhpGaFOVu#fund-whitelist">Fund Whitelist</a></p></td></tr><tr><td><strong>Libre Admin</strong></td><td>The Libre Admin has control of the Libre platform. They are responsible for settling orders.</td><td><a href="/pages/79jTCO4Tiac5LiYxRKFz#log-in">Log In</a></td><td><p><a href="/pages/Yv2egPcEHhcPpc5KIdhC#transactions">Transactions</a><br><a href="/pages/Yv2egPcEHhcPpc5KIdhC#settle">Settle</a></p><p><a href="/pages/Yv2egPcEHhcPpc5KIdhC#fund-whitelist">Fund Whitelist</a></p></td></tr></tbody></table>

## Object Definitions

* **Fund**: Houses a set of Instruments, and is managed by a Fund Admin.
* **Instrument**: Describes the tokenized asset itself, also containing the custom logic of the asset.
* **Order**: Request made to subscribe or redeem the tokenized asset, going through multiple stages before being finalized. An order's status can be one of the following:
  * CREATED
  * CONFIRMED
  * CANCELED
  * REJECTED
  * UNDER\_REVIEW
  * ACCEPTED
  * LOCKED SETTLED


# Investor

{% content-ref url="/pages/9M4yDLYP9ApenfCzoVVc" %}
[Investor How-Tos](/guide-to-using-kaio/app/investor/investor-how-tos)
{% endcontent-ref %}

{% content-ref url="/pages/ZPbC0YeutzCwSmVhkD09" %}
[Investor Pages](/guide-to-using-kaio/kaio-app/investor-pages)
{% endcontent-ref %}


# Investor How-Tos

How-to guide for common Investor flows

{% hint style="info" %}
You can change the video quality in the video settings menu.
{% endhint %}

## Log in

To access the KAIO platform you should log in using your email and password. Then you will also have to provide your one-time token to pass the two-factor authentication.

{% embed url="<https://drive.google.com/file/d/14fStDl67hCLMtiXvzvIJ_THWY3QbMGcz/view>" fullWidth="true" %}

## Subscription orders

As a KAIO platform investor, on the **products** page you can see the list of funds and their instruments that you are allowed to access. You can use the button Investor of one of the fund's instruments to create a new subscription order. At this point, you must input the amount of the order and read and agree on the subscription details.

By clicking the button Create Order you will initiate your subscription order transaction. Now you can review your order request and cancel or confirm it. Once the order is confirmed the KAIO Platform will automatically generate the subscription agreement document filled out with all the information related to the order transaction. At this stage, you should also receive this document in your email address. Make sure to sign the document to proceed with the order request. Once the subscription order has been signed you should be able to see the latest version of this document with your signature on the transactions page. At this point, your request must be approved by the Fund Admin before being able to proceed with further steps.

{% embed url="<https://drive.google.com/file/d/1aOI8-ugxH5ktX3Ddtkrbk9_FGvqXTZz8/view>" fullWidth="true" %}

## Sign Creations of Orders

As an investor, you will receive an email whenever an Order is confirmed. This email contains the link to the Agreement Contract, which you must sign using DocuSign so the Subscription or Redemption Order can be reviewed and locked.

{% embed url="<https://drive.google.com/file/d/1xQPplDRRMl-smQndlwqLg_MylkoUKbFe/view?usp=drive_link>" fullWidth="true" %}


# Dealer

{% content-ref url="/pages/Jsreuh5ZDfMrAqGyBAq7" %}
[Dealer How-Tos](/guide-to-using-kaio/app/dealer/dealer-how-tos)
{% endcontent-ref %}

{% content-ref url="/pages/tCgO0QDKX3xLLMiaTXkE" %}
[Dealer Pages](/guide-to-using-kaio/app/dealer/dealer-pages)
{% endcontent-ref %}


# Dealer How-Tos

How-to guide for common Dealer flows

{% hint style="info" %}
You can change the video quality in the video settings menu.
{% endhint %}

## Log In

To access the KAIO platform you should perform the log in using your email and password. Then you will also have to provide your one-time token to pass the two-factor authentication and complete the sign-in process.

{% embed url="<https://drive.google.com/file/d/14fStDl67hCLMtiXvzvIJ_THWY3QbMGcz/view>" fullWidth="true" %}

## Onboard Investors

To onboard an investor you need to register them on the **user data** page. Here you can click on the button Onboard User and fill out the onboarding form by providing the investor's information such as personal profile, bank address or any custom fields. At this stage, you can also provide the investor onchain fields like KYC, sanctions checks and the jurisdiction of the investor. Finally you can also request access to specific funds for the Investor before submitting the investor onboarding form.

{% embed url="<https://drive.google.com/file/d/17FF2gp8jb9xP3tjyhXnJnN1_80DQdJR6/view>" fullWidth="true" %}

## Manage Order Lifecycle

On the **products** page, you can manage orders on their behalf. To create a new order you need to access the page products, select a products instrument and click on the button subscription or redemption based on the kind of order you want to create.

As a dealer you will be able to create and confirm the order on behalf of one of your investors. Then the investor has to sign in the agreement document and the fund admins have to vote to settle the order request.

**Subscriptions:**

{% embed url="<https://drive.google.com/file/d/1na6EikAQfo6BbICXC24irK5hZG_SnG2E/view?usp=drive_link>" fullWidth="true" %}

**Redemptions:**

{% embed url="<https://drive.google.com/file/d/1KEGo21bJulKTc94qIRpG7ZqrJZB_Tovv/view?usp=drive_link>" fullWidth="true" %}

## Exporting Holdings Information

You can view your investor's current holdings and past settlements by accessing the **holdings** page. You can also download this information by clicking the download button at the top of the list.

{% embed url="<https://drive.google.com/file/d/1Fy1Td4srx82m_9Ro8iTonX1Iri6ZyaxY/view>" fullWidth="true" %}


# Dealer Pages

Pages accessible by Dealers

## Transactions

The transaction page provides an overview of the dealer investor's orders. Here the dealer can see the details of each order and can manage the orders lifecycle.

{% embed url="<https://drive.google.com/file/d/1nsWuccdn59429f84WBAAgzCSDKxx7guC/view>" %}

## Products

On the Products page, the dealer can see the list of funds for which it is enabled to perform operations. Here the dealer can see the instruments of each fund and the dealer can initiate a subscription or redemption process on behalf of one of its investors.

{% embed url="<https://drive.google.com/file/d/17wNiB01VFG3hif4sbYdSXkhOFOMQ4pxA/view>" %}

## Holdings

On the holdings page, the dealer can view the investor's current holdings and past settlements grouped by the investor. The dealer can also download this information by clicking the Download button at the top of the list.

{% embed url="<https://drive.google.com/file/d/1BHLCcFCbCGgJ3kmecDHARMUUXCf7_3gt/view?usp=sharing>" %}

## Investors

The pages under this voice are mainly related to the dealer's investors.

### User Data

The user data page displays the list of all the investors associated with the dealer. Here the dealer can:

* edit the investor profile
* review any changes on the investor profile request by the investor
* open the wallet information of the investor
* onboard a new investor

{% embed url="<https://drive.google.com/file/d/1ux2HfJXgGH_hjQ9nm4Ag376J4MFws2ko/view>" %}

### Fund Whitelist

On the fund whitelist page, the dealer can see the list and the status of fund access requests of its investors. Here the dealer can also do a new fund request access on behalf of one of its investors.

{% embed url="<https://drive.google.com/file/d/10DO-oJQ83AuM-Mu872Jf-ue_I0O961Je/view>" %}

### Custom Fields

The custom fields page allows the dealer to set and view custom information for its investors. The information obtained with the custom fields might be needed for instruments with additional restrictions, or if in case the dealer decides to have additional requirements from its investors.

{% embed url="<https://drive.google.com/file/d/1WUB32HAZzDiUbyQnOvII-4Nlwcm4akM8/view?usp=sharing>" %}


# Fund Admin

{% content-ref url="/pages/TqXwMr0gX1s5pH9D5JJO" %}
[Fund Admin How-Tos](/guide-to-using-kaio/app/fund-admin/fund-admin-how-tos)
{% endcontent-ref %}

{% content-ref url="/pages/uf2KjzwnHhOlhpGaFOVu" %}
[Fund Admin Pages](/guide-to-using-kaio/app/fund-admin/fund-admin-pages)
{% endcontent-ref %}


# Fund Admin How-Tos

How-to guide for common Fund Admin flows

{% hint style="info" %}
You can change the video quality in the video settings menu.
{% endhint %}

## Log In

To access the KAIO platform you should log in using your email and password. Then you will also have to provide your one-time token to pass the two-factor authentication.

{% embed url="<https://drive.google.com/file/d/1ydR5qpR_ivTiDjywVg7z2zJ98BsRJ9i4/view>" fullWidth="true" %}

## Review Orders

On the **transactions** page, as a fund admin of the KAIO platform, you can check the pending order requests from the investors on your fund instruments. For each of these pending requests, you can check the agreement document with the investor's signature and accept or reject the order request.

If you approve the order request then you can also vote together with the other admins of the fund to settle the order. Once the number of votes reaches the settle threshold the transaction will be settled.

{% embed url="<https://drive.google.com/file/d/1yVONBanRbK7Qq-OyOmN5pCG-uUP5GNEq/view>" fullWidth="true" %}

{% embed url="<https://drive.google.com/file/d/1yVONBanRbK7Qq-OyOmN5pCG-uUP5GNEq/view>" fullWidth="true" %}

## Grant Fund Access

The page **fund whitelist** helps you to handle the incoming requests from investors for accessing one of your funds. Here you can also specify which instruments in the fund they can access.

{% embed url="<https://drive.google.com/file/d/1wEAd0P59tKzQkxeOGUWlj2DoS7ZU5Vc-/view>" fullWidth="true" %}

{% embed url="<https://drive.google.com/file/d/1wEAd0P59tKzQkxeOGUWlj2DoS7ZU5Vc-/view>" fullWidth="true" %}

## Export Holdings Information

The page **holdings** gives you an overview of the current holdings and past settlements of the investors who subscribed to your fund's instruments. This page offers you the possibility to download these data by clicking the download button at the top of the list.

{% embed url="<https://drive.google.com/file/d/1rLiwOv4FbRtqvHQo1sBjyEmBoXWlUb5a/view>" fullWidth="true" %}


# Fund Admin Pages

Pages accessible by Fund Admins

## Transactions

On the transaction page, you can view investor's orders for your instruments, check their status, and manage their lifecycle.

{% embed url="<https://drive.google.com/file/d/1UgI6yJC-e3sqCj7msDqJI4cRI5-yYua2/view>" fullWidth="true" %}

## NAV

The fund administrator diligently maintains the net asset value (NAV) for each financial instrument within the fund. This involves assessing share values on specific dates and discerning whether the NAV relies on audited or unaudited financial data. The distinction between the most recent audited and unaudited values significantly affects subscription and redemption processes, influencing investment choices and investor trust.

{% embed url="<https://drive.google.com/file/d/1736z7HDXnbGM7YzxnXi3qNCQPYTSQ54B/view>" fullWidth="true" %}

## Settle

The fund administrator plays a pivotal role in managing order settlements, diligently verifying payments linked to the locked orders before proceeding. This critical task ensures that funds are appropriately directed to the underlying investment in instances of subscription or accurately withdrawn in scenarios of redemption. Following this rigorous verification process, the fund administrator authorizes the settlement by casting a vote. While the default setting requires only a single vote from a fund administrator to finalize the settlement, this system is designed with flexibility in mind, allowing for configurations that necessitate multiple fund administrator votes to authorize a settlement. This added layer of approval can enhance the oversight and security of the settlement process, ensuring a higher level of scrutiny and accountability.

<div data-full-width="true"><figure><img src="/files/x394YaO6n4eZ99wFQY9K" alt=""><figcaption></figcaption></figure></div>

## Holdings

On the holdings page, you can view investor's current holdings and past settlements for your instruments. You can also download this information.

<div data-full-width="true"><figure><img src="/files/E4mxAAtuqU3BKenVw4L4" alt=""><figcaption></figcaption></figure></div>

## Fund Whitelist

The fund whitelist page shows the access investors have to your funds. From here you can grant or revoke access for them.

<div data-full-width="true"><figure><img src="/files/qQZLwOmZxsUTj2Vw2gw5" alt=""><figcaption></figcaption></figure></div>


# KAIO Admin

{% content-ref url="/pages/79jTCO4Tiac5LiYxRKFz" %}
[KAIO Admin How-Tos](/guide-to-using-kaio/app/libre-admin/libre-admin-how-tos)
{% endcontent-ref %}

{% content-ref url="/pages/Yv2egPcEHhcPpc5KIdhC" %}
[KAIO Admin Pages](/guide-to-using-kaio/app/libre-admin/libre-admin-pages)
{% endcontent-ref %}


# KAIO Admin How-Tos

How-to guide for common KAIO Admin flows

{% hint style="info" %}
You can change the video quality in the video settings menu.
{% endhint %}

## Log In

You can log in using your email and password.

{% embed url="<https://drive.google.com/file/d/14fStDl67hCLMtiXvzvIJ_THWY3QbMGcz/view>" fullWidth="true" %}


# KAIO Admin Pages

Pages accessible by the KAIO Admin

## Transactions

On the transaction page, you can view investor's orders, check their status, and manage their lifecycle.

<div data-full-width="true"><figure><img src="/files/kb45kqgf67qyo1QLpPwE" alt=""><figcaption></figcaption></figure></div>

## Settle

The settlement page allows you to settle subscription and redemption orders.

{% hint style="info" %}
You cannot settle individual orders, instead all pending orders are settled.
{% endhint %}

<div data-full-width="true"><figure><img src="/files/q5FAQYVPly0Bht6hxLWh" alt=""><figcaption></figcaption></figure></div>

## Fund Whitelist

The fund whitelist page shows the access investors have to particular funds. From here you can modify their access.

<div data-full-width="true"><figure><img src="/files/AAVoZpWQ5IaCf3cPsuRJ" alt=""><figcaption></figcaption></figure></div>


# KAIO App

### Overview

This section introduces the KAIO web application and explains how investors can use it to interact with tokenised funds. It provides:

* **Investor How‑Tos** – step‑by‑step guides for common tasks such as creating subscription and redemption orders, confirming orders, signing agreements and monitoring holdings.
* **Investor Pages** – a reference for each page available to investors (e.g. Portfolio, Orders, Products, Holdings, Profile) and the actions you can perform on them.

Additional personas (Dealer, Fund Admin, KAIO Admin) and their workflows will be documented in future versions of this guide.

### **Using the KAIO Website**

The KAIO web application offers an intuitive graphical interface for placing orders, reviewing investments and managing your account. Some advanced functions (e.g. bulk onboarding, custom compliance modules) are only available via the KAIO API and are therefore outside the scope of this investor‑focused release.

### **Object Definitions**

To help orient new users, the following terms are used throughout the guides:

<table><thead><tr><th width="114">Term</th><th>Description</th></tr></thead><tbody><tr><td><strong>Fund</strong></td><td>A pooled investment vehicle managed by a fund administrator and comprising one or more instruments.</td></tr><tr><td><strong>Instrument</strong></td><td>A specific tokenised share class within a fund. Instruments encapsulate custom logic (subscription windows, redemption rules, fees).</td></tr><tr><td><strong>Order</strong></td><td>A request to subscribe to or redeem an instrument. Orders progress through several statuses — <strong>CREATED</strong>, <strong>CONFIRMED</strong>, <strong>LOCKED</strong> and <strong>SETTLED</strong> — and may be <strong>CANCELLED</strong> or <strong>REJECTED</strong> if conditions aren’t met.</td></tr></tbody></table>


# Investor How-Tos

This section provides step‑by‑step instructions for the most common actions you’ll perform as a KAIO investor. Each guide includes concise explanations and, where applicable, screenshots or videos to walk you through the process from start to finish.

### **Investing in a KAIO Fund**

Learn how to browse available funds and instruments, initiate a subscription order, confirm it, sign the subscription agreement and monitor its status until settlement.

{% content-ref url="/pages/lqLcMbSsx3PCnzBkAymP" %}
[How To Invest in a KAIO Fund?](/guide-to-using-kaio/kaio-app/investor-how-tos/how-to-invest-in-a-kaio-fund)
{% endcontent-ref %}

### **Manage Your KAIO Investments Across Chains Compliantly**

Discover how to move your tokenised fund positions across supported networks via the Gateway. This guide covers selecting source and destination chains and wallets, choosing an asset and amount, and reviewing the transaction before sending.

{% content-ref url="/pages/7ksriM7BQTVtkQXJ6j2a" %}
[Minting Your Investments Outside of Ethereum](/guide-to-using-kaio/kaio-app/investor-how-tos/minting-your-investments-outside-of-ethereum)
{% endcontent-ref %}

### **Redeeming from a Fund on KAIO**

Follow the steps to place a redemption order when you want to sell your tokenised shares. You’ll see how to create, confirm and lock a redemption, understand any applicable redemption windows or fees, and track settlement.

{% content-ref url="/pages/7lBuuncbMcdvzzL37u7z" %}
[How to Redeem from a Fund on KAIO](/guide-to-using-kaio/kaio-app/investor-how-tos/how-to-redeem-from-a-fund-on-kaio)
{% endcontent-ref %}

Use these how‑tos as a reference whenever you need to perform an investment action on KAIO.


# How To Access RWAs on KAIO

Before you can invest in a KAIO fund, you must request access. This process respects reverse solicitation rules, ensuring that you initiate the engagement rather than the platform approaching you. By requesting access yourself, you affirm that you are proactively seeking to invest in a particular fund, which helps KAIO adhere to regulatory requirements.

{% hint style="info" %}
***What is Reverse Solicitation?***

*Reverse solicitation is a regulatory concept that requires the investor to take the first step in seeking access to a financial product. In practice, this means KAIO can only allow you to view detailed information about a fund and invest after you have explicitly requested access. The platform does not proactively market or solicit investments; instead, you control the process by indicating your interest.*
{% endhint %}

***

### **How to Request Access to a Fund on KAIO**

#### **Step‑by‑Step**

1. **Log in**\
   Sign in to your KAIO investor account.
2. **Navigate to the Products page**\
   From the main navigation menu, select **Products**.&#x20;
3. **Select a fund**\
   Each fund card displays basic details such as the product name, short description, strategy overview, legal structure, and minimum investment amount.
4. **Request access**\
   Click the **Request Access** button.&#x20;
5. **Confirm your request**\
   Your request will be marked as “In Review.” The fund’s investment manager will evaluate your request based on eligibility criteria.

{% columns %}
{% column width="50%" %}
**First Login View**

<figure><img src="/files/3bbRe6TPMhKTyaLZyKZ1" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column width="50%" %}
**Products View**&#x20;

<figure><img src="/files/r8gDsABGlys8DGLClIiO" alt=""><figcaption></figcaption></figure>
{% endcolumn %}
{% endcolumns %}

{% columns %}
{% column %}
**Request Access View**

<figure><img src="/files/LSB29gZZ7H9QFzRgwlRb" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column %}
**In Review Request Access View**

<figure><img src="/files/5B5D5x1TflxLZJKwZlZG" alt=""><figcaption></figcaption></figure>
{% endcolumn %}
{% endcolumns %}

***

### **Understanding Your Request Status**

Once submitted, your access request can move through several statuses:

* **In Review** – Your request has been received and is being assessed by the fund’s investment manager.
* **Approved** – Your request has been accepted; you can now proceed to get onboarded in the fund.
* **Rejected** – Your request did not meet eligibility requirements. You may contact the investment manager for more information.

You can track all your access requests and their statuses via the Products page **in your KAIO App**.

***

### **What Happens Next?**

After your request is approved, you gain full access to the fund details and can get onboarded to the fund following the standard investment process. Your account will allow you to invest, monitor your holdings, and manage your portfolio. If your request is rejected, KAIO will not provide access to the fund until criteria are met or the manager’s decision changes.


# How To Invest in a KAIO Fund?

KAIO makes it simple to allocate capital into alternative investments through a secure, digital-first process. On the platform, investing in a fund is referred to as "**subscribing", which** is the standard term used in the asset management world for initiating a new fund investment.

This article walks you through the step-by-step process of placing a **subscription order** on KAIO and explains how to track it through each stage.

***

### **What is a Subscription?**

A **subscription** is the process of investing in a fund. After committing a specific amount of your capital towards the purchase of fund units, you will be issued with a number of tokenised shares (in the KAIO fund feeder vehicle that has invested in such fund) proportionate to the amount you have subscribed and calculated based on the fund's then current NAV as at the next applicable dealing date.

***

### **How to Subscribe to a Fund on KAIO**

#### Step-by-Step

#### **1. Go to the Products Page**

From the main navigation panel, click on **Products where you can view a** list of funds in which you are eligible to invest, based on your personal profile metrics.

Each fund card on the Products page displays the following information related to such fund:

* Strategy overview
* Legal structure (e.g. Singapore VCC)
* Minimum investment amount
* Latest NAV (if available)

#### **2. Select a Fund**

Click on the fund card to view the selected fund's full details, including subscription timelines, fees (if applicable), and past NAV performance.

{% columns %}
{% column %}
**Products View**

<figure><img src="/files/WiRbLEmG7b4QTiHlniLh" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column %}
**Fund Details View**&#x20;

<figure><img src="/files/O3zRiuV6tLxAqcwT3hgN" alt=""><figcaption></figcaption></figure>
{% endcolumn %}
{% endcolumns %}

#### **1. Create the Order**

Go to the **Products** page and select the fund in which you would like to invest. Click **“Create Order”** and enter your desired investment amount, which amount must be no less than the fund’s minimum investment amount.

#### **2. Preview the Order**

Before an order is placed, you will be able to preview your order and review the following in relation to your selected fund:

* Investment amount
* Estimated number of units
* Latest NAV (if available)
* Selected payment method

Confirm everything is accurate before continuing.

{% columns %}
{% column %}
**Create Order View**

<figure><img src="/files/QyQOnvfRm2msSLaQcOEc" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column %}

#### Preview Order View&#x20;

<figure><img src="/files/jIYTG2W02iKjn8x3Pw7N" alt=""><figcaption></figcaption></figure>
{% endcolumn %}
{% endcolumns %}

#### **3. Sign the Subscription Agreement**

KAIO generates a **digital subscription agreement** for your order, based on the fund’s terms and the desired investment amount.

Next, you will be prompted to review and sign the subscription agreement directly on the platform. Offline signing is also supported where required.

**Order Signing View**

<figure><img src="/files/L5ziw47qjNLoBhSSMJ6V" alt="" width="563"><figcaption></figcaption></figure>

#### **4. Pay**

After signing, you will be instructed to complete the payment using your selected method.

KAIO currently supports:

* **Traditional bank transfers** – Wire funds to the depositary account listed in your order summary
* **On-chain digital payments** – Pay using **stablecoins** by connecting your wallet directly on the platform

All payment instructions will be shown after signing, with your chosen method clearly indicated.

{% columns %}
{% column %}

#### **Paying With Stablecoin**

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

#### **Pay Your Order**

<figure><img src="/files/0PKa4VqM2zSzdr9mtSIf" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column %}

#### Connect Your Wallet

![](/files/dFvhPi2NFbwDGMqM3bhx)

#### Order details

<figure><img src="/files/LCaJCOqbWJdEILYPuVZs" alt=""><figcaption></figcaption></figure>
{% endcolumn %}
{% endcolumns %}

***

### **Understanding Your Order Status**

Once submitted, your order will move through five possible statuses:

* **Signing** – Waiting for your digital signature on the subscription agreement
* **Awaiting Payment** – Agreement is signed, now waiting for funds
* **Paid – Awaiting Approval** – Payment received, pending fund admin verification
* **Awaiting Settlement** – Approved, queued for allocation at the next dealing date
* **Completed** – Your investment is confirmed, and fund tokens are issued

You can view and track all your orders at any time via the **Orders** tab.

***

### What Happens Next?

Once your order is completed, the fund units will be issued directly to your **KAIO wallet on Ethereum** — the same wallet created for you during onboarding.

You can check your updated position in the **Portfolio** page, with real-time NAV tracking.

From the Portfolio page, you can:

* **Hold and monitor** your investment directly on the platform
* **Bridge your tokenised units** to supported DeFi protocols via the KAIO Gateway
* **Redeem** your position, if you wish to exit at a future dealing window


# Minting Your Investments Outside of Ethereum

The **KAIO Gateway** allows you to move your tokenised fund units to **whitelisted wallets and DeFi protocols** across Ethereum and supported networks — with full compliance, transparency and security.

***

### **Bridging Assets Between Networks**

Bridging lets you move your fund tokens from the KAIO platform to **whitelisted external wallets or DeFi protocols,** while maintaining on-chain traceability and legal ownership.

You can use the KAIO Gateway to:

* Send tokens to your own wallet (**cross-chain)** on supported networks
* Transfer to **approved DeFi protocols** (vaults, staking, lending, trading)

Only wallets and apps that have been whitelisted are permitted to receive KAIO assets. This restriction ensures secure and compliant composability.

#### **Bridging Fees**

* **KAIO wallet → external wallet or DeFi**: KAIO pays the gas fee (included in your management costs)
* **External wallet → other destination**: You pay the gas fee on the source network

Fees are shown before transaction submission so there are no surprises.

***

### **Same-Network Transfers**

Not all transfers require bridging between blockchains. Sometimes, you just need to move your fund units **between two wallets on the same network** (e.g. Ethereum → Ethereum).

KAIO supports these same-network transfers between:

* **Your KAIO wallet and an external, whitelisted wallet you control**
* **Two whitelisted wallets (e.g. to a custodian, or another approved address)**

#### **Same-Network Transfer Fees**

In same-network transfers:

* **You pay the gas fee** on the source network when initiating from an **external wallet**
* **KAIO covers the gas fee** when sending from your **KAIO wallet**, and the cost is included in your management fee

All fees are shown before the transaction is submitted to ensure full fee transparency.

***

### **How to Bridge Using KAIO Gateway**

### **Step by Step**

1. Navigate to the **Gateway** tab on the **KAIO** platform
2. Select **origin and destination networks**
3. **Choose your origin wallet:** either your **KAIO** wallet or a whitelisted external wallet (which you control)
4. **Choose your destination wallet**: either your **KAIO** wallet or an external wallet (which you control) or a whitelisted DeFi protocol
5. Enter the amount to transfer
6. Review the Gateway transfer **fees**
7. Click **“Confirm & Send”**, then sign the transaction with your wallet

> 🔐 You must connect your whitelisted external wallet to execute Gateway transfers. Ensure you have enough ETH or the native token for gas.

#### Executing a Gateway Transfer

{% columns %}
{% column %}
**Create Bridge Transfer View**

<figure><img src="/files/4enkMqn8h85gNK2rNXKr" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column %}

#### Preview Bridge Transfer View&#x20;

<figure><img src="/files/7tjudkw82T1IendBA9JY" alt=""><figcaption></figcaption></figure>
{% endcolumn %}
{% endcolumns %}

***

### **Understanding Transaction Status**

Once you initiate a bridging or transfer action, **KAIO** will track it in real time and you can follow the transaction’s progress directly in the **Gateway** and **Activities** views.

Here’s what each status means:

* **Processing** – Transaction is being validated and prepared
* **In Transit** – Transfer has been initiated on-chain
* **Transferred** – Assets have been successfully delivered to the destination wallet or protocol
* **Failed** – Something went wrong (you’ll see an error message and support guidance)

{% columns %}
{% column %}
**Activities View**

<figure><img src="/files/vNjUxWQeMGU9qPQO4rFR" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column %}

#### Bridge Transfer View&#x20;

<figure><img src="/files/yAh67ApYkvBp8mo2amNd" alt=""><figcaption></figcaption></figure>
{% endcolumn %}
{% endcolumns %}

***

### What Happens Next?

With secure bridging, same-network transfers, and full transaction traceability, the **KAIO** Gateway turns your fund positions into **on-chain assets you can move, manage, and put to work**.


# How to Redeem from a Fund on KAIO

If you have already invested in a fund through **KAIO** and now wish to withdraw some (or all) of your capital from such fund, you may do so by submitting a partial or full **redemption request** directly through the platform.

This article walks you through the process of submitting a redemption order, what to expect based on each fund’s specific rules, and how to track your order from submission of the redemption order to payout.

***

### **What is a Redemption?**

A **redemption** is the process of withdrawing money from a fund in which you have invested. **KAIO** processes your request based on the fund’s schedule and valuation (NAV) at the time of redemption.

Depending on the terms applicable to the particular fund in question, you may be able to initiate either a partial or a full withdraw of your capital from such fund. The redemption terms are specific to each fund and may include provisions relating to:

* **When you are allowed to redeem** (e.g. monthly or quarterly)
* **How far in advance you need to submit a request** (notice periods)
* **The minimum amount you can withdraw**
* **Any lock-ups or early withdrawal fees**

These details will be clearly displayed on the fund’s page before you submit your redemption request.

***

### **How to Redeem**&#x20;

### **Step by Step**

#### 1. **Go to the Products Page**

From the main navigation pane, click on **Products where you will be shown all the funds in which you are currently invested and from which you are eligible to initiate redemptions.**

#### 2. **Select the Fund**

Click on the fund from which you wish to redeem. You with then see your current investment amount in such fund together with the next available redemption date, and any applicable redemption terms.

#### 3. **Click “Sell”**

If redemptions are currently allowed, you’ll see a **“Sell”** button. Click it to initiate your redemption.

#### 4. **Choose How Much to Withdraw**

If partial redemptions are permitted, you will be permitted to select the percentage of your total investment in the fund which you wish to redeem.

#### 5. **Review and Confirm**

Check all details, including where the redemption proceeds will be sent (e.g. your approved bank account or wallet). Then click **“Confirm”** to submit the redemption request.

{% columns %}
{% column %}
**Create Redemption Order**

<figure><img src="/files/DR29OQkFscPHkna577NQ" alt=""><figcaption></figcaption></figure>
{% endcolumn %}

{% column %}

#### Preview Redemption Order&#x20;

<figure><img src="/files/SA2uUwxAHMug9X3QnHIj" alt=""><figcaption></figcaption></figure>
{% endcolumn %}
{% endcolumns %}

***

### **Understanding Your Order Status**

Once you submit your redemption request, your order will move through the following statuses:

* **Signing** – The redemption request is being reviewed and signed (if applicable)
* **Awaiting Approval** – The request is submitted and pending fund administrator review
* **Awaiting Payout** – The redemption has been approved and is queued for the next payout cycle
* **Completed** – The funds have been transferred to your linked account or wallet

You can track your redemption anytime in the **Orders** section of the platform.

***

### What Happens Next?

Redemptions give you the flexibility to access your capital when needed — but they also create space for new investment opportunities.

Explore **KAIO**’s full range of funds and refresh your strategy to match your current goals.

Head to the **Products** page to discover what’s available and start your next investment.


# Investor Pages

## Track & Monitor Your Investments&#x20;

### Portfolio

This Portfolio dashboard gives investors a snapshot of their tokenised fund holdings. It shows total investment value with recent performance metrics and an interactive chart for viewing portfolio growth over different time periods. Below the graph, a detailed table lists each fund, including the number of shares held, current value, unrealised gains or losses and its weight in the overall portfolio, with quick access to additional actions.

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

### Positions

You can check your current holdings and past settlements on the positions page.

#### Positions' Detail

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

### Orders

The orders page provides an overview of your investment transactions. Here you can check the details of each order and manage the steps that require an action from your side.

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

## Products

On the Products page, you can see the list of funds for which you are allowed to perform orders. Here you can see the instruments of each fund and create a new subscription or redemption order.

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

#### Product Details&#x20;

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

***

## Bridging Your Investments

### Gateway Manager

The Gateway page is KAIO’s cross‑chain bridge for moving tokenized fund positions between networks. Users select the source and destination chains and wallets, choose the fund/instrument and number of shares to transfer, and review the estimated value and fund details before sending. The interface consolidates everything needed to complete a secure, cross‑network transfer.

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

### Bridging Activities

The Activities tab of the Gateway provides a record of all cross‑chain transfers initiated through the bridge. Each row shows the asset name, transfer type, quantity, source and destination wallets/networks, current status (e.g. “Processed”) and the date/time it was created. Users can click **View Details** to see further information about any individual transaction.

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

***

## Managing Your Account&#x20;

### Wallets

On the Wallets page, users can view and manage their connected wallets. It lists each wallet’s address, user-assigned alias, date added, blockchain network (in this case Ethereum), and current status (e.g., whitelisted). Users can edit or disable existing wallets, and add new ones using the “+ New Wallet” button.

<figure><img src="/files/5MtxFfZ33tcReBYiAyjv" alt=""><figcaption></figcaption></figure>

### Profile

The profile page allows you to check and review your investor information on KAIO. It displays fields like full name, email address, physical address, investor type, and country of residence and nationality. Users can reset security credentials or request updates to any profile details

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

### Users

The Users tab displays all team members associated with an account along with their role and status. Each entry shows the user’s name, email address, assigned role (e.g., Legal Signatory, Transactions Manager, Admin), and whether their access is active. Administrators can click **Edit** to update a user’s details or **Lock** to deactivate their access, and new team members can be added via the **+ Add New User** button.

<figure><img src="/files/7uDJnIW8eiSs9XRLFtOI" alt=""><figcaption></figcaption></figure>


# API

Application Programing Interface for KAIO

## Content Guide

The API section of the KAIO documentation provides a learning resource to become familiar with the platform and provides references for partner integrations. This page provides an overview of the KAIO platform, its users, what they can do, and the relationships between them. Each sub-section relates to a particular user type and contains:

* **\[User] How-Tos:** The how-to guides contain the most usual flows for each type of user, with explanations and lists of steps.
* **\[User] References:** The reference pages contain the complete list of API calls available to each type of user. Individual cards link to the corresponding API call on Postman for easy access, also containing a description and some examples for each one. An additional guide for the Postman content can be found in .

## KAIO API

{% hint style="info" %}
**NOTE**: We are in the process of moving our API documentation to Swagger at <https://api.librecapital.com/api>
{% endhint %}

The KAIO API enables users to interact with KAIO directly without using the KAIO Website. Once logged in, users can make certain API calls according to their user type.

## User Types

There are four user types, as described in the following table:

<table data-full-width="true"><thead><tr><th>User Type</th><th>Description</th><th>Main Viewing Calls</th><th>Main Interaction Calls</th></tr></thead><tbody><tr><td><strong>Investor</strong></td><td>Investors are clients of private banks. They mostly sign agreement contracts and let their Dealer manage their orders on their behalf. They can create orders on their own if allowed by the Dealer</td><td><p>→View access to Funds and Instruments</p><p>→View all past orders</p></td><td><p>→Create/Confirm/Lock/Cancel orders</p><p>→Submit general requests to the KAIO Admin</p></td></tr><tr><td><strong>Dealer</strong></td><td>Dealers are private banks and advisors that are responsible for onboarding investors, managing their profiles, and creating orders on their behalf.</td><td><p>→View Funds they have access to</p><p>→View orders of Investors they manage</p><p>→View information of Investors they manage</p></td><td><p>→Onboard Investors</p><p>→Update Investor data</p><p>→Create/Confirm/Lock/Cancel Investor orders</p><p>→Upload agreement contracts to be signed on DocuSign</p><p>→Submit general requests to the KAIO Admin</p></td></tr><tr><td><strong>Fund Admin</strong></td><td>Fund Admins are responsible for managing the Funds they control, and all the Instruments within the Fund.</td><td><p>→View Funds they manage</p><p>→View Instruments belonging to their Funds</p><p>→View orders submitted in their Instruments.</p><p>→View agreement contracts signed by Investors</p></td><td><p>→Update Fund information</p><p>→Update Instrument information</p><p>→Set up instrument configuration</p><p>→Update audited/unaudited Net Asset Value (NAV)</p><p>→Approve/Reject orders</p></td></tr><tr><td><strong>KAIO Admin</strong></td><td>The KAIO Admin has control of the KAIO platform. They are responsible for answering requests, onboarding new Dealers and Fund Admins, and creating new Funds and Instruments.</td><td><p>→View all Fund information</p><p>→View all Instrument information</p><p>→View all Investor information</p><p>→View all Dealer information</p></td><td><p>→Onboard Fund Admins and Dealers</p><p>→Set Roles</p><p>→Create Funds and Instruments</p><p>→Lock and Settle orders</p></td></tr></tbody></table>

## Object Definitions

* **Fund**: Houses a set of Instruments, and is managed by a Fund Admin.
* **Instrument**: Describes the tokenized asset itself, also containing the custom logic of the asset.
* **Order**: Request made to subscribe or redeem the tokenized asset, going through multiple stages before being finalized. An order's status can be one of the following:
  * CREATED
  * CONFIRMED
  * CANCELED
  * REJECTED
  * UNDER\_REVIEW
  * ACCEPTED
  * LOCKED SETTLED

## Examples

Below are some example sequence diagrams illustrating operation flows between users, in this case the most usual subscription and redemption lifecycles:

#### Subscriptions

<div data-full-width="false"><figure><img src="/files/ewWq76fI3kH3gROs2ujs" alt=""><figcaption><p><em><strong>Subscription Lifecycle</strong></em></p></figcaption></figure></div>

#### Redemptions

<figure><img src="/files/5S0Fr3cdnf7pOPdKuGg7" alt=""><figcaption><p><em><strong>Redemption Lifecycle</strong></em></p></figcaption></figure>

## Postman Content Guide

In the [Postman documentation](https://documenter.getpostman.com/view/26092879/2s93Xu36Mm) you can find the endpoints to use when interacting with KAIO using API calls. For each endpoint you can find a short description and some example requests. Some endpoints require requests to have a body, these additionally contain the raw body example and a table with the fields it contains, with additional information. Some endpoints also include path variables and/or parameters in the URL, in which case they contain sections with examples and descriptions for them. It is strongly encouraged to use the documentation on GitBook for navigation, where you can find links to the specific endpoints you want more details on (leading to Postman).

In order to improve navigation and readability, color codes have been used to represent the different types of users as follows:

* ⚪: **All Users**
* 🟡: **Investors**
* 🟠: **Dealers**
* 🔵: **Fund Admins**
* 🟣: **KAIO Admin**

These colors are used in a variety of contexts, and their meaning might change slightly in each one:

<table data-header-hidden data-full-width="true"><thead><tr><th>Name</th><th>Description</th><th>Color meaning</th><th></th></tr></thead><tbody><tr><td><strong>Name</strong></td><td><strong>Description</strong></td><td><strong>Color meaning</strong></td><td><strong>Location</strong></td></tr><tr><td><em>Endpoint Titles</em></td><td>Name of the endpoint that can be called using the API.</td><td>The color indicates which types of users can call the endpoint. Special authorization might be required in addition to the user being the correct type.</td><td>Can be found at the beginning of each endpoint section, on the top left.</td></tr><tr><td><em>Request Examples</em></td><td>Examples of requests made using the API. They show different scenarios and options when calling an endpoint, and the return values when they succeed or fail.</td><td>The color indicates which type of user performed the request in each particular example. Multiple ones mean the examples is the same for multiple kinds of users. ✔️ and ❌ are used to show if the request was successful or not.</td><td>Can be found to the right of each endpoint section. The dropdown to change between examples is at the top right.</td></tr><tr><td><em>Field Tables</em></td><td>Tables defining the body fields required to call an endpoint, and providing additional information such as constraints or the optionality of the field.</td><td>The color indicates if the fields are only available/required by a specific type of user.</td><td>Can be found below the description for each endpoint, for the ones that have a body.</td></tr></tbody></table>


# Investor

{% content-ref url="/pages/GD2GYobLqmCHFDPHHjXk" %}
[Investor How-Tos](/guide-to-using-kaio/understanding-projects/investor/investor-how-tos)
{% endcontent-ref %}

{% content-ref url="/pages/gytZ08owFDC0nQsoFu0O" %}
[Investor References](/guide-to-using-kaio/understanding-projects/investor/investor)
{% endcontent-ref %}


# Investor How-Tos

How-to guide for common Investor flows

## Log In

You can log in using your email, password, and Multi-factor authentication (MFA). When you initiate the login, you will receive a response indicating if you can use MFA, or if you need to set it up first. To set it up, you must first associate and validate an authenticator app. You can then complete the login with the required MFA code. When you complete the login, you will receive a JWT Token, which you can then use for other API calls.

{% hint style="info" %}
**This token expires after 1 hour**, after which you will have to log in again.
{% endhint %}

1. [Initiate Login](/guide-to-using-kaio/understanding-projects/investor/investor#account)
2. [Validate MFA](/guide-to-using-kaio/understanding-projects/investor/investor#account) (only if setting up)
3. [Complete Login (with MFA)](/guide-to-using-kaio/understanding-projects/investor/investor#account)

## Manage the Lifecycle of Orders

As an Investor, you can manage you can manage your own orders if you have permission. To do this, 1) create an order, 2) confirm it, and 3) finally, lock the order (For Subscription Orders, the KAIO Admin will lock the orders). At this stage you can still cancel the order if needed. The Fund Admin will review the agreement request, and then the KAIO Admin will settle or cancel the order accordingly.

**Subscriptions:**

1. [Create Subscription Order](/guide-to-using-kaio/understanding-projects/investor/investor#subscriptions)
2. [Confirm Subscription Order](/guide-to-using-kaio/understanding-projects/investor/investor#subscriptions)
3. Lock Subscription Order (done by KAIO Admin for Subscriptions)

**Redemptions:**

1. [Create Redemption Order](/guide-to-using-kaio/understanding-projects/investor/investor#redemptions)
2. [Confirm Redemption Order](/guide-to-using-kaio/understanding-projects/investor/investor#redemptions)
3. [Lock Redemption Order](/guide-to-using-kaio/understanding-projects/investor/investor#redemptions)


# Investor References

All operations Investors can perform using the API

## User

### Account

Handle logging into your account, viewing it, password management, and Multi-factor authentication.

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>Initiate Login</strong></td><td><em>/auth/login</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#19707a78-0ed9-455b-a307-ad52ab8746f0">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#19707a78-0ed9-455b-a307-ad52ab8746f0</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Complete Login (with MFA code)</strong></td><td><em>/auth/login/mfa</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#ee883516-db00-4cbe-89f5-126e74a204a6">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#ee883516-db00-4cbe-89f5-126e74a204a6</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Validate MFA</strong></td><td><em>/auth/mfa/validate</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#40688b97-ca43-4cb7-bdf6-5aba1bad7dd2">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#40688b97-ca43-4cb7-bdf6-5aba1bad7dd2</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Full Profile</strong></td><td><em>/profile</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#11b0fc01-4b12-4c9d-b91c-6e82127a1091">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#11b0fc01-4b12-4c9d-b91c-6e82127a1091</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Profile Summary</strong></td><td><em>/user/myprofile</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#f9ada140-b058-496d-b065-6472582c52ff">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#f9ada140-b058-496d-b065-6472582c52ff</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Set Password</strong></td><td><em>/auth/confirm-password</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#ea875770-20bf-461c-b476-ae577c0f4298">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#ea875770-20bf-461c-b476-ae577c0f4298</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Change Password</strong></td><td><em>/auth/change-password</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#50777b00-af87-4d30-aa62-f7edc0da4d00">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#50777b00-af87-4d30-aa62-f7edc0da4d00</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Change Default Password</strong></td><td><em>/auth/login/temp</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#f1457ab4-51ac-456e-88fb-59f25e7d4beb">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#f1457ab4-51ac-456e-88fb-59f25e7d4beb</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Reset Forgotten Password</strong></td><td><em>/auth/forgot-password</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#66fecbb2-7862-4480-844b-2bb868c186ef">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#66fecbb2-7862-4480-844b-2bb868c186ef</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

### Wallets

View your wallets and update their labels.

<table data-view="cards" data-full-width="false"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>View Wallets</strong></td><td><em>/wallet</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#74a6fb63-1a38-4859-b33f-37c33823e4f2">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#74a6fb63-1a38-4859-b33f-37c33823e4f2</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Wallet (by user)</strong></td><td><em>/user/:userId/wallet</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#fb33f1d5-c1ad-471a-882e-2d5247baf9ab">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#fb33f1d5-c1ad-471a-882e-2d5247baf9ab</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Wallet (by address)</strong></td><td><em>/user/:userId/wallet/:address</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#c1ce4f03-50c1-4bf5-957a-98601f450c06">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#c1ce4f03-50c1-4bf5-957a-98601f450c06</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Update Wallet Label</strong></td><td><em>/user/:userId/wallet/:address</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#281aff1a-059a-401f-978b-186b8572ff26">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#281aff1a-059a-401f-978b-186b8572ff26</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

### Portfolio

View your current holdings and past settlements.

<table data-view="cards" data-full-width="false"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>View Current Holdings</strong></td><td><em>/portfolio</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#f33d37b3-ee1c-427f-8fc3-7f53dfe40836">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#f33d37b3-ee1c-427f-8fc3-7f53dfe40836</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Past Settlements</strong></td><td><em>/portfolio/settlement</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#d15db161-52e6-42f3-b4a7-8590f768fbc6">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#d15db161-52e6-42f3-b4a7-8590f768fbc6</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

## Management

### Investors

As an investor, view your information.

<table data-view="cards" data-full-width="false"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>View Investor (by Id)</strong></td><td><em>/user/:investorId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#9a4758f4-88d0-4d2c-ba83-124ac40b9b03">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#9a4758f4-88d0-4d2c-ba83-124ac40b9b03</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Investor's Orderbook</strong></td><td><em>/user/:investorId/orderbook</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#6ad7c479-4253-4b5c-bdc0-e94b9c922bdc">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#6ad7c479-4253-4b5c-bdc0-e94b9c922bdc</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Action Summary</strong></td><td><em>profile/summary</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#35e85155-1b5a-4353-9d5b-691849168fc3">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#35e85155-1b5a-4353-9d5b-691849168fc3</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Investor Data Update Requests</strong></td><td><em>/profile/investor/:investorId/updates</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#60ae8dc5-d08a-42a9-a025-6f66dae2306a">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#60ae8dc5-d08a-42a9-a025-6f66dae2306a</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Request Investor Data Update</strong></td><td><em>/profile/investor/:investorId/updates</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#aff1f551-5146-4b9f-a554-6154dc94fe7d">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#aff1f551-5146-4b9f-a554-6154dc94fe7d</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td>Manage User access</td><td>/auth/access</td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#9dee0675-13ed-4fd1-b5bb-2c7d2e3eb54b">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#9dee0675-13ed-4fd1-b5bb-2c7d2e3eb54b</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Investor Required input for registration (Open endpoint)</strong></td><td>/user/form</td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#12c6bd46-df77-468a-b0ae-c6daf14c0cfe">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#12c6bd46-df77-468a-b0ae-c6daf14c0cfe</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Investor Required complete input for update</strong></td><td>/user/form/complete</td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#720af82b-4252-4708-bae5-9be259f23fd7">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#720af82b-4252-4708-bae5-9be259f23fd7</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

### Funds

View subscribed Funds and their information.

<table data-view="cards" data-full-width="false"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>View Funds</strong></td><td><em>/security/fund</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#ecf45e72-3abd-4b0b-80b3-1b3a0c407da8">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#ecf45e72-3abd-4b0b-80b3-1b3a0c407da8</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Fund (by Id)</strong></td><td><em>/security/fund/:fundId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#e6957477-b38f-486f-b9af-4716ec6b3294">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#e6957477-b38f-486f-b9af-4716ec6b3294</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

### Instruments

View Instruments and their information.

<table data-view="cards" data-full-width="false"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>View Instruments</strong></td><td><em>/security/fund/:fundId/instrument</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#fc8feb71-ba2c-4c6d-b7ba-a6b0f50a25aa">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#fc8feb71-ba2c-4c6d-b7ba-a6b0f50a25aa</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Instrument (by Id)</strong></td><td><em>/security/fund/:id/instrument/:instrumentId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#034d1911-942a-40a9-90e3-7cc88f262309">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#034d1911-942a-40a9-90e3-7cc88f262309</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View NAV</strong><br><em>/security/fund/:fundId/instrument/:instrumentId/nav</em></td><td></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#7d48b6ba-922e-4ea0-bc78-ac346cc789f5">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#7d48b6ba-922e-4ea0-bc78-ac346cc789f5</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Balance for Instrument</strong></td><td><em>/user/instrument/:instrumentId/balance</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#bed30ef9-d238-455f-8dcd-39487662fc56">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#bed30ef9-d238-455f-8dcd-39487662fc56</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

### Subscriptions

Create, view, and handle subscription orders through their lifecycle.

<table data-view="cards" data-full-width="false"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>Create Subscription Order</strong></td><td><em>/orderbook/subscription/order</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#2bf8203d-ca40-4d68-b117-18d4f4e1bd74">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#2bf8203d-ca40-4d68-b117-18d4f4e1bd74</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Subscription Orders</strong></td><td><em>/orderbook/order</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#dfd1c88a-062c-4e5d-986e-6c182a96e075">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#dfd1c88a-062c-4e5d-986e-6c182a96e075</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Subscription Order (by Id)</strong></td><td><em>/orderbook/order/:orderId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#af2e56ec-b42d-4eac-ab84-69083a8852a4">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#af2e56ec-b42d-4eac-ab84-69083a8852a4</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Confirm Subscription Order</strong></td><td><em>/orderbook/subscription/order/confirm</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#ef1d1146-9b75-4191-a19b-cebb279848c9">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#ef1d1146-9b75-4191-a19b-cebb279848c9</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Cancel Subscription Order</strong></td><td><em>/orderbook/subscription/order/cancel</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#acdc5dd6-170b-4577-aede-30c97184545b">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#acdc5dd6-170b-4577-aede-30c97184545b</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

### Redemptions

Create, view, and handle redemption orders through their lifecycle.

<table data-view="cards" data-full-width="false"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>Create Redemption Order</strong></td><td><em>/orderbook/redemption/order</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#04fd8f1c-31c1-42f7-90ab-9c96c464459d">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#04fd8f1c-31c1-42f7-90ab-9c96c464459d</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Redemption Orders</strong></td><td><em>/orderbook/order</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#dfd1c88a-062c-4e5d-986e-6c182a96e075">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#dfd1c88a-062c-4e5d-986e-6c182a96e075</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Redemption Order (by Id)</strong></td><td><em>/orderbook/order/:orderId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#af2e56ec-b42d-4eac-ab84-69083a8852a4">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#af2e56ec-b42d-4eac-ab84-69083a8852a4</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Confirm Redemption Order</strong></td><td><em>/orderbook/redemption/order/confirm</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#9bb4dfa3-dde2-44ff-9d62-8982abd3d922">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#9bb4dfa3-dde2-44ff-9d62-8982abd3d922</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Lock Redemption Order</strong></td><td><em>/orderbook/redemption/order/lock</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#f3f805b5-ccf9-43d9-b8ed-feb8ac8e5952">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#f3f805b5-ccf9-43d9-b8ed-feb8ac8e5952</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Cancel Redemption Order</strong></td><td><em>/orderbook/redemption/order/cancel</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#703f4a22-f827-4d68-868c-fcef91fe3a60">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#703f4a22-f827-4d68-868c-fcef91fe3a60</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

## Requests

### Agreement Requests

View agreement requests made on your behalf.

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><p><strong>View Full Agreement Requests</strong></p><p><em>/docusign</em></p></td><td></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#0ec6de5f-9684-416b-8d89-05d6020e4acb">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#0ec6de5f-9684-416b-8d89-05d6020e4acb</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Full Agreement Request (by Id)</strong></td><td><em>/order-request/:requestId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#d4c22c9c-18cc-44f0-96df-7ed5682abcb8">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#d4c22c9c-18cc-44f0-96df-7ed5682abcb8</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Agreement Document (by Id)</strong></td><td><em>/docusign/document/:documentId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#56201678-d1b8-4f2b-92eb-3532b80b5869">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#56201678-d1b8-4f2b-92eb-3532b80b5869</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Custom Fields from Document (by Id)</strong></td><td><em>/docusign/custom-fields/:orderId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#dd06c0e5-9ad0-4073-870c-b4af51985a7d">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#dd06c0e5-9ad0-4073-870c-b4af51985a7d</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Document Envelope (by Id)</strong></td><td><em>/docusign/envelop/:orderId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#4387087b-4170-4d80-b3d9-f6539031c791">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#4387087b-4170-4d80-b3d9-f6539031c791</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

### On-chain Transactions

Submit transactions, query data or simulate transactions from any smart contract

<table data-view="cards"><thead><tr><th></th><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>Submit a transaction to smart contract</strong></td><td><em>transaction/submit</em></td><td></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#756940d3-586a-4832-be7b-a24df22552c8">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#756940d3-586a-4832-be7b-a24df22552c8</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Query or simulate a transaction to smart contract</strong></td><td><em>transaction/query</em></td><td></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#a06fe6c0-4691-42a5-a754-e6e225f3201d">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#a06fe6c0-4691-42a5-a754-e6e225f3201d</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

### Legal Documents

Manage legal documents to be fetched and signed offline by the dealer

<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><strong>Get All Platform legal documen</strong>ts</td><td><em>legal-document</em></td><td></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#63133608-d090-4926-bc07-a66468ba26a2">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#63133608-d090-4926-bc07-a66468ba26a2</a></td></tr><tr><td><strong>Get legal document details</strong></td><td><em>legal-document/:id</em></td><td></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#0d04fcb0-903f-44a2-aef4-10bec769139b">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#0d04fcb0-903f-44a2-aef4-10bec769139b</a></td></tr><tr><td><strong>Download document</strong></td><td><em>legal-document/:id/file</em></td><td></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#80656859-b111-4ca0-add5-0b03dfc642f2">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#80656859-b111-4ca0-add5-0b03dfc642f2</a></td></tr></tbody></table>

### General Requests

Create and view your general requests towards the KAIO Admin.

<table data-view="cards" data-full-width="false"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>Send General Request to Admin</strong></td><td><em>/request</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#b803c439-dafb-4a15-b4db-47b5962254b2">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#b803c439-dafb-4a15-b4db-47b5962254b2</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View General Requests</strong></td><td><em>/request</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#378b5e84-2caa-416d-bade-1118fe22bad4">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#378b5e84-2caa-416d-bade-1118fe22bad4</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View General Request (by Id)</strong></td><td><em>/request/:request</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#16405492-bb38-4079-a003-33969d47e635">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#16405492-bb38-4079-a003-33969d47e635</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>


# Dealer

{% content-ref url="/pages/KTevsaiaS9ijpott7uQt" %}
[Dealer How-Tos](/guide-to-using-kaio/understanding-projects/dealer/dealer-how-tos)
{% endcontent-ref %}

{% content-ref url="/pages/EGKwerY6Iuy0t2CD98JW" %}
[Dealer References](/guide-to-using-kaio/understanding-projects/dealer/dealer)
{% endcontent-ref %}


# Dealer How-Tos

How-to guide for common Dealer flows

## Log In

You can log in using your email, password, and Multi-factor authentication (MFA). When you initiate the login, you will receive a response indicating if you can use MFA, or if you need to set it up first. To set it up, you must first associate and validate an authenticator app. You can then complete the login with the required MFA code. When you complete the login, you will receive a JWT Token, which you can then use for other API calls.

{% hint style="info" %}
**This token expires after 1 hour**, after which you will have to log in again.
{% endhint %}

1. [Initiate Login](/guide-to-using-kaio/understanding-projects/dealer/dealer#account)
2. [Validate MFA](/guide-to-using-kaio/understanding-projects/dealer/dealer#account) (only if setting up)
3. [Complete Login (with MFA)](/guide-to-using-kaio/understanding-projects/dealer/dealer#account)

## Onboard Investors

To onboard an investor, first you must register them. After that you add their compliance check results to the system. Then you can request access to a Fund/Instrument on their behalf. Finally you can view their access to an Instrument to make sure they can now use it.

1. [Create an Investor](/guide-to-using-kaio/understanding-projects/dealer/dealer#investors)
2. [Set their KYC/AML/Sanction results](/guide-to-using-kaio/understanding-projects/dealer/dealer#investors)
3. [Request Access to a Fund/Instrument for them](/guide-to-using-kaio/understanding-projects/dealer/dealer#investors)
4. [View Access to an Instrument](/guide-to-using-kaio/understanding-projects/dealer/dealer#investors)

## Manage the Lifecycle of Orders

As an Investor's Dealer, you can manage orders on their behalf. To do this, 1) create an order, 2) confirm it, and 3) finally, lock the order (For Subscription Orders, the KAIO Admin will lock the orders). At this stage you can still cancel the order if needed. The Fund Admin will review the agreement request, and then the KAIO Admin will settle or cancel the order accordingly.

**Subscriptions:**

1. [Create Subscription Order](/guide-to-using-kaio/understanding-projects/dealer/dealer#investors-subscriptions)
2. [Confirm Subscription Order](/guide-to-using-kaio/understanding-projects/dealer/dealer#investors-subscriptions)
3. Lock Subscription Order (done by KAIO Admin for Subscriptions)

**Redemptions:**

1. [Create Redemption Order](/guide-to-using-kaio/understanding-projects/dealer/dealer#investors-redemptions)
2. [Confirm Redemption Order](/guide-to-using-kaio/understanding-projects/dealer/dealer#investors-redemptions)
3. [Lock Redemption Order](/guide-to-using-kaio/understanding-projects/dealer/dealer#investors-redemptions)

## Set up Compliance Checks

You can set up the Rule Modules, that contain the custom compliance checks based on your internal requirements for operations done by your Investors. These modules need to be deployed and registered.

1. [Deploy Rule Module](/guide-to-using-kaio/understanding-projects/dealer/dealer#rule-modules)
2. [Register Rule Module](/guide-to-using-kaio/understanding-projects/dealer/dealer#rule-modules)


# Dealer References

All operations Dealers can perform using the API.

## User

### Account

Handle logging into your account, viewing it, password management, and Multi-factor authentication.

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>Initiate Login</strong></td><td><em>/auth/login</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#19707a78-0ed9-455b-a307-ad52ab8746f0">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#19707a78-0ed9-455b-a307-ad52ab8746f0</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Complete Login (with MFA code)</strong></td><td><em>/auth/login/mfa</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#ee883516-db00-4cbe-89f5-126e74a204a6">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#ee883516-db00-4cbe-89f5-126e74a204a6</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Validate MFA</strong></td><td><em>/auth/mfa/validate</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#40688b97-ca43-4cb7-bdf6-5aba1bad7dd2">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#40688b97-ca43-4cb7-bdf6-5aba1bad7dd2</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Full Profile</strong></td><td><em>/profile</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#11b0fc01-4b12-4c9d-b91c-6e82127a1091">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#11b0fc01-4b12-4c9d-b91c-6e82127a1091</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Profile Summary</strong></td><td><em>/user/myprofile</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#f9ada140-b058-496d-b065-6472582c52ff">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#f9ada140-b058-496d-b065-6472582c52ff</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Set Password</strong></td><td><em>/auth/confirm-password</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#ea875770-20bf-461c-b476-ae577c0f4298">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#ea875770-20bf-461c-b476-ae577c0f4298</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Change Password</strong></td><td><em>/auth/change-password</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#50777b00-af87-4d30-aa62-f7edc0da4d00">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#50777b00-af87-4d30-aa62-f7edc0da4d00</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Change Default Password</strong></td><td><em>/auth/login/temp</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#f1457ab4-51ac-456e-88fb-59f25e7d4beb">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#f1457ab4-51ac-456e-88fb-59f25e7d4beb</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Reset Forgotten Password</strong></td><td><em>/auth/forgot-password</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#66fecbb2-7862-4480-844b-2bb868c186ef">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#66fecbb2-7862-4480-844b-2bb868c186ef</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td>Manage User access</td><td>/auth/access</td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#9dee0675-13ed-4fd1-b5bb-2c7d2e3eb54b">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#9dee0675-13ed-4fd1-b5bb-2c7d2e3eb54b</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

### Roles

Handle roles derived from your current one.

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>Create Role</strong></td><td><em>/profile/role/create</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#9fc08af6-132f-4529-a41e-21ab93296b2c">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#9fc08af6-132f-4529-a41e-21ab93296b2c</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Grant Role</strong></td><td><em>/profile/role/grant</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#60fd83f8-ef81-4be7-bf84-b585642b66c8">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#60fd83f8-ef81-4be7-bf84-b585642b66c8</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Grant Access</strong></td><td><em>/profile/role/grant/access</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#8d9d9775-1c3e-423e-bf47-c4532bf22e4a">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#8d9d9775-1c3e-423e-bf47-c4532bf22e4a</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Revoke Access</strong></td><td><em>/profile/role/revoke</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#f960ce14-de9d-43a0-b946-e446c06c4458">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#f960ce14-de9d-43a0-b946-e446c06c4458</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Reset Access</strong></td><td><em>/profile/role/reset</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#a8a0688d-b2d8-4a08-a42d-22f6f0a87976">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#a8a0688d-b2d8-4a08-a42d-22f6f0a87976</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

### Wallets

Create and view investor wallets, and update their labels. You can also view your own wallets and update their labels.

<table data-view="cards" data-full-width="false"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>Create Investor Wallet</strong></td><td><em>/user/:userId/wallet</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#5a4ed0fc-b4b6-4c26-99d5-460cd9362158">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#5a4ed0fc-b4b6-4c26-99d5-460cd9362158</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Wallets</strong></td><td><em>/wallet</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#74a6fb63-1a38-4859-b33f-37c33823e4f2">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#74a6fb63-1a38-4859-b33f-37c33823e4f2</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Wallet (by user)</strong></td><td><em>/user/:userId/wallet</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#fb33f1d5-c1ad-471a-882e-2d5247baf9ab">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#fb33f1d5-c1ad-471a-882e-2d5247baf9ab</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Wallet (by address)</strong></td><td><em>/user/:userId/wallet/:address</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#c1ce4f03-50c1-4bf5-957a-98601f450c06">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#c1ce4f03-50c1-4bf5-957a-98601f450c06</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Update Wallet Label</strong></td><td><em>/user/:userId/wallet/:address</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#281aff1a-059a-401f-978b-186b8572ff26">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#281aff1a-059a-401f-978b-186b8572ff26</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

### Portfolio

View an Investor's current holdings and past settlements.

<table data-view="cards" data-full-width="false"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>View Current Holdings</strong></td><td><em>/portfolio</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#f33d37b3-ee1c-427f-8fc3-7f53dfe40836">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#f33d37b3-ee1c-427f-8fc3-7f53dfe40836</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Past Settlements</strong></td><td><em>/portfolio/settlement</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#d15db161-52e6-42f3-b4a7-8590f768fbc6">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#d15db161-52e6-42f3-b4a7-8590f768fbc6</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

## Management

### Dealers

View Dealer information.

<table data-view="cards" data-full-width="false"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>View Action Summary</strong></td><td><em>profile/summary</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#35e85155-1b5a-4353-9d5b-691849168fc3">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#35e85155-1b5a-4353-9d5b-691849168fc3</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

### Investors

Create and view Investors, handle their data and access.

<table data-view="cards" data-full-width="false"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>Create Investor</strong></td><td>/<em>auth/register</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#90ae9682-be7e-43d2-b2d2-5a5f9d005e54">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#90ae9682-be7e-43d2-b2d2-5a5f9d005e54</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Update Investor</strong></td><td><em>/user/:investorId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#26722947-c173-41c4-8653-e2c45b7cd391">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#26722947-c173-41c4-8653-e2c45b7cd391</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Investors</strong></td><td><em>/user</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#8d1c1e7a-c8ad-42fb-8140-a15d3440942f">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#8d1c1e7a-c8ad-42fb-8140-a15d3440942f</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Investor (by Id)</strong></td><td><em>/user/:investorId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#9a4758f4-88d0-4d2c-ba83-124ac40b9b03">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#9a4758f4-88d0-4d2c-ba83-124ac40b9b03</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Access to Instrument</strong></td><td><em>/profile/investor/:investorId/verify/:instrumentId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#86db687c-541f-456c-91eb-d89a5024c236">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#86db687c-541f-456c-91eb-d89a5024c236</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Investor's Orderbook</strong></td><td><em>/user/:investorId/orderbook</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#6ad7c479-4253-4b5c-bdc0-e94b9c922bdc">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#6ad7c479-4253-4b5c-bdc0-e94b9c922bdc</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Restrict Investor from Instrument</strong></td><td><em>/profile/investor/:investorId/restrict</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#6b61a39f-56bd-4e08-96bf-5eb37d6b3109">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#6b61a39f-56bd-4e08-96bf-5eb37d6b3109</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Set Investor's AML/KYC/Sanction Status</strong></td><td><em>/profile/investor/:invetsorId/sanction</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#d543eade-169e-4aa4-9129-e8c1cdbcc06e">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#d543eade-169e-4aa4-9129-e8c1cdbcc06e</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Investor's Instruments</strong></td><td><em>/user/:userId/fund/:instrumentId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#bfad0260-9681-40e7-9be5-30edfa6a514a">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#bfad0260-9681-40e7-9be5-30edfa6a514a</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Manage Investor Access</strong></td><td><em>/auth/access</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#9dee0675-13ed-4fd1-b5bb-2c7d2e3eb54b">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#9dee0675-13ed-4fd1-b5bb-2c7d2e3eb54b</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Investor Data Update Requests</strong></td><td><em>/profile/investor/:investorId/updates</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#60ae8dc5-d08a-42a9-a025-6f66dae2306a">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#60ae8dc5-d08a-42a9-a025-6f66dae2306a</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Data Update Requests from Associated Investors</strong></td><td><em>/profile/investor/updates</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#d26a2d64-2d99-40ca-b2bd-8718b70271ff">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#d26a2d64-2d99-40ca-b2bd-8718b70271ff</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Accept/Reject Investor Data Update Request</strong></td><td><em>/profile/investor/:investorId/updates</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#6f748604-3772-4930-ae21-862f339dbb1b">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#6f748604-3772-4930-ae21-862f339dbb1b</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Get all Onboarding inputs</strong></td><td>user/dealer/onboard-config</td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#75eaeda5-fda4-4d9e-b509-7715a5ecb24d">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#75eaeda5-fda4-4d9e-b509-7715a5ecb24d</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Get editable inputs created by the dealer</strong></td><td>user/dealer/editable-form</td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#5fda9dea-c340-48b0-accb-051c30817d94">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#5fda9dea-c340-48b0-accb-051c30817d94</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Dealer update his onboarding inputs</strong></td><td>user/dealer/editable-form</td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#a59b466a-c2a6-4501-a0e1-6a17ee13c84b">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#a59b466a-c2a6-4501-a0e1-6a17ee13c84b</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Get Onchain onboarding fields</strong></td><td>user/dealer/onchain-fields</td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#8670b02d-94fd-4227-9183-2a5c51a0b5a4">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#8670b02d-94fd-4227-9183-2a5c51a0b5a4</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

### Investor's Subscriptions

Create, view, and handle an Investor's subscription orders through their lifecycle.

<table data-view="cards" data-full-width="false"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>Create Subscription Order</strong></td><td><em>/orderbook/subscription/order</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#2bf8203d-ca40-4d68-b117-18d4f4e1bd74">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#2bf8203d-ca40-4d68-b117-18d4f4e1bd74</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Subscription Orders</strong></td><td><em>/orderbook/order</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#dfd1c88a-062c-4e5d-986e-6c182a96e075">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#dfd1c88a-062c-4e5d-986e-6c182a96e075</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Subscription Order (by Id)</strong></td><td><em>/orderbook/order/:orderId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#af2e56ec-b42d-4eac-ab84-69083a8852a4">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#af2e56ec-b42d-4eac-ab84-69083a8852a4</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Confirm Subscription Order</strong></td><td><em>/orderbook/subscription/order/confirm</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#ef1d1146-9b75-4191-a19b-cebb279848c9">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#ef1d1146-9b75-4191-a19b-cebb279848c9</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Cancel Subscription Order</strong></td><td><em>/orderbook/subscription/order/cancel</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#acdc5dd6-170b-4577-aede-30c97184545b">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#acdc5dd6-170b-4577-aede-30c97184545b</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

### Investor's Redemptions

Create, view, and handle an Investor's redemption orders through their lifecycle.

<table data-view="cards" data-full-width="false"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>Create Redemption Order</strong></td><td><em>/orderbook/redemption/order</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#04fd8f1c-31c1-42f7-90ab-9c96c464459d">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#04fd8f1c-31c1-42f7-90ab-9c96c464459d</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Redemption Orders</strong></td><td><em>/orderbook/order</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#dfd1c88a-062c-4e5d-986e-6c182a96e075">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#dfd1c88a-062c-4e5d-986e-6c182a96e075</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Redemption Order (by Id)</strong></td><td><em>/orderbook/order/:orderId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#af2e56ec-b42d-4eac-ab84-69083a8852a4">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#af2e56ec-b42d-4eac-ab84-69083a8852a4</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Confirm Redemption Order</strong></td><td><em>/orderbook/redemption/order/confirm</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#9bb4dfa3-dde2-44ff-9d62-8982abd3d922">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#9bb4dfa3-dde2-44ff-9d62-8982abd3d922</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Lock Redemption Order</strong></td><td><em>/orderbook/redemption/order/lock</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#f3f805b5-ccf9-43d9-b8ed-feb8ac8e5952">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#f3f805b5-ccf9-43d9-b8ed-feb8ac8e5952</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Cancel Redemption Order</strong></td><td><em>/orderbook/redemption/order/cancel</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#703f4a22-f827-4d68-868c-fcef91fe3a60">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#703f4a22-f827-4d68-868c-fcef91fe3a60</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

### Funds

View subscribed Funds and their information.

<table data-view="cards" data-full-width="false"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>View Funds</strong></td><td><em>/security/fund</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#ecf45e72-3abd-4b0b-80b3-1b3a0c407da8">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#ecf45e72-3abd-4b0b-80b3-1b3a0c407da8</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Fund (by Id)</strong></td><td><em>/security/fund/:fundId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#e6957477-b38f-486f-b9af-4716ec6b3294">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#e6957477-b38f-486f-b9af-4716ec6b3294</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

### Instruments

View Instruments and their information.

<table data-view="cards" data-full-width="false"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>View Instruments</strong></td><td><em>/security/fund/:fundId/instrument</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#fc8feb71-ba2c-4c6d-b7ba-a6b0f50a25aa">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#fc8feb71-ba2c-4c6d-b7ba-a6b0f50a25aa</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Instrument (by Id)</strong></td><td><em>/security/fund/:id/instrument/:instrumentId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#034d1911-942a-40a9-90e3-7cc88f262309">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#034d1911-942a-40a9-90e3-7cc88f262309</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View NAV</strong><br><em>/security/fund/:fundId/instrument/:instrumentId/nav</em></td><td></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#7d48b6ba-922e-4ea0-bc78-ac346cc789f5">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#7d48b6ba-922e-4ea0-bc78-ac346cc789f5</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

## Requests

### Agreement Requests

Handle agreement requests on behalf of an Investor.

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>Create Agreement Request</strong></td><td><em>/docusign</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#ce69d23b-bae2-487a-921c-eadd5c0b99cc">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#ce69d23b-bae2-487a-921c-eadd5c0b99cc</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><p><strong>View Full Agreement Requests</strong></p><p><em>/docusign</em></p></td><td></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#0ec6de5f-9684-416b-8d89-05d6020e4acb">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#0ec6de5f-9684-416b-8d89-05d6020e4acb</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Full Agreement Request (by Id)</strong></td><td><em>/order-request/:requestId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#d4c22c9c-18cc-44f0-96df-7ed5682abcb8">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#d4c22c9c-18cc-44f0-96df-7ed5682abcb8</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Agreement Document (by Id)</strong></td><td><em>/docusign/document/:documentId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#56201678-d1b8-4f2b-92eb-3532b80b5869">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#56201678-d1b8-4f2b-92eb-3532b80b5869</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Custom Fields from Document (by Id)</strong></td><td><em>/docusign/custom-fields/:orderId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#dd06c0e5-9ad0-4073-870c-b4af51985a7d">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#dd06c0e5-9ad0-4073-870c-b4af51985a7d</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Document Envelope (by Id)</strong></td><td><em>/docusign/envelop/:orderId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#4387087b-4170-4d80-b3d9-f6539031c791">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#4387087b-4170-4d80-b3d9-f6539031c791</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

### Access Requests

Handle access requests towards an admin on behalf of an Investor.

<table data-view="cards" data-full-width="false"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>Request Access to Fund/Instrument</strong></td><td><em>/user/:userId/subscribe</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#c4c8550a-f501-4c35-9eb3-4a58716e8bf6">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#c4c8550a-f501-4c35-9eb3-4a58716e8bf6</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Access Requests</strong></td><td><em>/user/fund-admin/request-access</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#2fdbb5f3-5d26-42ae-bc76-672b215bde5d">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#2fdbb5f3-5d26-42ae-bc76-672b215bde5d</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Access Request (by Id)</strong></td><td><em>/user/fund-admin/request-access/:requestId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#aca23bbd-d84c-452b-93cd-ece15fcea7f5">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#aca23bbd-d84c-452b-93cd-ece15fcea7f5</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

### General Requests

Create and view your general requests towards the KAIO Admin.

<table data-view="cards" data-full-width="false"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>Send General Request to Admin</strong></td><td><em>/request</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#b803c439-dafb-4a15-b4db-47b5962254b2">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#b803c439-dafb-4a15-b4db-47b5962254b2</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View General Requests</strong></td><td><em>/request</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#378b5e84-2caa-416d-bade-1118fe22bad4">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#378b5e84-2caa-416d-bade-1118fe22bad4</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View General Request (by Id)</strong></td><td><em>/request/:requestId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#16405492-bb38-4079-a003-33969d47e635">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#16405492-bb38-4079-a003-33969d47e635</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

## Compliance

### Rule Modules

Handle your rule modules containing rules for your investors.

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>Register Module</strong></td><td><em>/profile/module/register</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#0e930155-c657-47cb-9755-a1d6c3078fef">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#0e930155-c657-47cb-9755-a1d6c3078fef</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Modules</strong></td><td><em>/module</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#6186ec79-0258-46c7-8ff6-b9b6fadbb663">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#6186ec79-0258-46c7-8ff6-b9b6fadbb663</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Module (by Id)</strong></td><td><em>/module/:moduleId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#3360d30f-427c-4945-9da7-f9c3f7191876">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#3360d30f-427c-4945-9da7-f9c3f7191876</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Delete Module</strong></td><td><em>/module/dealer</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#ad037add-cad9-4585-9727-9356f3c8bd5d">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#ad037add-cad9-4585-9727-9356f3c8bd5d</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Enable/Disable Module</strong></td><td><em>/profile/module/dealer</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#fb627120-ffd3-4f80-9000-b2982fa40821">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#fb627120-ffd3-4f80-9000-b2982fa40821</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

### On-chain Transactions

Submit transactions, query data or simulate transactions from any smart contract

<table data-view="cards"><thead><tr><th></th><th></th><th data-type="content-ref"></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><strong>Submit a transaction to smart contract</strong></td><td><em>transaction/submit</em></td><td></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#756940d3-586a-4832-be7b-a24df22552c8">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#756940d3-586a-4832-be7b-a24df22552c8</a></td></tr><tr><td><strong>Query or simulate a transaction to smart contract</strong></td><td><em>transaction/query</em></td><td></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#a06fe6c0-4691-42a5-a754-e6e225f3201d">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#a06fe6c0-4691-42a5-a754-e6e225f3201d</a></td></tr></tbody></table>

### Legal Documents

Manage legal documents to be fetched and signed offline by the dealer

<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><strong>Get All Platform legal documen</strong>ts</td><td><em>legal-document</em></td><td></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#63133608-d090-4926-bc07-a66468ba26a2">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#63133608-d090-4926-bc07-a66468ba26a2</a></td></tr><tr><td><strong>Get legal document details</strong></td><td></td><td><em>legal-document/:id</em></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#0d04fcb0-903f-44a2-aef4-10bec769139b">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#0d04fcb0-903f-44a2-aef4-10bec769139b</a></td></tr><tr><td><strong>Download document</strong></td><td></td><td><em>legal-document/:id/file</em></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#80656859-b111-4ca0-add5-0b03dfc642f2">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#80656859-b111-4ca0-add5-0b03dfc642f2</a></td></tr></tbody></table>

### Registries

Handle Investor registry data directly.

{% hint style="warning" %}
Editing registry data directly is an advanced feature. To avoid issues, it should only be done with a good understanding of [how registries work](https://github.com/NethermindEth/libre-documentation/blob/release/using-libre/understanding-projects/broken-reference/README.md).
{% endhint %}

<table data-view="cards" data-full-width="false"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>Edit Investor Registry Data</strong></td><td><em>/profile/registries/:registryId/dynamic-fields</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#d7d0b275-a608-4c41-80bf-5bad1d599929">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#d7d0b275-a608-4c41-80bf-5bad1d599929</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>


# Fund Admin

{% content-ref url="/pages/HKOxdjBKGWuqDWyn9MZ5" %}
[Fund Admin How-Tos](/guide-to-using-kaio/understanding-projects/fund-admin/fund-admin-how-tos)
{% endcontent-ref %}

{% content-ref url="/pages/NRKylAFpzl0ldZcifA4m" %}
[Fund Admin References](/guide-to-using-kaio/understanding-projects/fund-admin/fund-admin)
{% endcontent-ref %}


# Fund Admin How-Tos

How-to guide for common Fund Admin flows

## Log In

You can log in using your email, password, and Multi-factor authentication (MFA). When you initiate the login, you will receive a response indicating if you can use MFA, or if you need to set it up first. To set it up, you must first associate and validate an authenticator app. You can then complete the login with the required MFA code. When you complete the login, you will receive a JWT Token, which you can then use for other API calls.

{% hint style="info" %}
**This token expires after 1 hour**, after which you will have to log in again.
{% endhint %}

1. [Initiate Login](/guide-to-using-kaio/understanding-projects/fund-admin/fund-admin#account)
2. [Validate MFA](/guide-to-using-kaio/understanding-projects/fund-admin/fund-admin#account) (only if setting up)
3. [Complete Login (with MFA)](/guide-to-using-kaio/understanding-projects/fund-admin/fund-admin#account)

## Set Up an Instrument

You can request the KAIO Admin to create a new Fund and/or instrument, and assign it to you. You can then set the subscription and redemption details for the instrument, and after it has been initialized by the KAIO Admin set the NAV value.

1. [Request new Instrument](/guide-to-using-kaio/understanding-projects/fund-admin/fund-admin#general-requests)
2. [Set Instrument subscription and redemption details](/guide-to-using-kaio/understanding-projects/fund-admin/fund-admin#instruments)
3. [Set audited/unaudited NAV](/guide-to-using-kaio/understanding-projects/fund-admin/fund-admin#instruments)

## Maintain an instrument

You can update both kinds of NAV (audited and unaudited) through the lifecycle of the instrument.

1. [Update audited/unaudited NAV](/guide-to-using-kaio/understanding-projects/fund-admin/fund-admin#instruments)

## Grant Fund Access

You can accept or reject requests for accessing one of your funds for an investor.

1. [Respond to Access Request](/guide-to-using-kaio/understanding-projects/fund-admin/fund-admin#access-requests)

## Review Orders

You will receive requests whenever there is a pending order in your instrument. You can then verify that the agreement document and signature are correct, and accept or reject the request. The KAIO Admin will then settle or cancel the order accordingly.

1. [View requests](/guide-to-using-kaio/understanding-projects/fund-admin/fund-admin#agreement-requests)
2. [View agreement document](/guide-to-using-kaio/understanding-projects/fund-admin/fund-admin#agreement-requests)
3. [Accept/Reject a request](/guide-to-using-kaio/understanding-projects/fund-admin/fund-admin#agreement-requests)

## Manage the Lifecycle of Orders

In some cases, if given permission by the KAIO Admin, you can settle orders as the Fund Admin. In this case, the approval of multiple Fund Admins will be required before settling is possible. In the case of subscriptions, you also need to lock orders before they are settled.

**Subscriptions:**

1. [Lock Subscription Order](/guide-to-using-kaio/understanding-projects/fund-admin/fund-admin#investors-subscriptions)
2. [Settle Subscription Order](/guide-to-using-kaio/understanding-projects/fund-admin/fund-admin#investors-subscriptions)

**Redemptions:**

1. [Settle Redemption Order](/guide-to-using-kaio/understanding-projects/fund-admin/fund-admin#investors-redemptions)

## Set up Compliance Checks

You can set up the Rule Modules, that contain the customizable compliance checks for operations in your Instrument. These modules need to be deployed and registered.

1. [Deploy Rule Module](/guide-to-using-kaio/understanding-projects/fund-admin/fund-admin#rule-modules)
2. [Register Rule Module](/guide-to-using-kaio/understanding-projects/fund-admin/fund-admin#rule-modules)


# Fund Admin References

All operations Fund Admins can perform using the API

## User

### Account

Handle logging into your account, viewing it, password management, and Multi-factor authentication.

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>Initiate Login</strong></td><td><em>/auth/login</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#19707a78-0ed9-455b-a307-ad52ab8746f0">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#19707a78-0ed9-455b-a307-ad52ab8746f0</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Complete Login (with MFA code)</strong></td><td><em>/auth/login/mfa</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#ee883516-db00-4cbe-89f5-126e74a204a6">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#ee883516-db00-4cbe-89f5-126e74a204a6</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Validate MFA</strong></td><td><em>/auth/mfa/validate</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#40688b97-ca43-4cb7-bdf6-5aba1bad7dd2">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#40688b97-ca43-4cb7-bdf6-5aba1bad7dd2</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Full Profile</strong></td><td><em>/profile</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#11b0fc01-4b12-4c9d-b91c-6e82127a1091">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#11b0fc01-4b12-4c9d-b91c-6e82127a1091</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Profile Summary</strong></td><td><em>/user/myprofile</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#f9ada140-b058-496d-b065-6472582c52ff">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#f9ada140-b058-496d-b065-6472582c52ff</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Set Password</strong></td><td><em>/auth/confirm-password</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#ea875770-20bf-461c-b476-ae577c0f4298">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#ea875770-20bf-461c-b476-ae577c0f4298</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Change Password</strong></td><td><em>/auth/change-password</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#50777b00-af87-4d30-aa62-f7edc0da4d00">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#50777b00-af87-4d30-aa62-f7edc0da4d00</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Change Default Password</strong></td><td><em>/auth/login/temp</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#f1457ab4-51ac-456e-88fb-59f25e7d4beb">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#f1457ab4-51ac-456e-88fb-59f25e7d4beb</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Reset Forgotten Password</strong></td><td><em>/auth/forgot-password</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#66fecbb2-7862-4480-844b-2bb868c186ef">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#66fecbb2-7862-4480-844b-2bb868c186ef</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

### Roles

Handle roles derived from your current one.

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>Create Role</strong></td><td><em>/profile/role/create</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#9fc08af6-132f-4529-a41e-21ab93296b2c">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#9fc08af6-132f-4529-a41e-21ab93296b2c</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Grant Role</strong></td><td><em>/profile/role/grant</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#60fd83f8-ef81-4be7-bf84-b585642b66c8">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#60fd83f8-ef81-4be7-bf84-b585642b66c8</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Grant Access</strong></td><td><em>/profile/role/grant/access</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#8d9d9775-1c3e-423e-bf47-c4532bf22e4a">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#8d9d9775-1c3e-423e-bf47-c4532bf22e4a</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Revoke Access</strong></td><td><em>/profile/role/revoke</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#f960ce14-de9d-43a0-b946-e446c06c4458">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#f960ce14-de9d-43a0-b946-e446c06c4458</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Reset Access</strong></td><td><em>/profile/role/reset</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#a8a0688d-b2d8-4a08-a42d-22f6f0a87976">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#a8a0688d-b2d8-4a08-a42d-22f6f0a87976</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

### Wallets

View investor wallets. You can also view your own wallets and update their labels.

<table data-view="cards" data-full-width="false"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>View Wallets</strong></td><td><em>/wallet</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#74a6fb63-1a38-4859-b33f-37c33823e4f2">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#74a6fb63-1a38-4859-b33f-37c33823e4f2</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Wallet (by user)</strong></td><td><em>/user/:userId/wallet</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#fb33f1d5-c1ad-471a-882e-2d5247baf9ab">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#fb33f1d5-c1ad-471a-882e-2d5247baf9ab</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Wallet (by address)</strong></td><td><em>/user/:userId/wallet/:address</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#c1ce4f03-50c1-4bf5-957a-98601f450c06">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#c1ce4f03-50c1-4bf5-957a-98601f450c06</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Update Wallet Label</strong></td><td><em>/user/:userId/wallet/:address</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#281aff1a-059a-401f-978b-186b8572ff26">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#281aff1a-059a-401f-978b-186b8572ff26</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

### Portfolio

View an Investor's current holdings and past settlements.

<table data-view="cards" data-full-width="false"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>View Current Holdings</strong></td><td><em>/portfolio</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#f33d37b3-ee1c-427f-8fc3-7f53dfe40836">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#f33d37b3-ee1c-427f-8fc3-7f53dfe40836</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Past Settlements</strong></td><td><em>/portfolio/settlement</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#d15db161-52e6-42f3-b4a7-8590f768fbc6">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#d15db161-52e6-42f3-b4a7-8590f768fbc6</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

## Management

### Funds

View subscribed Funds and their information.

<table data-view="cards" data-full-width="false"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>View Funds</strong></td><td><em>/security/fund</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#ecf45e72-3abd-4b0b-80b3-1b3a0c407da8">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#ecf45e72-3abd-4b0b-80b3-1b3a0c407da8</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Fund (by Id)</strong></td><td><em>/security/fund/:fundId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#e6957477-b38f-486f-b9af-4716ec6b3294">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#e6957477-b38f-486f-b9af-4716ec6b3294</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Fund Orderbooks</strong></td><td><em>/security/fund/:fundId/orderbook</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#37c3fff1-378d-4614-a0b3-13b35d4c4639">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#37c3fff1-378d-4614-a0b3-13b35d4c4639</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Fund Clients</strong></td><td><em>/security/fund/:fundId/clients</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#cd81ad8b-dd22-4d1c-9201-556fb549809c">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#cd81ad8b-dd22-4d1c-9201-556fb549809c</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

### Instruments

View and manage your Instruments.

<table data-view="cards" data-full-width="false"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>View Instruments</strong></td><td>/<em>security/fund/:fundId/instrument</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#fc8feb71-ba2c-4c6d-b7ba-a6b0f50a25aa">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#fc8feb71-ba2c-4c6d-b7ba-a6b0f50a25aa</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Instrument (by Id)</strong></td><td><em>/security/fund/:id/instrument/:instrumentId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#034d1911-942a-40a9-90e3-7cc88f262309">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#034d1911-942a-40a9-90e3-7cc88f262309</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Instrument Orderbooks</strong></td><td><em>/security/fund/:fundId/instrument/:instrumentId/orderbook</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#8f79f566-5b98-41fc-a7a9-931dffad1d9f">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#8f79f566-5b98-41fc-a7a9-931dffad1d9f</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Update Instrument Description</strong></td><td>/<em>security/fund/:fundId/instrument/:instrumentId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#bc3c4b7d-356f-4dcc-86a5-47b795c1553f">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#bc3c4b7d-356f-4dcc-86a5-47b795c1553f</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Set up Subscription and Redemption details for an Instrument</strong></td><td>/profile/registries/:instrumentId/dynamic-fields</td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#d7d0b275-a608-4c41-80bf-5bad1d599929">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#d7d0b275-a608-4c41-80bf-5bad1d599929</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Update NAV</strong></td><td><em>/security/fund/:fundId/instrument/:instrumentId/nav</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#5c3cf8da-7592-4fd3-b4e5-230a3f4a58db">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#5c3cf8da-7592-4fd3-b4e5-230a3f4a58db</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View NAV</strong><br><em>/security/fund/:fundId/instrument/:instrumentId/nav</em></td><td></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#7d48b6ba-922e-4ea0-bc78-ac346cc789f5">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#7d48b6ba-922e-4ea0-bc78-ac346cc789f5</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Get settlement approval details</strong></td><td><em>/orderbook/settlement</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#9496898f-accd-4af1-ae74-02b42fc83260">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#9496898f-accd-4af1-ae74-02b42fc83260</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Get settlement approval details (by Id)</strong></td><td><em>/orderbook/:orderbookId/settlement</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#aac8e408-33cb-4ab5-9eed-02c09e0bf479">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#aac8e408-33cb-4ab5-9eed-02c09e0bf479</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

### Dealers

View information on Dealers.

<table data-view="cards" data-full-width="false"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>View Dealers</strong></td><td><em>/user</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#8d1c1e7a-c8ad-42fb-8140-a15d3440942f">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#8d1c1e7a-c8ad-42fb-8140-a15d3440942f</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Dealer's Instruments</strong></td><td><em>/user/:userId/fund/:instrumentId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#bfad0260-9681-40e7-9be5-30edfa6a514a">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#bfad0260-9681-40e7-9be5-30edfa6a514a</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

### Investors

View Investors, handle their access into your own instruments.

<table data-view="cards" data-full-width="false"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>Allow Investor for Instrument</strong></td><td><em>/user/fund-admin/request-access/instrument/investor</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#dd8dea7d-2c0f-4efb-b8ef-966a6ca8b65b">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#dd8dea7d-2c0f-4efb-b8ef-966a6ca8b65b</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Investors</strong></td><td><em>/user</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#8d1c1e7a-c8ad-42fb-8140-a15d3440942f">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#8d1c1e7a-c8ad-42fb-8140-a15d3440942f</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Investor (by Id)</strong></td><td><em>/user/:investorId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#9a4758f4-88d0-4d2c-ba83-124ac40b9b03">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#9a4758f4-88d0-4d2c-ba83-124ac40b9b03</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View an Investor's Orderbook</strong></td><td><em>/user/:investorId/orderbook</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#6ad7c479-4253-4b5c-bdc0-e94b9c922bdc">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#6ad7c479-4253-4b5c-bdc0-e94b9c922bdc</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Investor's Instruments</strong></td><td><em>/user/:userId/fund/:instrumentId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#bfad0260-9681-40e7-9be5-30edfa6a514a">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#bfad0260-9681-40e7-9be5-30edfa6a514a</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

### Investor's Subscriptions

View and settle Investor's subscription orders.

<table data-view="cards" data-full-width="false"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>View Subscription Orders</strong></td><td><em>/orderbook/order</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#dfd1c88a-062c-4e5d-986e-6c182a96e075">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#dfd1c88a-062c-4e5d-986e-6c182a96e075</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Subscription Order (by Id)</strong></td><td><em>/orderbook/order/:orderId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#af2e56ec-b42d-4eac-ab84-69083a8852a4">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#af2e56ec-b42d-4eac-ab84-69083a8852a4</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Lock Subscription Order</strong></td><td><em>/orderbook/subscription/order/lock</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#fa645693-54a8-4674-8ff3-52aeabcbde5a">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#fa645693-54a8-4674-8ff3-52aeabcbde5a</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Settle Subscription Orders</strong></td><td><em>/orderbook/subscription/order/settle</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#4ec2b41a-be2c-4bee-85ce-16030e970e92">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#4ec2b41a-be2c-4bee-85ce-16030e970e92</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

### Investor's Redemptions

View and settle Investor's redemption orders.

<table data-view="cards" data-full-width="false"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>View Redemption Orders</strong></td><td><em>/orderbook/order</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#dfd1c88a-062c-4e5d-986e-6c182a96e075">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#dfd1c88a-062c-4e5d-986e-6c182a96e075</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Redemption Order (by Id)</strong></td><td><em>/orderbook/order/:orderId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#af2e56ec-b42d-4eac-ab84-69083a8852a4">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#af2e56ec-b42d-4eac-ab84-69083a8852a4</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Settle Redemption Orders</strong></td><td><em>/orderbook/redemption/order/settle</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#a3e10c4c-6b69-45ec-bfec-a875ce151bd3">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#a3e10c4c-6b69-45ec-bfec-a875ce151bd3</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

## Requests

### Agreement Requests

Handle agreement requests from Investors.

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>Accept/Reject Agreement Request</strong></td><td><em>/order-request/:requestId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#2f1b756d-6607-408a-8c9a-9d5351a963aa">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#2f1b756d-6607-408a-8c9a-9d5351a963aa</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><p><strong>View Agreement Requests</strong></p><p><em>/order-request</em></p></td><td></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#91799bd8-17e6-4cf7-9263-1167abc8d92c">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#91799bd8-17e6-4cf7-9263-1167abc8d92c</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Full Agreement Request (by Id)</strong></td><td><em>/order-request/:requestId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#d4c22c9c-18cc-44f0-96df-7ed5682abcb8">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#d4c22c9c-18cc-44f0-96df-7ed5682abcb8</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Agreement Document (by Id)</strong></td><td><em>/docusign/document/:documentId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#56201678-d1b8-4f2b-92eb-3532b80b5869">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#56201678-d1b8-4f2b-92eb-3532b80b5869</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Custom Fields from Document (by Id)</strong></td><td><em>/docusign/custom-fields/:orderId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#dd06c0e5-9ad0-4073-870c-b4af51985a7d">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#dd06c0e5-9ad0-4073-870c-b4af51985a7d</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Document Envelope (by Id)</strong></td><td><em>/docusign/envelop/:orderId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#4387087b-4170-4d80-b3d9-f6539031c791">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#4387087b-4170-4d80-b3d9-f6539031c791</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

### Access Requests

Reply to and view requests towards an admin.

<table data-view="cards" data-full-width="false"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>Respond to Access Request</strong></td><td><em>/user/fund-admin/request-access/:requestId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#157013a3-b32e-4049-b21f-0bcf56b139ad">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#157013a3-b32e-4049-b21f-0bcf56b139ad</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Access Requests</strong></td><td><em>/user/fund-admin/request-access</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#2fdbb5f3-5d26-42ae-bc76-672b215bde5d">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#2fdbb5f3-5d26-42ae-bc76-672b215bde5d</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Access Request (by Id)</strong></td><td><em>/user/fund-admin/request-access/:requestId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#aca23bbd-d84c-452b-93cd-ece15fcea7f5">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#aca23bbd-d84c-452b-93cd-ece15fcea7f5</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

### General Requests

Create and view your general requests towards the KAIO Admin.

<table data-view="cards" data-full-width="false"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>Send General Request to Admin</strong></td><td><em>/request</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#b803c439-dafb-4a15-b4db-47b5962254b2">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#b803c439-dafb-4a15-b4db-47b5962254b2</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View General Requests</strong></td><td><em>/request</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#378b5e84-2caa-416d-bade-1118fe22bad4">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#378b5e84-2caa-416d-bade-1118fe22bad4</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View General Request (by Id)</strong></td><td><em>/request/:requestId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#16405492-bb38-4079-a003-33969d47e635">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#16405492-bb38-4079-a003-33969d47e635</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

## Compliance

### Rule Modules

Handle your rule modules containing rules for investors using your instruments.

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>Register Module</strong></td><td><em>/profile/module/register</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#0e930155-c657-47cb-9755-a1d6c3078fef">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#0e930155-c657-47cb-9755-a1d6c3078fef</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Modules</strong></td><td><em>/module</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#6186ec79-0258-46c7-8ff6-b9b6fadbb663">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#6186ec79-0258-46c7-8ff6-b9b6fadbb663</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Module (by Id)</strong></td><td><em>/module/:moduleId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#3360d30f-427c-4945-9da7-f9c3f7191876">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#3360d30f-427c-4945-9da7-f9c3f7191876</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Delete Module</strong></td><td><em>/module/dealer</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#ad037add-cad9-4585-9727-9356f3c8bd5d">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#ad037add-cad9-4585-9727-9356f3c8bd5d</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Enable/Disable Module</strong></td><td><em>/profile/module/dealer</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#fb627120-ffd3-4f80-9000-b2982fa40821">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#fb627120-ffd3-4f80-9000-b2982fa40821</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

### On-chain Transactions

Submit transactions, query data or simulate transactions from any smart contract

<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><strong>Submit a transaction to smart contract</strong></td><td><em>transaction/submit</em></td><td></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#756940d3-586a-4832-be7b-a24df22552c8">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#756940d3-586a-4832-be7b-a24df22552c8</a></td></tr><tr><td><strong>Query or simulate a transaction to smart contract</strong></td><td><em>transaction/query</em></td><td></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#a06fe6c0-4691-42a5-a754-e6e225f3201d">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#a06fe6c0-4691-42a5-a754-e6e225f3201d</a></td></tr><tr><td></td><td></td><td></td><td></td><td></td></tr></tbody></table>

### Registries

Handle instrument registry data directly.

{% hint style="warning" %}
Editing registry data directly is an advanced feature. To avoid issues, it should only be done with a good understanding of [how registries work](https://github.com/NethermindEth/libre-documentation/blob/release/using-libre/understanding-projects/broken-reference/README.md).
{% endhint %}

<table data-view="cards" data-full-width="false"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>Edit Instrument Registry Data</strong></td><td><em>/profile/registries/:registryId/dynamic-fields</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#d7d0b275-a608-4c41-80bf-5bad1d599929">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#d7d0b275-a608-4c41-80bf-5bad1d599929</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>


# KAIO Admin

{% content-ref url="/pages/V5Ha8bacJ1cl58U5rAzm" %}
[KAIO Admin How-Tos](/guide-to-using-kaio/understanding-projects/libre-admin/libre-admin-how-tos)
{% endcontent-ref %}

{% content-ref url="/pages/2vOQt5DQFmsMgarxcMwJ" %}
[KAIO Admin References](/guide-to-using-kaio/understanding-projects/libre-admin/libre-admin)
{% endcontent-ref %}


# KAIO Admin How-Tos

How-to guide for common KAIO Admin flows

## Onboard

The KAIO Admin profile is first created and set up internally. Once set up, you will receive an email in order to reset your default password. From this point forward, you can log in normally, using your email, password, and Multi-factor authentication (MFA). When you initiate the login, you will receive a response indicating if you can use MFA, or if you need to set it up first. To set it up, you must first associate and validate an authenticator app. You can then complete the login with the required MFA code. When you complete the login, you will receive a JWT Token, which you can then use for other API calls.

{% hint style="info" %}
**This token expires after 1 hour**, after which you will have to log in again.
{% endhint %}

1. [Change Default Password](/guide-to-using-kaio/understanding-projects/libre-admin/libre-admin#account)
2. [Initiate Login](/guide-to-using-kaio/understanding-projects/libre-admin/libre-admin#account)
3. [Validate MFA](/guide-to-using-kaio/understanding-projects/libre-admin/libre-admin#account) (only if setting up)
4. [Complete Login (with MFA)](/guide-to-using-kaio/understanding-projects/libre-admin/libre-admin#account)

## Log In

You can log in using your email and password. When you log in, you will receive a JWT Token, which you can then use for other API calls.

{% hint style="info" %}
**This token expires after 1 hour**, after which you will have to log in again.
{% endhint %}

1. [Log in](/guide-to-using-kaio/understanding-projects/libre-admin/libre-admin#account)

## Onboard a Fund Admin

You can register Dealers, and then give them access to specific Funds or instruments.

1. [Create a Fund Admin](/guide-to-using-kaio/understanding-projects/libre-admin/libre-admin#fund-admins)

## Create a Fund

You can create a fund in the system. You can then assign this fund to a Fund Admin so they can manage it.

1. [Create a Fund](/guide-to-using-kaio/understanding-projects/libre-admin/libre-admin#funds)
2. [Assign a Fund Admin](/guide-to-using-kaio/understanding-projects/libre-admin/libre-admin#fund-admins)

## Create an Instrument

You can create an instrument inside an already existing fund. Afterwards you can create a new role for managing the instrument (convention is *FUND\_ADMINS\_\<instrumentName>*) and assign it to a Fund Admin, so they can finish setting it up. If you want Fund Admins to settle orders, you can set the number of approvals required. Finally you can initialize the instrument.

1. [Create an Instrument](/guide-to-using-kaio/understanding-projects/libre-admin/libre-admin#instruments)
2. [Create a new Role](/guide-to-using-kaio/understanding-projects/libre-admin/libre-admin#roles)
3. [Grant Role to Fund Admin](/guide-to-using-kaio/understanding-projects/libre-admin/libre-admin#roles)
4. [Set Role as Contract Manager](/guide-to-using-kaio/understanding-projects/libre-admin/libre-admin#roles)
5. [Set number of Approvals for Settlement by Fund Admins](/guide-to-using-kaio/understanding-projects/libre-admin/libre-admin#instruments)
6. [Initialize the Instrument](/guide-to-using-kaio/understanding-projects/libre-admin/libre-admin#instruments)

## Onboard a Dealer

You can register Dealers, and then give them access to specific Funds or instruments.

1. [Create a Dealer](/guide-to-using-kaio/understanding-projects/libre-admin/libre-admin#dealers)
2. [Give Dealer access to a Fund](/guide-to-using-kaio/understanding-projects/libre-admin/libre-admin#dealers)

## Manage the Lifecycle of Orders

As the KAIO Admin, you can settle orders. In the case of subscriptions, you also need to lock orders before they are settled. In the case of redemptions, you need to fill orders before settling them.

**Subscriptions:**

1. [Lock Subscription Order](/guide-to-using-kaio/understanding-projects/libre-admin/libre-admin#investors-subscriptions)
2. [Settle Subscription Order](/guide-to-using-kaio/understanding-projects/libre-admin/libre-admin#investors-subscriptions)

**Redemptions:**

1. [Fill Redemption Order](/guide-to-using-kaio/understanding-projects/libre-admin/libre-admin#investors-redemptions)
2. [Settle Redemption Order](/guide-to-using-kaio/understanding-projects/libre-admin/libre-admin#investors-redemptions)

## Set up Compliance Checks

You can set up compliance information, which made up of two parts. The first is the requirements for each jurisdiction, which need to be set. The second are the Rule Modules, that include the customizable compliance checks for all Investors using KAIO . These modules need to be deployed and registered.

1. [Set Jurisdiction data](/guide-to-using-kaio/understanding-projects/libre-admin/libre-admin#jurisdictions)
2. [Deploy Rule Module](/guide-to-using-kaio/understanding-projects/libre-admin/libre-admin#rule-modules)
3. [Register Rule Module](/guide-to-using-kaio/understanding-projects/libre-admin/libre-admin#rule-modules)


# KAIO Admin References

All operations the KAIO Admin can perform using the API

## User

### Account

Handle logging into your account, viewing it, password management, and Multi-factor authentication.

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>Initiate Login</strong></td><td><em>/auth/login</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#19707a78-0ed9-455b-a307-ad52ab8746f0">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#19707a78-0ed9-455b-a307-ad52ab8746f0</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Complete Login (with MFA code)</strong></td><td><em>/auth/login/mfa</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#ee883516-db00-4cbe-89f5-126e74a204a6">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#ee883516-db00-4cbe-89f5-126e74a204a6</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Validate MFA</strong></td><td><em>/auth/mfa/validate</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#40688b97-ca43-4cb7-bdf6-5aba1bad7dd2">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#40688b97-ca43-4cb7-bdf6-5aba1bad7dd2</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Full Profile</strong></td><td><em>/profile</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#11b0fc01-4b12-4c9d-b91c-6e82127a1091">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#11b0fc01-4b12-4c9d-b91c-6e82127a1091</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Profile Summary</strong></td><td><em>/user/myprofile</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#f9ada140-b058-496d-b065-6472582c52ff">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#f9ada140-b058-496d-b065-6472582c52ff</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Set Password</strong></td><td><em>/auth/confirm-password</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#ea875770-20bf-461c-b476-ae577c0f4298">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#ea875770-20bf-461c-b476-ae577c0f4298</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Change Password</strong></td><td><em>/auth/change-password</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#50777b00-af87-4d30-aa62-f7edc0da4d00">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#50777b00-af87-4d30-aa62-f7edc0da4d00</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Change Default Password</strong></td><td><em>/auth/login/temp</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#f1457ab4-51ac-456e-88fb-59f25e7d4beb">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#f1457ab4-51ac-456e-88fb-59f25e7d4beb</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Reset Forgotten Password</strong></td><td><em>/auth/forgot-password</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#66fecbb2-7862-4480-844b-2bb868c186ef">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#66fecbb2-7862-4480-844b-2bb868c186ef</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

### Roles

Handle roles in the system.

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>Create Role</strong></td><td><em>/profile/role/create</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#9fc08af6-132f-4529-a41e-21ab93296b2c">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#9fc08af6-132f-4529-a41e-21ab93296b2c</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Grant Role</strong></td><td><em>/profile/role/grant</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#60fd83f8-ef81-4be7-bf84-b585642b66c8">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#60fd83f8-ef81-4be7-bf84-b585642b66c8</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Grant Access</strong></td><td><em>/profile/role/grant/access</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#8d9d9775-1c3e-423e-bf47-c4532bf22e4a">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#8d9d9775-1c3e-423e-bf47-c4532bf22e4a</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Revoke Access</strong></td><td><em>/profile/role/revoke</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#f960ce14-de9d-43a0-b946-e446c06c4458">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#f960ce14-de9d-43a0-b946-e446c06c4458</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Reset Access</strong></td><td><em>/profile/role/reset</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#a8a0688d-b2d8-4a08-a42d-22f6f0a87976">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#a8a0688d-b2d8-4a08-a42d-22f6f0a87976</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Set Contract Manager</strong></td><td><em>/admin/role/contract-manager</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#002ab329-c2f6-4717-b693-02f7f4ed658b">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#002ab329-c2f6-4717-b693-02f7f4ed658b</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

### Wallets

Create and view user wallets, and update their labels.

<table data-view="cards" data-full-width="false"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>Create Wallet</strong></td><td><em>/user/:userId/wallet</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#5a4ed0fc-b4b6-4c26-99d5-460cd9362158">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#5a4ed0fc-b4b6-4c26-99d5-460cd9362158</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Wallets</strong></td><td><em>/wallet</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#74a6fb63-1a38-4859-b33f-37c33823e4f2">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#74a6fb63-1a38-4859-b33f-37c33823e4f2</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Wallet (by user)</strong></td><td><em>/user/:userId/wallet</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#fb33f1d5-c1ad-471a-882e-2d5247baf9ab">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#fb33f1d5-c1ad-471a-882e-2d5247baf9ab</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Wallet (by address)</strong></td><td><em>/user/:userId/wallet/:address</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#c1ce4f03-50c1-4bf5-957a-98601f450c06">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#c1ce4f03-50c1-4bf5-957a-98601f450c06</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Update Wallet Label</strong></td><td><em>/user/:userId/wallet/:address</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#281aff1a-059a-401f-978b-186b8572ff26">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#281aff1a-059a-401f-978b-186b8572ff26</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

### Portfolio

View an Investor's current holdings and past settlements.

<table data-view="cards" data-full-width="false"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>View Current Holdings</strong></td><td><em>/portfolio</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#f33d37b3-ee1c-427f-8fc3-7f53dfe40836">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#f33d37b3-ee1c-427f-8fc3-7f53dfe40836</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Past Settlements</strong></td><td><em>/portfolio/settlement</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#d15db161-52e6-42f3-b4a7-8590f768fbc6">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#d15db161-52e6-42f3-b4a7-8590f768fbc6</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

## Management

### Funds

Create, view, and update Funds.

<table data-view="cards" data-full-width="false"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>Create Fund</strong></td><td><em>/security/fund</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#d1bae298-4b1e-4962-8a89-4b0f525020c6">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#d1bae298-4b1e-4962-8a89-4b0f525020c6</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Update Fund</strong></td><td>/<em>security/fund/:fundId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#7a06f86a-e3b0-40f0-b214-5611ae65db91">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#7a06f86a-e3b0-40f0-b214-5611ae65db91</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Funds</strong></td><td><em>/security/fund</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#ecf45e72-3abd-4b0b-80b3-1b3a0c407da8">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#ecf45e72-3abd-4b0b-80b3-1b3a0c407da8</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Fund (by Id)</strong></td><td><em>/security/fund/:fundId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#e6957477-b38f-486f-b9af-4716ec6b3294">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#e6957477-b38f-486f-b9af-4716ec6b3294</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Fund Orderbooks</strong></td><td><em>/security/fund/:fundId/orderbook</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#37c3fff1-378d-4614-a0b3-13b35d4c4639">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#37c3fff1-378d-4614-a0b3-13b35d4c4639</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Fund Clients</strong></td><td><em>/security/fund/:fundId/clients</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#cd81ad8b-dd22-4d1c-9201-556fb549809c">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#cd81ad8b-dd22-4d1c-9201-556fb549809c</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

### Instruments

Create, view, and manage Instruments.

<table data-view="cards" data-full-width="false"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>Create Instrument</strong></td><td>/<em>security/fund/:fundId/instrument</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#eae9dae2-c4a3-479d-a30d-ffa338908f3b">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#eae9dae2-c4a3-479d-a30d-ffa338908f3b</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Instruments</strong></td><td>/<em>security/fund/:fundId/instrument</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#fc8feb71-ba2c-4c6d-b7ba-a6b0f50a25aa">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#fc8feb71-ba2c-4c6d-b7ba-a6b0f50a25aa</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Instrument (by Id)</strong></td><td><em>/security/fund/:id/instrument/:instrumentId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#034d1911-942a-40a9-90e3-7cc88f262309">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#034d1911-942a-40a9-90e3-7cc88f262309</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Update Instrument Description</strong></td><td>/<em>security/fund/:fundId/instrument/:instrumentId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#bc3c4b7d-356f-4dcc-86a5-47b795c1553f">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#bc3c4b7d-356f-4dcc-86a5-47b795c1553f</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Set up Subscription and Redemption Details for an Instrument</strong></td><td>/profile/registries/:instrumentId/dynamic-fields</td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#d7d0b275-a608-4c41-80bf-5bad1d599929">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#d7d0b275-a608-4c41-80bf-5bad1d599929</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Initialize Instrument</strong></td><td><em>/security/fund/:fundId/instrument/:instrumentId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#74a4325d-c0cc-44b1-b523-793739f02e1f">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#74a4325d-c0cc-44b1-b523-793739f02e1f</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Update NAV</strong></td><td><em>/security/fund/:fundId/instrument/:instrumentId/nav</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#5c3cf8da-7592-4fd3-b4e5-230a3f4a58db">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#5c3cf8da-7592-4fd3-b4e5-230a3f4a58db</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View NAV</strong></td><td><em>/security/fund/:fundId/instrument/:instrumentId/nav</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#7d48b6ba-922e-4ea0-bc78-ac346cc789f5">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#7d48b6ba-922e-4ea0-bc78-ac346cc789f5</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Set Approval Number for Settlement</strong></td><td><em>/orderbook/:orderbookId/settlement</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#f404ebeb-94ad-469f-8c62-f9f51a684b39">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#f404ebeb-94ad-469f-8c62-f9f51a684b39</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Settlement Approval Details</strong></td><td><em>/orderbook/settlement</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#9496898f-accd-4af1-ae74-02b42fc83260">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#9496898f-accd-4af1-ae74-02b42fc83260</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Settlement Approval Details (by Id)</strong></td><td><em>/orderbook/:orderbookId/settlement</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#aac8e408-33cb-4ab5-9eed-02c09e0bf479">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#aac8e408-33cb-4ab5-9eed-02c09e0bf479</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

### Fund Admins

Create, view, and handle Fund Admins.

<table data-view="cards" data-full-width="false"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>Create Fund Admin</strong></td><td>/<em>auth/register</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#90ae9682-be7e-43d2-b2d2-5a5f9d005e54">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#90ae9682-be7e-43d2-b2d2-5a5f9d005e54</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Update Fund Admin</strong></td><td><em>/user/:fundAdmin</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#26722947-c173-41c4-8653-e2c45b7cd391">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#26722947-c173-41c4-8653-e2c45b7cd391</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Fund Admins</strong></td><td><em>/user</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#8d1c1e7a-c8ad-42fb-8140-a15d3440942f">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#8d1c1e7a-c8ad-42fb-8140-a15d3440942f</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Fund Admin (by Id)</strong></td><td><em>/user/:userId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#9a4758f4-88d0-4d2c-ba83-124ac40b9b03">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#9a4758f4-88d0-4d2c-ba83-124ac40b9b03</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Assign Fund Admin to Fund</strong></td><td><em>/user/:fundAdminId/subscribe</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#c4c8550a-f501-4c35-9eb3-4a58716e8bf6">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#c4c8550a-f501-4c35-9eb3-4a58716e8bf6</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Manage Fund Admin Access</strong></td><td><em>/auth/access</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#9dee0675-13ed-4fd1-b5bb-2c7d2e3eb54b">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#9dee0675-13ed-4fd1-b5bb-2c7d2e3eb54b</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

### Dealers

Create, view, and handle Dealers.

<table data-view="cards" data-full-width="false"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>Create Dealer</strong></td><td>/<em>auth/register</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#90ae9682-be7e-43d2-b2d2-5a5f9d005e54">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#90ae9682-be7e-43d2-b2d2-5a5f9d005e54</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Update Dealer</strong></td><td><em>/user/:dealerId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#26722947-c173-41c4-8653-e2c45b7cd391">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#26722947-c173-41c4-8653-e2c45b7cd391</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Dealers</strong></td><td><em>/user</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#8d1c1e7a-c8ad-42fb-8140-a15d3440942f">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#8d1c1e7a-c8ad-42fb-8140-a15d3440942f</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Give Dealer Access to Fund</strong></td><td><em>/user/:dealerId/subscribe</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#c4c8550a-f501-4c35-9eb3-4a58716e8bf6">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#c4c8550a-f501-4c35-9eb3-4a58716e8bf6</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Dealer's Instruments</strong></td><td><em>/user/:userId/fund/:instrumentId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#bfad0260-9681-40e7-9be5-30edfa6a514a">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#bfad0260-9681-40e7-9be5-30edfa6a514a</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Manage Dealer Access</strong></td><td><em>/auth/access</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#9dee0675-13ed-4fd1-b5bb-2c7d2e3eb54b">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#9dee0675-13ed-4fd1-b5bb-2c7d2e3eb54b</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

### Investors

View Investors.

<table data-view="cards" data-full-width="false"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>Change Dealer</strong></td><td><em>/user/:investorId/assign/dealer</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#ba9a3815-9d7c-4fea-acf9-7f1b171d64ed">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#ba9a3815-9d7c-4fea-acf9-7f1b171d64ed</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Allow Investor for Instrument</strong></td><td><em>/user/fund-admin/request-access/instrument/investor</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#dd8dea7d-2c0f-4efb-b8ef-966a6ca8b65b">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#dd8dea7d-2c0f-4efb-b8ef-966a6ca8b65b</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Investors</strong></td><td><em>/user</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#8d1c1e7a-c8ad-42fb-8140-a15d3440942f">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#8d1c1e7a-c8ad-42fb-8140-a15d3440942f</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Investor (by Id)</strong></td><td><em>/user/:investorId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#9a4758f4-88d0-4d2c-ba83-124ac40b9b03">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#9a4758f4-88d0-4d2c-ba83-124ac40b9b03</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Investor's Orderbook</strong></td><td><em>/user/:investorId/orderbook</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#6ad7c479-4253-4b5c-bdc0-e94b9c922bdc">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#6ad7c479-4253-4b5c-bdc0-e94b9c922bdc</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Investor's Instruments</strong></td><td><em>/user/:userId/fund/:instrumentId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#bfad0260-9681-40e7-9be5-30edfa6a514a">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#bfad0260-9681-40e7-9be5-30edfa6a514a</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Manage Investor Access</strong></td><td><em>/auth/access</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#9dee0675-13ed-4fd1-b5bb-2c7d2e3eb54b">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#9dee0675-13ed-4fd1-b5bb-2c7d2e3eb54b</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

### Investor's Subscriptions

Settle, create, view, and handle an Investor's subscription orders through their lifecycle.

<table data-view="cards" data-full-width="false"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>View Subscription Orders</strong></td><td><em>/orderbook/order</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#dfd1c88a-062c-4e5d-986e-6c182a96e075">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#dfd1c88a-062c-4e5d-986e-6c182a96e075</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Subscription Order (by Id)</strong></td><td><em>/orderbook/order/:orderId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#af2e56ec-b42d-4eac-ab84-69083a8852a4">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#af2e56ec-b42d-4eac-ab84-69083a8852a4</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Lock Subscription Order</strong></td><td><em>/orderbook/subscription/order/lock</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#fa645693-54a8-4674-8ff3-52aeabcbde5a">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#fa645693-54a8-4674-8ff3-52aeabcbde5a</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Settle Subscription Orders</strong></td><td><em>/orderbook/subscription/order/settle</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#4ec2b41a-be2c-4bee-85ce-16030e970e92">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#4ec2b41a-be2c-4bee-85ce-16030e970e92</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Cancel Subscription Order</strong></td><td><em>/orderbook/subscription/order/cancel</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#acdc5dd6-170b-4577-aede-30c97184545b">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#acdc5dd6-170b-4577-aede-30c97184545b</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

### Investor's Redemptions

Settle, create, force, view, and handle an Investor's redemption orders through their lifecycle. You can also rebalance redemptions.

<table data-view="cards" data-full-width="false"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>View Redemption Orders</strong></td><td><em>/orderbook/order</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#dfd1c88a-062c-4e5d-986e-6c182a96e075">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#dfd1c88a-062c-4e5d-986e-6c182a96e075</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Redemption Order (by Id)</strong></td><td><em>/orderbook/order/:orderId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#af2e56ec-b42d-4eac-ab84-69083a8852a4">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#af2e56ec-b42d-4eac-ab84-69083a8852a4</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Settle Redemption Orders</strong></td><td><em>/orderbook/redemption/order/settle</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#a3e10c4c-6b69-45ec-bfec-a875ce151bd3">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#a3e10c4c-6b69-45ec-bfec-a875ce151bd3</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Cancel Redemption Order</strong></td><td><em>/orderbook/redemption/order/cancel</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#703f4a22-f827-4d68-868c-fcef91fe3a60">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#703f4a22-f827-4d68-868c-fcef91fe3a60</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Rebalance Redemption Orders</strong></td><td><em>/orderbook/redemption/order/rebalance</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#b53bfa42-717d-4c07-9541-67e97eae248d">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#b53bfa42-717d-4c07-9541-67e97eae248d</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Force Redemption</strong></td><td><em>/orderbook/redemption/order/force</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#5e92f4a7-b18b-4c65-b182-1a8276062c25">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#5e92f4a7-b18b-4c65-b182-1a8276062c25</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Fill Redemption Order</strong></td><td><em>/orderbook/redemption/order/fill</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#638ae503-bcf8-4ac2-bb85-3f96528f9f29">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#638ae503-bcf8-4ac2-bb85-3f96528f9f29</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

## Requests

### Agreement Requests

View agreement requests from Investors.

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>Accept/Reject Agreement Request</strong></td><td><em>/order-request/:requestId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#2f1b756d-6607-408a-8c9a-9d5351a963aa">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#2f1b756d-6607-408a-8c9a-9d5351a963aa</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><p><strong>View Agreement Requests</strong></p><p><em>/order-request</em></p></td><td></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#91799bd8-17e6-4cf7-9263-1167abc8d92c">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#91799bd8-17e6-4cf7-9263-1167abc8d92c</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Full Agreement Request (by Id)</strong></td><td><em>/order-request/:requestId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#d4c22c9c-18cc-44f0-96df-7ed5682abcb8">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#d4c22c9c-18cc-44f0-96df-7ed5682abcb8</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Agreement Document (by Id)</strong></td><td><em>/docusign/document/:documentId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#56201678-d1b8-4f2b-92eb-3532b80b5869">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#56201678-d1b8-4f2b-92eb-3532b80b5869</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Custom Fields from Document (by Id)</strong></td><td><em>/docusign/custom-fields/:orderId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#dd06c0e5-9ad0-4073-870c-b4af51985a7d">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#dd06c0e5-9ad0-4073-870c-b4af51985a7d</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Document Envelope (by Id)</strong></td><td><em>/docusign/envelop/:orderId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#4387087b-4170-4d80-b3d9-f6539031c791">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#4387087b-4170-4d80-b3d9-f6539031c791</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

### Access Requests

Reply to requests, or handle them towards an admin on behalf of an Investor.

<table data-view="cards" data-full-width="false"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>Respond to Access Request</strong></td><td><em>/user/fund-admin/request-access/:requestId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#157013a3-b32e-4049-b21f-0bcf56b139ad">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#157013a3-b32e-4049-b21f-0bcf56b139ad</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Access Requests</strong></td><td><em>/user/fund-admin/request-access</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#2fdbb5f3-5d26-42ae-bc76-672b215bde5d">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#2fdbb5f3-5d26-42ae-bc76-672b215bde5d</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Access Request (by Id)</strong></td><td><em>/user/fund-admin/request-access/:requestId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#aca23bbd-d84c-452b-93cd-ece15fcea7f5">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#aca23bbd-d84c-452b-93cd-ece15fcea7f5</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

### General Requests

Update and view your general requests.

<table data-view="cards" data-full-width="false"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>Update General Request Status</strong></td><td><em>/request/:requestId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#23193ba2-9f57-4a11-bd64-f3acde0e30ff">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#23193ba2-9f57-4a11-bd64-f3acde0e30ff</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View General Requests</strong></td><td><em>/request</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#378b5e84-2caa-416d-bade-1118fe22bad4">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#378b5e84-2caa-416d-bade-1118fe22bad4</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View General Request (by Id)</strong></td><td><em>/request/:requestId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#16405492-bb38-4079-a003-33969d47e635">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#16405492-bb38-4079-a003-33969d47e635</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

## Compliance

### Jurisdictions

Handle jurisdiction compliance data.

<table data-view="cards" data-full-width="false"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>Set Jurisdiction Data</strong></td><td><em>/admin/jurisdiction/</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#c63f32b3-0bc4-466b-ad1e-02797da8b2fc">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#c63f32b3-0bc4-466b-ad1e-02797da8b2fc</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

### Rule Modules

Handle your rule modules containing rules for all investors using KAIO.

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>Register Universal Module</strong></td><td><em>/module/dealer/rules-engine/register</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#4d3ba282-9dff-4e62-8c83-fc2d9e8b936a">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#4d3ba282-9dff-4e62-8c83-fc2d9e8b936a</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Universal Modules</strong></td><td><em>/module</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#6186ec79-0258-46c7-8ff6-b9b6fadbb663">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#6186ec79-0258-46c7-8ff6-b9b6fadbb663</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>View Universal Module (by Id)</strong></td><td><em>/module/:moduleId</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#3360d30f-427c-4945-9da7-f9c3f7191876">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#3360d30f-427c-4945-9da7-f9c3f7191876</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Delete Universal Module</strong></td><td><em>/module/dealer/rules-engine/delete</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#a5e78f31-b233-4d73-b2a4-7565056024d7">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#a5e78f31-b233-4d73-b2a4-7565056024d7</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr><tr><td><strong>Enable/Disable Universal Module</strong></td><td><em>/module/dealer/rules-engine/update</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#0463c088-1bee-42b8-8560-61382172d98b">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#0463c088-1bee-42b8-8560-61382172d98b</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

### Registries

Handle any registry data directly.

{% hint style="warning" %}
Editing registry data directly is an advanced feature. To avoid issues, it should only be done with a good understanding of [how registries work](https://github.com/NethermindEth/libre-documentation/blob/release/using-libre/understanding-projects/broken-reference/README.md).
{% endhint %}

<table data-view="cards" data-full-width="false"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><strong>Edit Registry Data</strong></td><td><em>/profile/registries/:registryId/dynamic-fields</em></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#d7d0b275-a608-4c41-80bf-5bad1d599929">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#d7d0b275-a608-4c41-80bf-5bad1d599929</a></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td></tr></tbody></table>

### On-chain Transactions

Submit transactions, query data or simulate transactions from any smart contract

<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><strong>Submit a transaction to smart contra</strong>ct</td><td><em>transaction/submit</em></td><td></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#756940d3-586a-4832-be7b-a24df22552c8">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#756940d3-586a-4832-be7b-a24df22552c8</a></td></tr><tr><td>Query or simulate a transaction to smart contract</td><td><em>transaction/query</em></td><td></td><td><a href="/files/XxdDimUYWAArqusPDwtM">/files/XxdDimUYWAArqusPDwtM</a></td><td><a href="https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#a06fe6c0-4691-42a5-a754-e6e225f3201d">https://documenter.getpostman.com/view/26092879/2s93Xu36Mm#a06fe6c0-4691-42a5-a754-e6e225f3201d</a></td></tr></tbody></table>


# Architecture

## Introduction

At its core, KAIO’s Gateway and APIs enable the issuance, transfer, and settlement of regulated products while linking to fund administration, banking services, liquidity pools, and cross-chain messaging. From subscriptions and redemptions to NAV reporting and collateral use, the architecture illustrates how KAIO integrates compliance, interoperability, and programmability to support both simple and complex tokenised investment strategies.

<figure><img src="/files/O3Ct9Ui78jkHdg7PdlKQ" alt=""><figcaption><p>Libre Architecture Overview</p></figcaption></figure>

***

## High Level Architecture

When talking about KAIO’s architecture, the focus is on which components make up the system, and how they interact amongst themselves. The components can be organized into two different layers: the application layer and the infrastructure layer. As described below, the infrastructure layer hosts all the components in the application layer and connects them to the Ethereum mainnet, where KAIO’s smart contracts are deployed.

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

At its highest level, the KAIO application architecture consists of three main components:

* **Frontend:** Allows end users to interact with KAIO through a GUI in an intuitive manner.
* **API:** Acts as a bridge between the frontend and the smart contracts, simplifying interaction with the logic.
* **Smart Contracts:** Implement the core business logic of the KAIO system and are deployed directly on Ethereum mainnet.

On the other hand, the KAIO Infrastructure provides everything from storage for user data to the supporting cloud services that enable seamless interaction with the Ethereum blockchain where the smart contracts run.

***

## Application Layer

This section provides a more in depth look at the internal architecture for the different components of the application layer.

### Frontend Architecture

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

The frontend application is built with *Next.js*, and features a modular and hierarchical design. The top level consists of pages, each corresponding to a route in the application. These pages make use of features, which are key functional units of the application. Alongside specific components within each feature, the architecture also includes common components. These are reusable UI elements utilized across various features. Additionally, the application uses custom hooks for shared state logic, and the *Context API* for global state management.

### API Architecture

<div data-full-width="true"><figure><img src="/files/Wx6F47e1KZte0URVm39D" alt=""><figcaption><p><em><strong>API Architecture</strong></em></p></figcaption></figure></div>

KAIO uses an API backend system to act as a bridge between the frontend and the smart contracts deployed on Ethereum. In addition to relaying transactions, the API includes supporting functionality such as notifications, user authentication, static data calculations, and custody solutions. These services rely on external cloud components within the infrastructure layer.

[**Detailed API Architecture**](https://compodoc-bucket.s3.eu-west-2.amazonaws.com/documentation/overview.html)

### Smart Contract Architecture

<div data-full-width="true"><figure><img src="/files/sDP0R1jkjGupVTVzLMU0" alt=""><figcaption><p><em><strong>Smart Contracts Architecture</strong></em></p></figcaption></figure></div>

Smart contracts on Ethereum implement the core business logic of the KAIO protocol. The architecture is registry-based, allowing users to access, store, and interact with information on-chain. Tokenisation, orders, compliance checks, and lifecycle management all reside within instrument registries.

#### Registries

The main contracts in the system are registries. Registries are used to store information and logic related to particular users or concepts:

* **Roles Registry:** Stores the information and logic related to role management and access control.
* **Jurisdiction Registry:** Stores the information related to Jurisdictions and their compliance requirements.
* **Investor Registry:** Stores the information and logic related to Investors.
* **Dealer Registry:** Stores the information and logic related to Dealers.
* **Fund Registry:** Stores the information and logic related to Funds.
* **Instrument Registry:** Stores the information and logic related to Instruments. Most of the core business logic resides inside each instrument, such as tokenization, compliance checks, and the lifecycle of orders.

#### Rules

In addition to registries, there is also rule modules. These modules implement specific rules, usually for limits or compliance. They come into play when interacting with an instrument, which can only happen if no rules are violated. The design and management of these modules is left to different users depending on who they impact:

* **KAIO Modules:** Managed by the KAIO Admin. Their rules apply to all Investors using the platform.
* **Dealer Modules:** Managed by Dealers. Their rules apply to a Dealer's Investors.
* **Instrument Modules:** Managed by Fund Admins. Their rules apply to Investors using that Instrument.

These modules are called and managed through the rules engine. This contract makes sure the right module is called whenever a rules check is needed. Modules need to be registered to the rules engine, after which they can be disabled if required. A general rules engine exists for the KAIO Admin and Dealers, while each instrument also has its own rules engine for their Fund Admin.

#### Order Books

Order books exist for each instrument, and contain the logic for the lifecycle of the tokenized asset, known as the subscription book and the redemption book. Subscribing or redeeming work in phases, and for each one the appropriate rules are checked to guarantee compliance.

#### Tokens

Each instrument issues a security token on Ethereum, representing the regulated asset. These tokens are permissioned—usable only by approved investors—and cannot move outside the KAIO ecosystem without meeting compliance requirements. A shared settlement token, representing USD, is also used across instruments for payments and reconciliations. There are also rules enforced when transferring the token.

***

## Infrastructure Layer

This section provides a more in depth look at the architecture of the infrastructure layer, and how the components of the application layer fit within it. It also includes a deep dive into the architecture of the blockchain network itself.

### Application Components

<div data-full-width="true"><figure><img src="/files/Q130XznuTwxL0GGWC5Mh" alt=""><figcaption><p><em><strong>Application Components</strong></em></p></figcaption></figure></div>

The components shown above make up the application layer. They all reside within an EKS managed Kubernetes cluster, that provisions resources for them dynamically. In addition some components are not directly part of the application, but are utilities that help support it, such as with continuous delivery or monitoring.

### Cloud Service Components

<div data-full-width="true"><figure><img src="/files/NONRM9AQmMO91lF2Fkkz" alt=""><figcaption><p><em><strong>Cloud Service Components</strong></em></p></figcaption></figure></div>

The KAIO infrastructure also contains a large number of cloud service components that are used for a variety of things, such as computing, development, networking, storage, security, and more. Most of these services are part of AWS.

### Combined Infrastructure Architecture

<div data-full-width="true"><figure><img src="/files/HMtca0iWk4aF7z8ENvjx" alt=""><figcaption><p><em><strong>Infrastructure Architecture Overview</strong></em></p></figcaption></figure></div>

The above diagram shows an overview of the infrastructure architecture, including both the application and the service components explored previously. As can be observed, the application components are enhanced and complemented by the cloud services, which allows them to interact and function as intended.

### Blockchain Architecture

<div data-full-width="true"><figure><img src="/files/awqiroQK3V2s8Swg2PmH" alt=""><figcaption><p><em><strong>Blockchain Network Architecture</strong></em></p></figcaption></figure></div>

KAIO’s smart contracts run directly on Ethereum mainnet, leveraging its security, decentralisation, and settlement guarantees.

#### Dedicated Virtual Private Cloud

A Virtual Private Cloud (VPC) is a logically isolated section of the AWS cloud where resources can be launched in a virtual network. The dedicated VPC provides an isolated environment for hosting all the supporting infrastructure components. This isolation enhances security by preventing unauthorized access from external networks.

**Execution & Settlement Layer – Ethereum Mainnet**

The execution and settlement of KAIO’s smart contracts occur on Ethereum. All registries, rules, and order book logic are deployed on-chain, ensuring compliance, transparency, and finality without relying on a permissioned chain.

**Bridges & L2 Gateway Access**

Where scaling or cross-chain connectivity is required, KAIO integrates with Ethereum-based bridges and Layer-2 networks. In addition, the **KAIO Gateway** provides a bridge infrastructure that connects with both EVM and non-EVM chains, enabling tokenised assets to move across diverse ecosystems with low friction.

#### Network Load Balancer

The Network Load Balancer (NLB) is a network service provided by AWS. In the context of the blockchain infrastructure, it's used when exposing the JSON-RPC endpoint to the external world. JSON-RPC is a remote procedure call protocol encoded in JSON. This endpoint allows developers to interact with the blockchain network using API calls. The NLB helps distribute incoming API requests across multiple validator nodes, ensuring efficient load distribution and high availability.


# Smart Contracts

Workings of the KAIO Smart Contracts

## Overview

The KAIO smart contracts are at the core of the KAIO platform. They implement the main business logic that enables the platform to work in an efficient and secure manner. This section of the documentation serves to explain how they operate. This page provides an overview and describes the smart contract architecture, while each sub-section focuses on the logic of specific contracts or groups of contracts:

* [Registries](/how-kaio-works/smart-contracts/registries) storing data and logic for specific groups.
* [Rules](/how-kaio-works/smart-contracts/rules) engines and modules used to apply restrictions to user operations.
* [Order Books](/how-kaio-works/smart-contracts/order-books) containing the instrument lifecycle logic for subscriptions, redemptions, and relevant fees.
* [Tokens](/how-kaio-works/smart-contracts/tokens) used throughout the KAIO system, denoting USD and tokenized shares.

## User Types

There are four user types, as described in the following table:

<table data-full-width="false"><thead><tr><th>User Type</th><th>Description</th></tr></thead><tbody><tr><td><strong>Investor</strong></td><td>Investors are clients of private banks. They can hold and trade tokenized assets for the Instruments they meet the requirements for.</td></tr><tr><td><strong>Dealer</strong></td><td>Dealers are private banks and advisors that are responsible for onboarding investors, and managing their data. They can also manage orders on their behalf.</td></tr><tr><td><strong>Fund Admin</strong></td><td>Fund Admins are responsible for managing the Funds they control, and all the Instruments within the Fund.</td></tr><tr><td><strong>KAIO Admin</strong></td><td>The KAIO Admin has control of KAIO. They are responsible for onboarding new Dealers and Fund Admins, and creating new Funds and Instruments.</td></tr></tbody></table>

## Architecture

An explanation of the KAIO smart contract architecture can be found in: [Architecture](/how-kaio-works/architecture#smart-contract-architecture).


# Registries

{% content-ref url="/pages/FgQ6GDI43Zca4lDA7gzd" %}
[Eternal Registry Storage](/how-kaio-works/smart-contracts/registries/eternal-registry-storage)
{% endcontent-ref %}

{% content-ref url="/pages/r5hXqdRH9tSUI57UTW94" %}
[Base Registry](/how-kaio-works/smart-contracts/registries/base-registry)
{% endcontent-ref %}

{% content-ref url="/pages/iYWkXlOthWdtwjZYvNj5" %}
[Role Registry](/how-kaio-works/smart-contracts/registries/role-registry)
{% endcontent-ref %}

{% content-ref url="/pages/2qwVd0DZTS5F3gigCC5R" %}
[Jurisdiction Registry](/how-kaio-works/smart-contracts/registries/jurisdiction-registry)
{% endcontent-ref %}

{% content-ref url="/pages/fsH7moOrCewcXE49bNTl" %}
[Investor Registry](/how-kaio-works/smart-contracts/registries/investor-registry)
{% endcontent-ref %}

{% content-ref url="/pages/vgSAHZZPzLQdGOTkdhfM" %}
[Dealer Registry](/how-kaio-works/smart-contracts/registries/dealer-registry)
{% endcontent-ref %}

{% content-ref url="/pages/GX5fVehU1ShqAio1BhiT" %}
[Fund Registry](/how-kaio-works/smart-contracts/registries/fund-registry)
{% endcontent-ref %}

{% content-ref url="/pages/8ROtpcsbAQJuzaJhWuAB" %}
[Instrument Registry](/how-kaio-works/smart-contracts/registries/instrument-registry)
{% endcontent-ref %}


# Eternal Registry Storage

Eternal Storage for the KAIO Registries.

## Eternal Storage

Registries make use of the eternal storage pattern to store information. This pattern allows for storing data indexed by the hash of its identifier, instead of contiguously with other data. The data type used for identifiers is *bytes32,* this is preferred to something like *string* for efficiency. The convention chosen for these identifiers is applying the *keccak256* hash function to the string version of them. The majority of identifiers can be found in <mark style="color:red;">`Constants.sol`</mark>.

The Eternal Storage pattern has two main advantages:

* Upgrading contracts is much simpler, since all data stored in the Eternal Registry will not be affected or cause any issues.
* Variables can be added or deleted from the registry without having to change the contract. This is especially useful if old data becomes irrelevant, or if new data should be added to the registry. For example if one day a new data field needs to be filled out for all Dealers, this can be done without changing the Dealer Registry.

## Implementation & Data Types

The implementation of eternal storage in KAIO is done using the <mark style="color:red;">`EternalRegistryStorage.sol`</mark> contract. This contract supports the following data types with the following functions:

<table><thead><tr><th width="185">Data Type</th><th width="302">Set Function</th><th>Get Function</th></tr></thead><tbody><tr><td><code>Bool</code></td><td><em>_setBool()</em></td><td><em>getBool()</em></td></tr><tr><td><code>Uint256</code></td><td><em>_setUint()</em></td><td><em>getUint()</em></td></tr><tr><td><code>Address</code></td><td><em>_setAddress()</em></td><td><em>getAddress()</em></td></tr><tr><td><code>String</code></td><td><em>_setString()</em></td><td><em>getString()</em></td></tr><tr><td><code>Bytes32</code></td><td><em>_setBytes()</em></td><td><em>getBytes()</em></td></tr><tr><td><code>Batch</code> (<em>any combination of the above</em>)*</td><td><em>_setBatch()</em></td><td><em>getBatch()</em></td></tr><tr><td><code>Address[]</code></td><td><p><em>_setAddressArray()</em></p><p><em>_setAddressArrayIndexValue()</em></p><p><em>_pushAddressArray()</em></p><p><em>_deleteAddressArrayIndexValue()</em></p></td><td><em>getAddressArray(), getAddressArrayIndexValue()</em></td></tr></tbody></table>

*\*It is possible to get and set multiple values at once using batch functions, in order to save time and gas. This includes batch getting or setting values of different types.*


# Base Registry

Base KAIO Registry.

## Overview

The base registry (<mark style="color:red;">`BaseRegistry.sol`</mark>) is a contract that implements the core functionality that a registry needs, and thus it is used as a base for most KAIO registries. These then extend the functionality as needed for their specific purpose.

## Data Storage

The base registry inherits the functions and date types from the [Eternal Registry Storage](/how-kaio-works/smart-contracts/registries/eternal-registry-storage), but adds restrictions to who can store data in it. This is checked with the following functions:

* ***\_checkHasAccess()*** : This function checks that the identifier to store data for is valid, and that the caller has the correct role in order to store data for that identifier. Usually the role required is for admins, but extra access can be given to certain users without roles. For example in the investor registry, dealers have this extra access and can thus add data to storage.
* ***\_onlyConfigurableKey()*** : This function checks that the key to store data for is not restricted. Some keys are restricted since they are already being used by the contracts, and should not be modifiable by users, regardless of their role. One such example would be the `FUND_ID` in the instrument registry, since no one should be able to modify its value once it is set by the contract.

## User Registry

An extension of the base registry known as the base user registry (<mark style="color:red;">`BaseUserRegistry.sol`</mark>) is used for registries storing user information, such as for investors or dealers. It includes additional functionality for adding and querying wallets for users, with wallets being associated with their Id.

### Adding Wallet

* **Function**: `addWallet(address _wallet, uint256 _expiry, bytes _signature)`
* **Purpose**: Adds a new wallet to an existing user.
* **Parameters**:
  * `address _wallet`: Address of the wallet.
  * `uint256 _expiry`: Signature expiry timestamp.
  * `bytes _signature`: Signature proving ownership of wallet.
* **Validation Checks**:
  * Checks the signature is not expired.
  * Ensures the signature is signed by the caller.
  * Verifies the signature is meant for the given contract.
  * Confirms the signature is meant for the given chain.
  * Makes sure the caller has a valid user Id.
  * Checks the wallet is not already owned.
* **Behavior**:
  * Adds a new wallet to the caller using their Id.
  * Emits a `WalletAdded` event, signaling the wallet has been added.
* **Example**:

  ```solidity
  addWallet(0xWallet, 1714879500, 0xSignature);
  ```

### Getting Wallets

* **Function**: `getWallets(bytes32 _userId)`
* **Purpose**: Returns the list of wallets for a given user.
* **Parameters**:
  * `bytes32 _userId`: Id of the user.
* **Return Values:**
  * `address[]`: List of the addresses for the user's wallets.
* **Example**:

  ```solidity
  getWallets(0xUserId);
  ```

### Getting Id from Wallet

* **Function**: `getIdFromWallet(address wallet)`
* **Purpose**: Returns the Id to which a given wallets belongs to.
* **Parameters**:
  * `address wallet`: Address of the wallet to check.
* **Return Values:**
  * `bytes32`: Id of the user owning the wallet.
* **Example**:

  ```solidity
  getIdFromWallet(0xWallet);
  ```


# Role Registry

Registry for Roles.

## Overview

The Role Registry is a smart contract used to store and manage roles information. This information can be accessed by other contracts to determine which roles a user might have, and which functions those roles allow them to call. Because of the simplicity of this information, unlike most registries, the Roles Registry doesn't make use of the eternal storage pattern to store information, and doesn't inherit functionality from the Base Registry.

## Structure

The Role Registry makes use of OpenZeppelin's [AccessControl](https://docs.openzeppelin.com/contracts/5.x/access-control) to implement role-based access control. This type of system for management is granular and customizable, allowing for responsibilities to be split and delegated safely. Roles are used to determine which functions a user or contract is allowed to call.

<div data-full-width="true"><figure><img src="/files/GORwJTvI2tKrevEZeXGV" alt=""><figcaption><p><em><strong>Roles Hierarchy</strong></em></p></figcaption></figure></div>

As can be seen in the example above, the roles in the Role Registry behave in a hierarchy. This means that a role can create other sub-roles in order to delegate responsibilities, but those roles may only be granted permissions that the parent role already has. This means that at most, a sub-role will only be able to have the same permissions as it's parent role has.

The hierarchy starts with the `DEFAULT_ADMIN_ROLE`*,* which is given to the address that deploys the Role Registry. This role allows for setting the contract manager role for each of the other contracts, including registries. The contract manager has all permissions over their contract by default, and may then create sub-roles that can only access select functionality.

Some roles are assigned automatically when contracts get deployed, but the majority of roles are unassigned and are left to administer by the KAIO Admin during the initial configuration. This grants vast flexibility in how the access will be managed, even over time.

## Role

Roles are used to easily manage permissions for certain functionality. Groups of permissions are associated to a given role, and thus all users with that role are granted those permissions. Grouping them in a Role makes managing permissions simpler and clearer.

### Creating Role

* **Function**: `createRole(bytes32 _role, bytes32 _subRole)`
* **Purpose**: Creates a new role, setting the existing role used to create it as the role admin.
* **Parameters**:
  * `bytes32 _role`: Existing role used for creation.
  * `bytes32 _subRole`: New role to create.
* **Validation Checks**:
  * Ensures the caller has the existing role used for creation.
  * Makes sure the role does not already exist.
* **Behavior**:
  * Creates the new role.
  * Emits a `RoleCreated` event, signaling the role has been created.
* **Example**:

  ```solidity
  createRole(0xExistingRole, 0xNewRole);
  ```

### Granting Role

* **Function**: `grantRole(bytes32 role, address account)`
* **Purpose**: Grants an existing role to a user.
* **Parameters**:
  * `bytes32 role`: Role to be granted.
  * `address account`: Address of the user to grant the role to.
* **Validation Checks**:
  * Ensures the caller has the admin role for the role to grant.
* **Behavior**:
  * Grants the role to the user.
  * Emits a `RoleGranted` event, signaling the role has been granted.
* **Example**:

  ```solidity
  grantRole(0xRole, 0xUserAddress);
  ```

### Checking Role

* **Function**: `hasRole(bytes32 role, address account)`
* **Purpose**: Checks if a user has a given role.
* **Parameters**:
  * `bytes32 role`: Role to be checked.
  * `address account`: User's address.
* **Return Values:**
  * `bool`: Signals if user has the role.
* **Example**:

  ```solidity
  hasRole(0xRole, 0xUserAddress);
  ```

### Getting Role Admin

* **Function**: `getRoleAdmin(bytes32 role)`
* **Purpose**: Returns the admin role of the given role.
* **Parameters**:
  * `bytes32 role`: Role to be checked.
* **Return Values:**
  * `bytes32`: Admin role of the role.
* **Example**:

  ```solidity
  getRoleAdmin(0xRole);
  ```

### Revoking Role

* **Function**: `revokeRole(bytes32 role, address account)`
* **Purpose**: Revokes a role for a specific user.
* **Parameters**:
  * `bytes32 role`: Role to be revoked.
  * `address account`: Address to revoke the role from.
* **Behavior**:
  * Removes the role from the user.
  * Emits a `RoleRevoked` event, signaling the role has been revoked.
* **Example**:

  ```solidity
  revokeRole(0xRole, 0xUserAddress);
  ```

### Renouncing Role

* **Function**: `renounceRole(bytes32 role, address callerConfirmation)`
* **Purpose**: Revokes a role for the caller.
* **Parameters**:
  * `bytes32 role`: Role to be revoked.
  * `address callerConfirmation`: Address of the caller.
* **Behavior**:
  * Removes the role from the caller.
  * Emits a `RoleRevoked` event, signaling the role has been revoked.
* **Example**:

  ```solidity
  renounceRole(0xRole, 0xCallerAddress);
  ```

## Contract Manager

The contract manager is the role that manages permissions in a contract. This means they are able to grant and revoke access to the functions in that contracts to a role of their choice, while having access to all of them themselves. By default, the contract manager for a contract is the `DEFAULT_ADMIN_ROLE.`

### Setting Manager

* **Function**: `setContractManager(address _contract, bytes32 _roleManager)`
* **Purpose**: Sets the contract manager role for a contract.
* **Parameters**:
  * `address _contract`: Address of the contract.
  * `bytes32 _roleManager`: Role to set as manager.
* **Validation Checks**:
  * Ensures the caller has the `DEFAULT_ADMIN_ROLE`.
* **Behavior**:
  * Sets the contract manager.
  * Emits a `ContractManagerAdded` event, signaling the manager role has been set.
* **Example**:

  ```solidity
  setContractManager(0xLibreContract, 0xRole);
  ```

### Getting Manager

* **Function**: `getContractManager(address _contract)`
* **Purpose**: Returns the contract manager role for a contract.
* **Parameters**:
  * `address _contract`: Address of the contract.
* **Return Values:**
  * `bytes32`: Manager role.
* **Example**:

  ```solidity
  getContractManager(0xLibreContract);
  ```

## Permissions

Permissions refer to the authorization to access certain functions in a given contract. These permissions can be granted and revoked by the role admin of a given role, deciding which functionality the role can access.

### Granting Access

* **Function**: `grantAccess(address _contract, bytes4 _selector, bytes32 _role)`
* **Purpose**: Grants a role access to call a specific function in a given contract.
* **Parameters**:
  * `address _contract`: Address of the contract.
  * `bytes4 _selector`: Selector that indicates the function.
  * `bytes32 _role`: Role to grant access to.
* **Validation Checks**:
  * Ensures the caller has the contract manager role for the contract.
* **Behavior**:
  * Grants the role access to the function.
  * Emits a `AccessGranted` event, signaling the access has been granted.
* **Example**:

  ```solidity
  grantAccess(0xLibreContract, 0xa9059cbb, 0xRole);
  ```

### Checking Access

* **Function**: `hasAccess(address _contract, bytes4 _selector, address _requestor, bytes32 _role)`
* **Purpose**: Checks if a user has a role with permission to call a function in a given contract.
* **Parameters**:
  * `address _contract`: Address of the contract.
  * `bytes4 _selector`: Selector that indicates the function.
  * `address _requestor`: Address of the user.
  * `bytes32 _role`: Role to check access to.
* **Validation Checks**:
  * Ensures the caller has the role they claim.
  * Verifies that the role is able to call the selected function in the contract.
* **Return Values:**
  * `bool`: Returns if the user has access.
* **Example**:

  ```solidity
  hasAccess(0xLibreContract, 0xa9059cbb, 0xUserAddress, 0xRole);
  ```

### Revoking Access

* **Function**: `revokeAccess(address _contract, bytes4 _selector, bytes32 _role)`
* **Purpose**: Revokes access to call a specific function in a given contract for a role.
* **Parameters**:
  * `address _contract`: Address of the contract.
  * `bytes4 _selector`: Selector that indicates the function.
  * `bytes32 _role`: Role to revoke access from.
* **Validation Checks**:
  * Ensures the caller has the contract manager role for the contract.
* **Behavior**:
  * Revokes the role's access to the function.
  * Emits a `RevokedAccess` event, signaling the access has been revoked.
* **Example**:

  ```solidity
  revokeAccess(0xLibreContract, 0xa9059cbb, 0xRole);
  ```

### Resetting Access

* **Function**: resetAccess(address \_contract, bytes4 \_selector)
* **Purpose**: Revokes access to call a specific function in a given contract for all roles except the contract manager.
* **Parameters**:
  * `address _contract`: Address of the contract.
  * `bytes4 _selector`: Selector that indicates the function.
* **Validation Checks**:
  * Ensures the caller has the contract manager role for the contract.
* **Behavior**:
  * Revokes access to the function for all roles.
  * Emits a `ResetedAccess` event, signaling the access has been reset for all roles.
* **Example**:

  ```solidity
  resetAccess(0xLibreContract, 0xa9059cbb);
  ```


# Jurisdiction Registry

Registry for Jurisdictions.

## Overview

The Jurisdiction Registry (<mark style="color:red;">`JurisdictionRegistry.sol`</mark>) is used to store and retrieve information on jurisdictions and the legal requirements they have. It is mainly used to store special values or limits associated with specific jurisdictions, and does not contain additional logic. Like most registries, it makes use of the eternal storage pattern to store information, inheriting the base registry. In this case the Jurisdiction Registry uses the jurisdiction Id to store the data related to that jurisdiction.

## Functionality

The Jurisdiction Registry is usually managed by the KAIO Admin, who has the responsibility of keeping information up to date. Like mentioned previously, this registry is pretty basic, and includes no additional functionality than what is included in the [Base Registry](/how-kaio-works/smart-contracts/registries/base-registry).

Like mentioned previously, the jurisdiction information is indexed by an Id, which is the *keccak256* hash of the Jurisdiction name in the following manner:

```solidity
keccak256(abi.encode(LUXEMBOURG));
```


# Investor Registry

Registry for Investors.

## Overview

The Investor Registry (<mark style="color:red;">`InvestorRegistry.sol`</mark>) is used to store and retrieve information on investors. It is also extended to include functionality like checking if investors are allowed using the rules engine. Like most registries, it makes use of the eternal storage pattern to store information, and since it is a user registry, inherits the base user registry. In this case the Investor Registry uses the investor's Ids to store their associated data.

## Investor

Investors are the end users of KAIO. They have an associated dealer, and a wallet address. Additional wallet addresses can be added afterwards.

### Creating Investor

* **Function**: `addInvestor(bytes32 _senderRole, bytes32 _investorId, address _wallet, bytes32 _dealerId)`
* **Purpose**: Creates a new Investor in the KAIO system.
* **Parameters**:
  * `bytes32 _senderRole`: Role of the sender.
  * `bytes32 _investorId`: Id of the investor to create.
  * `address _wallet`: Wallet associated to be associated with investor.
  * `bytes32 _dealerId`: Id of the dealer the investor will be assigned to.
* **Validation Checks**:
  * Checks the investor Id is not 0.
  * Ensures the caller has the proper role.
  * Makes sure the investor does not already exist.
  * Checks the caller is the investor's dealer (only if the caller is a dealer).
* **Behavior**:
  * Creates the new investor, with the associated wallet and dealer.
  * Emits a `NewInvestorAdded` event, signaling the investor has been added.
* **Example**:

  ```solidity
  addInvestor(0xDealerRole, 0xInvestorId, 0xInvestorAddress, 0xDealerId);
  ```

### Getting Investor's Dealer

* **Function**: `getDealer(bytes32 _investorId)`
* **Purpose**: Returns the dealer an investor is assigned to.
* **Parameters**:
  * `bytes32 _investorId`: Id of the investor.
* **Return Values:**
  * `bytes32`: Id of the dealer.
* **Example**:

  ```solidity
  getDealer(0xInvestorId);
  ```

## Allowlist

Allowlist functions enable checking investor's for access to specific operations, dependent on static and dynamic conditions, making use of the rule engines. Static checks are cached for efficiency when possible (if no data was updated).

### Restrict/Un-Restrict Investor

* **Function**: `setInvestorRestriction(bytes32 _senderRole, bytes32 _investorId, bytes32 _instrumentId, bool _restrict)`
* **Purpose**: Updates the investor's restriction for a given instrument. Investors can't access instruments they have been manually restricted from.
* **Parameters**:
  * `bytes32 _senderRole`: Role of the sender.
  * `bytes32 _investorId`: Id of the investor to restrict.
  * `bytes32 _instrumentId`: Id of the instrument to restrict the investor from.
  * `bool _restrict`: Indicates if the investor restriction should be applied or lifted.
* **Validation Checks**:
  * Checks the caller has access to call the function.
* **Behavior**:
  * Restricts or un-resctricts the investor.
  * Emits a `InvestorRestrictionUpdated` event, signaling the investor restriction has changed.
* **Example**:

  ```solidity
  setInvestorRestriction(0xRole, 0xInvestorId, 0xInstrumentId, true);
  ```

### Check Restriction

* **Function**: `isInvestorRestricted(bytes32 _investorId, bytes32 _instrumentId)`
* **Purpose**: Returns if an investor is restricted from a given instrument.
* **Parameters**:
  * `bytes32 _investorId`: Id of the investor.
  * `bytes32 _instrumentId`: Id of the instrument.
* **Return Values:**
  * `bool`: Indicates if the investor is restricted from the instrument.
* **Example**:

  ```solidity
  isInvestorRestricted(0xInvestorId, 0xInstrumentId);
  ```

### Checking for Allowed Investor

* **Function**: `checkInvestorAllowed(bytes32 _investorId, bytes32 _instrumentId)`
* **Purpose**: Checks if an investor is allowed to interact with a given instrument.
* **Parameters**:
  * `bytes32 _investorId`: Id of the investor.
  * `bytes32 _instrumentId`: Id of the instrument.
* **Validation Checks**:
  * Makes sure the investor's dealer is allowed in the instrument.
  * Ensures the investor is not restricted from the instrument.
  * Checks universal/KAIO restrictions in the dealer rules engine.
  * Checks instrument restrictions in the instrument's rule engine.
  * Checks dealer restrictions in the dealer rules engine.
* **Behavior**:
  * Reverts if investor is not allowed in the instrument.
* **Example**:

  ```solidity
  checkInvestorAllowed(0xInvestorId, 0xInstrumentId);
  ```

### Checking for Allowed Investor (Funds)

* **Function**: `checkInvestorAllowedFunds(bytes32 _investorId, bytes32 _instrumentId, uint256 _amount)`
* **Purpose**: Checks if an investor is allowed to interact with a given instrument with certain amount of settlement tokens.
* **Parameters**:
  * `bytes32 _investorId`: Id of the investor.
  * `bytes32 _instrumentId`: Id of the instrument.
  * `uint256 _amount`: Amount of settlement tokens used.
* **Validation Checks**:
  * Makes sure the investor's dealer is allowed in the instrument.
  * Ensures the investor is not restricted from the instrument.
  * Checks universal/KAIO restrictions in the dealer rules engine.
  * Checks instrument restrictions in the instrument's rule engine.
  * Checks dealer restrictions in the dealer rules engine.
  * Checks universal/KAIO restrictions for settlement tokens in the dealer rules engine.
  * Checks instrument restrictions for settlement tokens in the instrument's rule engine.
  * Checks dealer restrictions for settlement tokens in the dealer rules engine.
* **Behavior**:
  * Reverts if investor is not allowed in the instrument.
* **Example**:

  ```solidity
  checkInvestorAllowedFunds(0xInvestorId, 0xInstrumentId, 117);
  ```

### Checking for Allowed Investor (Tokens)

* **Function**: `checkInvestorAllowedTokens(bytes32 _investorId, bytes32 _instrumentId, uint256 _amount)`
* **Purpose**: Checks if an investor is allowed to interact with a given instrument with certain amount of security tokens.
* **Parameters**:
  * `bytes32 _investorId`: Id of the investor.
  * `bytes32 _instrumentId`: Id of the instrument.
  * `uint256 _amount`: Amount of security tokens used.
* **Validation Checks**:
  * Makes sure the investor's dealer is allowed in the instrument.
  * Ensures the investor is not restricted from the instrument.
  * Checks universal/KAIO restrictions in the dealer rules engine.
  * Checks instrument restrictions in the instrument's rule engine.
  * Checks dealer restrictions in the dealer rules engine.
  * Checks universal/KAIO restrictions for security tokens in the dealer rules engine.
  * Checks instrument restrictions for security tokens in the instrument's rule engine.
  * Checks dealer restrictions for security tokens in the dealer rules engine.
* **Behavior**:
  * Reverts if investor is not allowed in the instrument.
* **Example**:

  ```solidity
  checkInvestorAllowedTokens(0xInvestorId, 0xInstrumentId, 3608);
  ```

## Status

Information on the status of the investor is kept for purposes such as the allowlist cache or meeting restrictions in the rule engines. This status information can include data on the latest operations, or the latest investor updates.

### Updating Last Operation Timestamp

* **Function**: `updateInvestorLastOperationTimestamp(bytes32 _investorId, bytes32 _instrumentId, uint256 _lastTimestamp)`
* **Purpose**: Register the timestamp of the last operation done by an investor in a given instrument.
* **Parameters**:
  * `bytes32 _investorId`: Id of the investor.
  * `bytes32 _instrumentId`: Id of the instrument.
  * `uint256 _lastTimestamp`: Timestamp to register.
* **Validation Checks**:
  * Ensures the caller is the instrument in question (subscription book, redemption book, or security token contract).
* **Behavior**:
  * Registers the timestamp as the last operation done by the investor.
* **Example**:

  ```solidity
  updateInvestorLastOperationTimestamp(0xInvestorId, 0xInstrumentId, 1715000000);
  ```

### Getting Last Operation Timestamp

* **Function**: `getInvestorLastOperationTimestamp(bytes32 _investorId, bytes32 _instrumentId)`
* **Purpose**: Returns timestamp of the last operation done by the investor in the given instrument.
* **Parameters**:
  * `bytes32 _investorId`: Id of the investor.
  * `bytes32 _instrumentId`: Id of the instrument.
* **Return Values:**
  * `uint256`: Timestamp signaling last interaction.
* **Example**:

  ```solidity
  getInvestorLastOperationTimestamp(0xInvestorId, 0xInstrumentId);
  ```

### Reset Checked (Dealer Rules)

* **Function**: `resetCheckedSinceDealerRulesUpdate(bytes32 _dealerId)`
* **Purpose**: Resets the cached allowed status for investors when their dealer rules are updated.
* **Parameters**:
  * `bytes32 _dealerId`: Id of the dealer.
* **Validation Checks**:
  * Ensures the caller is the dealer rules engine.
* **Behavior**:
  * Registers there's been an update in the dealer's rules.
  * Emits a `ResetCheckedSinceDealerRulesUpdate` event, signaling dealer rules have been updated.
* **Example**:

  ```solidity
  resetCheckedSinceDealerRulesUpdate(0xDealerId);
  ```

### Reset Checked (Instrument Rules)

* **Function**: `resetCheckedSinceInstrumentRulesUpdate(bytes32 _instrumentId)`
* **Purpose**: Resets the cached allowed status for investors when the instrument rules are updated.
* **Parameters**:
  * `bytes32 _instrumentId`: Id of the instrument.
* **Validation Checks**:
  * Ensures the caller is the instrument's rules engine.
* **Behavior**:
  * Registers there's been an update in the instrument's rules.
  * Emits a `ResetCheckedSinceInstrumentRulesUpdate` event, signaling instrument rules have been updated.
* **Example**:

  ```solidity
  resetCheckedSinceInstrumentRulesUpdate(0xInstrumentId);
  ```

### Reset Checked (Jurisdiction)

* **Function**: `resetCheckedSinceJurisdictionUpdate()`
* **Purpose**: Resets the cached allowed status for investors when jurisdiction data is updated.
* **Validation Checks**:
  * Ensures the caller is jurisdiction registry.
* **Behavior**:
  * Registers there's been an update in jurisdiction data.
  * Emits a `ResetCheckedSinceJurisdictionUpdate` event, signaling jurisdiction data has been updated.
* **Example**:

  ```solidity
  resetCheckedSinceJurisdictionUpdate();
  ```


# Dealer Registry

Registry for Dealers.

## Overview

The Dealer Registry (<mark style="color:red;">`DealerRegistry.sol`</mark>) is used to store dealer information. It's also extended to include some basic functionality, like creating dealers and adding them to instruments. Like most registries, it makes use of the eternal storage pattern to store information, and since it is a user registry, inherits the base user registry. In this case the Dealer Registry uses the dealer's Ids to store their associated data.

## Dealer

Dealers have the main purpose of managing investors, granting them access to instruments, and keeping their information up to date. They can be onboarded by registering them in the KAIO system.

### Dealer Creation

* **Function**: `addDealer(bytes32 _senderRole, bytes32 _dealerId, address _wallet)`
* **Purpose**: Creates a new Dealer in the KAIO system.
* **Parameters**:
  * `bytes32 _senderRole`: Role of the sender.
  * `bytes32 _dealerId`: Id of the dealer to create.
  * `address _wallet`: Wallet associated to be associated with the dealer.
* **Validation Checks**:
  * Checks the dealer Id is not 0.
  * Ensures the caller has the proper role.
  * Makes sure the dealer does not already exist.
* **Behavior**:
  * Creates the new dealer, with the associated wallet.
  * Emits a `NewDealerAdded` event, signaling the dealer has been created.
* **Example**:

  ```solidity
  addDealer(0xAdminRole, 0xDealerId, 0xDealerAddress);
  ```

## Instrument Access

Fund admins have the ability to decide which dealers can access their instrument. When a dealer is allowed into an instrument, it also allows all the dealer's investors in the instrument, with the condition they pass all required rules for it.

### Allowing Dealer

* **Function**: `allowDealer(bytes32 _senderRole, bytes32 _dealerId, bytes32 _instrumentId, bool _allowed)`
* **Purpose**: Allows or un-allows the dealer from accessing an instrument.
* **Parameters**:
  * `bytes32 _senderRole`: Role of the sender.
  * `bytes32 _dealerId`: Id of the dealer.
  * `bytes32 _instrumentId`: Id of instrument.
  * `bool _allowed`: Indicates if the dealer should be allowed or not.
* **Validation Checks**:
  * Ensures the caller has the proper role.
* **Behavior**:
  * Allows or un-allows the dealer for the instrument.
  * Emits a `dealerAllowedUpdated` event, signaling access to the instrument for the dealer has changed.
* **Example**:

  ```solidity
  allowDealer(0xAdminRole, 0xDealerId, 0xInstrumentId, true);
  ```

### Allowing Dealer (Batch)

* **Function**: `allowDealerBatch( bytes32 _senderRole, bytes32[] _dealerIds, bytes32[] _instrumentIds, bool[] _allowed )`
* **Purpose**: Batch function for allowing or un-allowing dealers to access instruments. Can be used with one dealer for multiple instruments, with multiple dealers for a single instrument, or with multiple dealers for multiple instruments.
* **Parameters**:
  * `bytes32 _senderRole`: Role of the sender.
  * `bytes32[] _dealerIds`: Ids of the dealers.
  * `bytes32[] _instrumentIds`: Ids of instruments.
  * `bool[] _allowed`: Indicates if the dealers should be allowed or not.
* **Validation Checks**:
  * Ensures the caller has the proper role.
  * Verifies the arrays all have the same length.
* **Behavior**:
  * Allows or un-allows the dealers for the instruments.
  * Emits `dealerAllowedUpdated` events, signaling access to the instruments for the dealers has changed.
* **Example**:

  ```solidity
  allowDealerBatch(0xAdminRole, [0xDealer1Id, 0xDealer1Id, 0xDealer2Id], [0xInstrument1Id, 0xInstrument2Id, 0xInstrument1Id], [true, true, true]);
  ```

### Getting Dealer Access

* **Function**: `isDealerAllowed(bytes32 _dealerId, bytes32 _instrumentId)`
* **Purpose**: Returns if a dealer is allowed access into an instrument.
* **Parameters**:
  * `bytes32 _dealerId`: Id of the dealer.
  * `bytes32 _instrumentId`: Id of the instrument.
* **Return Values:**
  * `bool`: Signals if the dealer is allowed.
* **Example**:

  ```solidity
  isDealerAllowed(0xDealerId, 0xInstrumentId);
  ```


# Fund Registry

Registry for Funds.

## Overview <a href="#overview" id="overview"></a>

The Fund Registry (<mark style="color:red;">`FundRegistry.sol`</mark>) is used to store fund information. It also allows for creating new funds. Like most registries, it makes use of the eternal storage pattern to store information, inheriting the base registry. The Fund Registry uses fund Ids to store their associated data.

## Fund

Funds are managed by a fund admin, and have an associated group of instruments that belong to them. Funds are created in the KAIO system by the KAIO Admin.

### Fund Creation

* **Function**: `addNewFund(bytes32 _senderRole, bytes32 _fundId)`
* **Purpose**: Creates a new Fund in the KAIO system.
* **Parameters**:
  * `bytes32 _senderRole`: Role of the sender.
  * `bytes32 _fundId`: Id of the fund to create.
* **Validation Checks**:
  * Checks the fund Id is not 0.
  * Ensures the caller has the proper role.
  * Makes sure the fund does not already exist.
* **Behavior**:
  * Creates the new fund.
  * Emits a `NewFundAdded` event, signaling the fund has been added.
* **Example**:

  ```solidity
  addNewFund(0xAdminRole, 0xFundId);
  ```


# Instrument Registry

Registry for Instruments.

## Overview <a href="#overview" id="overview"></a>

The Instrument Registry (<mark style="color:red;">`InstrumentRegistry.sol`</mark>) is used to store information about instruments. In addition to the logic for creating and initializing instruments, it also contains functions to aid with the instrument lifecycle. Like most registries, it makes use of the eternal storage pattern to store information, inheriting the base registry. The Instrument Registry uses instrument Ids to store their corresponding data.

## Instrument

Instruments contain all the logic for the tokenization engine. Their data is managed at a high level by the instrument registry, which also contains the logic for creating and initializing them.

### Instrument Creation

* **Function**: `addInstrument(bytes32 _senderRole, bytes32 _instrumentId, bytes32 _fundId)`
* **Purpose**: Creates a new Instrument in the KAIO system, seting all the required values.
* **Parameters**:
  * `bytes32 _senderRole`: Role of the caller.
  * `bytes32 _instrumentId`: Id of the instrument to create.
  * `bytes32 _fundId`: Id of the fund the instrument will belong to.
* **Validation Checks**:
  * Checks the fund Id is not 0.
  * Ensures the caller is the corresponding fund admin or otherwise has a valid role.
  * Makes sure the instrument does not already exist.
* **Behavior**:
  * Creates the new instrument in the system.
  * Emits a `NewInstrumentAdded` event, signaling the instrument has been created.
* **Example**:

  ```solidity
  addInstrument(0xFundAdminRole, 0xInstrumentId, 0xFundId);
  ```

### Instrument Initialization

* **Function**: `initializeInstrument( bytes32 _senderRole, bytes32 _instrumentId, address _paymentToken, address _rulesEngineImpl, string _name, string _symbol, address _subscriptionBookImp, address _redemptionBookImp, address _stTokenImpl, address _treasury )`
* **Purpose**: Initializes a newly created instrument, to get it ready for operation. This includes deploying necessary contract and setting configuration values.
* **Parameters**:
  * `bytes32 _senderRole`: Role of the caller.
  * `bytes32 _instrumentId`: Id of the instrument.
  * `address _paymentToken`: Address of the settlement token to be used for payments.
  * `address _rulesEngineImpl`: Address of the rules engine to clone as a base for the instrument's rules engine.
  * `string _name`: Name given to the instrument's security token.
  * `string _symbol`: Symbol given to the instrument's security token.
  * `address _subscriptionBookImp`: Address of the subscription book to clone as a base for the instrument's subscription book.
  * `address _redemptionBookImp`: Address of the redemption book to clone as a base for the instrument's redemption book.
  * `address _stTokenImpl`: Address of the security token to clone as a base for the instrument's security token.
  * `address _treasury`: Address of the treasury where collected fees will be sent.
* **Validation Checks**:
  * Ensures the caller is the corresponding fund admin or otherwise has a valid role.
  * Makes sure the instrument is not already initialized.
* **Behavior**:
  * Sets reserved keys for the instrument in the eternal registry.
  * Creates and initializes the instrument's rules engine.
  * Creates and initializes the instrument's subscription book.
  * Creates and initializes the instrument's redemption book.
  * Creates and initializes the instrument's security token.
  * Grants settlement token burner and minter roles to the subscription and redemption books respectively.
  * Emits a `InstrumentInitialized` event, signaling the instrument has been initialized.
* **Example**:

  ```solidity
  initializeInstrument(0xFundAdminRole, 0xInstrumentId, 0xSettlementToken, 0xRulesEngineImp, "Tokenized Fund 1", "TF1", 0xSubscriptionBookImp, 0xRedemptionBookIpm, 0xSecurityTokenImp, 0xTreasury);
  ```

## Access

Some instruments are configured to require investors to be explicitly allowed in order to use them, instead of only requiring their dealer to have access.

### Investor Access

* **Function**: `allowInvestor(bytes32 _instrumentId, bytes32 _investorId, bool _allowed, bytes32 _senderRole)`
* **Purpose**: Manually allows or un-allows an investor into an instrument.
* **Parameters**:
  * `bytes32 _instrumentId`: Id of the instrument.
  * `bytes32 _investorId`: Id of the investor.
  * `bool _allowed`: Signals if the investor should be allowed or un-allowed.
  * `bytes32 _senderRole`: Role of the caller.
* **Validation Checks**:
  * Ensures the caller is the corresponding fund admin or otherwise has a valid role.
* **Behavior**:
  * Allows or un-allows investor from the instrument.
  * Emits a `investorAllowedUpdated` event, signaling the investor access to the instrument has changed.
* **Example**:

  ```solidity
  allowInvestor(0xInstrumentId, 0xInvestorId, true, 0xFundAdminRole);
  ```

## Lifecycle

The lifecycle of an instrument includes regular updates such as Net Asset Value (NAV) updates, which are done through the instrument registry. In addition some functions are available to read information related to the current state of the instrument.

### NAV Update (Unaudited)

* **Function**: `updateUnauditedNavPerShare(bytes32 _senderRole, bytes32 _instrumentId, uint256 _newNavPerShare)`
* **Purpose**: Updates the value of the NAV of the instrument (unaudited, per share).
* **Parameters**:
  * `bytes32 _senderRole`: Role of the caller.
  * `bytes32 _instrumentId`: Id of the instrument.
  * `uint256 _newNavPerShare`: New value of the NAV price.
* **Validation Checks**:
  * Ensures the caller is the corresponding fund admin or otherwise has a valid role.
* **Behavior**:
  * Updates the unaudited NAV.
  * Stores new NAV data for lookback purposes.
  * Checks and sets the `GLOBAL_AGGREGATE_MINIMUM_BREACH` according to the new NAV.
* **Example**:

  ```solidity
  updateUnauditedNavPerShare(0xFundAdminRole, 0xInstrumentId, 46200);
  ```

### NAV Update (Audited)

* **Function**: `updateAuditedNavPerShare(bytes32 _senderRole, bytes32 _instrumentId, uint256 _newNavPerShare)`
* **Purpose**: Updates the value of the NAV of the instrument (audited, per share).
* **Parameters**:
  * `bytes32 _senderRole`: Role of the caller.
  * `bytes32 _instrumentId`: Id of the instrument.
  * `uint256 _newNavPerShare`: New value of the NAV price.
* **Validation Checks**:
  * Ensures the caller is the corresponding fund admin or otherwise has a valid role.
* **Behavior**:
  * Updates the audited NAV.
  * Checks and sets the `GLOBAL_AGGREGATE_MINIMUM_BREACH` according to the new NAV.
* **Example**:

  ```solidity
  updateAuditedNavPerShare(0xFundAdminRole, 0xInstrumentId, 38100);
  ```

### Getting NAV Lookback (Unaudited)

* **Function**: `getNavLookback(bytes32 _instrumentId, uint256 _timestamp)`
* **Purpose**: Returns the maximum unaudited NAV value stored in the lookback from the provided date to the present.
* **Parameters**:
  * `bytes32 _instrumentId`: Id of the instrument.
  * `uint256 _timestamp`: Timestamp indicating the date to perform the lookback to.
* **Return Values:**
  * `uint256`: Indicates the highest unaudited NAV value stored after the provided timestamp.
* **Example**:

  ```solidity
  getNavLookback(0xInstrumentId, 1714880880);
  ```

### Getting Subscription Period

* **Function**: `currentSubscriptionPeriod(bytes32 _instrumentId)`
* **Purpose**: Returns the current subscription period number, along with the start and end timestamps. Can return 0 when the first subscription period has not started, or *type(uint256).max* if the last period has ended.
* **Parameters**:
  * `bytes32 _instrumentId`: Id of the instrument.
* **Return Values:**
  * `uint256`: Current subscription period number.
  * `uint256`: Timestamp indicating the start of the current subscription period.
  * `uint256`: Timestamp indicating the end of the current subscription period.
* **Example**:

  ```solidity
  currentSubscriptionPeriod(0xInstrumentId);
  ```

### Getting Redemption Period

* **Function**: `currentRedemptionPeriod(bytes32 _instrumentId)`
* **Purpose**: Returns the current redemption period number, along with the start and end timestamps. Can return 0 when the first redemption period has not started, or *type(uint256).max* if the last period has ended.
* **Parameters**:
  * `bytes32 _instrumentId`: Id of the instrument.
* **Return Values:**
  * `uint256`: Current redemption period number.
  * `uint256`: Timestamp indicating the start of the current redemption period.
  * `uint256`: Timestamp indicating the end of the current redemption period.
* **Example**:

  ```solidity
  currentRedemptionPeriod(0xInstrumentId);
  ```


# Rules

{% content-ref url="/pages/IBPwt9mZUFC87MtDE7DT" %}
[Rule Engines](/how-kaio-works/smart-contracts/rules/rule-engines)
{% endcontent-ref %}

{% content-ref url="/pages/CnCzs9ySl8XVtOONxwEW" %}
[Rule Modules](/how-kaio-works/smart-contracts/rules/rule-modules)
{% endcontent-ref %}


# Rule Engines

Engines managing rules modules.

## Overview

Rule engines are contracts that allow for other contracts to easily check the rules and restrictions of different modules for a given operation, such as when creating orders or settling them. The result of not adhering to these restrictions can lead to reductions in transaction amounts, or even a complete transaction revert. It is up to the contract calling the module to determine the resulting behavior after passing or failing a rule. Any module can be developed externally and added to a rules engine as long as it follows the interfaces for the operations it wants to add restrictions to. Modules can also be paused or removed from the engine. Existing modules can be found in [Rule Modules](/how-kaio-works/smart-contracts/rules/rule-modules).

## Rules Engine

Each instrument has it's own rules engine smart contract that is deployed on instrument creation, more particularly <mark style="color:red;">`RulesEngine.sol`</mark>. This engine is used for applying rules when investors interact with the instrument. The Fund Admin managing the instrument is also the user managing this contract, and deciding which modules to register.

### Module Operations

These functions are used for managing modules in the engine.

#### Register Module

* **Function**: `registerModule(address _module, bytes32 _role)`
* **Purpose**: Registers a new module in the rules engine by cloning an existing one.
* **Parameters**:
  * `address _module`: Address of the deployed module to clone.
  * `bytes32 _role`: Role of the caller.
* **Validation Checks**:
  * Checks that the caller has the correct role for a Fund Admin.
* **Behavior**:
  * Initializes and registers the new module.
  * Store the operations the module supports.
  * Emits a `ModuleRegistered` event, signaling the module has been registered.
* **Return Values:**
  * `address`: Address of the new cloned module.
* **Example**:

  ```solidity
  registerModule(0xDeployedModule, 0xFundAdminRole);
  ```

#### Get Module Clone

* **Function**: `getCloneAddress(address _module, uint256 _registrationTimestamp)`
* **Purpose**: Returns the address of a cloned module by providing the original and the time it was cloned.
* **Parameters**:
  * `address _module`: Address of the deployed module that was used as a base.
  * `uint256 _registrationTimestamp`: Timestamp indicating when the module was cloned.
* **Return Values:**
  * `address`: Address of the cloned module.
* **Example**:

  ```solidity
  getCloneAddress(0xDeployedModule, 1714557340);
  ```

#### Edit Module

* **Function**: `editModuleClone(address _moduleClone, bool _status, bytes32 _role)`
* **Purpose**: Enables or disables an existing registered module.
* **Parameters**:
  * `address _moduleClone`: Address of the cloned module.
  * `bool _status`: Status indicating if the module should be enabled or disabled.
  * `bytes32 _role`: Role of the caller.
* **Validation Checks**:
  * Checks that the caller has the correct role for a Fund Admin.
* **Behavior**:
  * Enables or disables the module.
  * Emits a `ModuleUpdated` event, signaling the module has been updated.
* **Example**:

  ```solidity
  editModuleClone(0xClonedModule, true, 0xFundAdminRole);
  ```

#### Delete Module

* **Function**: `deleteModuleClone(address _moduleClone, bytes32 _role)`
* **Purpose**: Removes a module from the rules engine.
* **Parameters**:
  * `address _moduleClone`: Address of the cloned module.
  * `bytes32 _role`: Role of the caller.
* **Validation Checks**:
  * Checks that the caller has the correct role for a Fund Admin.
* **Behavior**:
  * Removes stored module operations.
  * Removes module from engine.
  * Emits a `ModuleDeleted` event, signaling the module has been deleted.
* **Example**:

  ```solidity
  deleteModuleClone(0xClonedModule, 0xFundAdminRole);
  ```

### Rule Checking

This rules engine checks the operations described below, using the associated function to call the corresponding rule module. The module can return true/false if they are of bool type, or instead return a transaction amount if they are a numeric type. If the module is not present or disabled, it has no effect.

<table data-full-width="true"><thead><tr><th width="393">Operation</th><th width="440">Function</th><th>Return</th></tr></thead><tbody><tr><td><code>ADVISED_CREATE_BID</code></td><td><em>checkAdvisedCreateBid()</em></td><td>Bool</td></tr><tr><td><code>ADVISED_CREATE_REDEMPTION</code></td><td><em>checkAdvisedCreateRedemption()</em></td><td>Bool</td></tr><tr><td><code>ADVISED_BID_CONFIRMATION</code></td><td><em>checkAdvisedBidConfirmation()</em></td><td>Bool</td></tr><tr><td><code>ADVISED_BID_LOCK</code></td><td><em>checkAdvisedLockBid()</em></td><td>Bool</td></tr><tr><td><code>ADVISED_REDEMPTION_LOCK</code></td><td><em>checkAdvisedLockRedemption()</em></td><td>Bool</td></tr><tr><td><code>BID_CONFIRMATION</code></td><td><em>checkBidConfirmation()</em></td><td>Bool</td></tr><tr><td><code>REDEMPTION_CONFIRMATION</code></td><td><em>checkRedemptionConfirmation()</em></td><td>Bool</td></tr><tr><td><code>ADVISED_REDEMPTION_CONFIRMATION</code></td><td><em>checkAdvisedRedemptionConfirmation()</em></td><td>Bool</td></tr><tr><td><code>CREATE_BID</code></td><td><em>checkCreateBid()</em></td><td>Bool</td></tr><tr><td><code>CREATE_REDEMPTION</code></td><td><em>checkCreateRedemption()</em></td><td>Bool</td></tr><tr><td><code>BID_LOCK</code></td><td><em>checkLockBid()</em></td><td>Bool</td></tr><tr><td><code>REDEMPTION_LOCK</code></td><td><em>checkLockRedemption()</em></td><td>Bool</td></tr><tr><td><code>FORCED_REDEMPTION</code></td><td><em>checkForcedRedemption()</em></td><td>Bool</td></tr><tr><td><code>FORCED_TRANSFER</code></td><td><em>checkForcedTransfer()</em></td><td>Bool</td></tr><tr><td><code>RECEIVE</code></td><td><em>checkReceiver()</em></td><td>Bool</td></tr><tr><td><code>SEND</code></td><td><em>checkSender()</em></td><td>Bool</td></tr><tr><td><code>SETTLE_BIDS</code></td><td><em>checkSettleBids()</em></td><td>Numeric</td></tr><tr><td><code>SETTLE_REDEMPTIONS</code></td><td><em>checkSettleRedemptions()</em></td><td>Numeric</td></tr><tr><td><code>FILL</code></td><td><em>checkFill()</em></td><td>Bool</td></tr><tr><td><code>ORDER</code></td><td><em>checkOrder()</em></td><td>Bool</td></tr><tr><td><code>TRADE</code></td><td><em>checkTrade()</em></td><td>Bool</td></tr><tr><td><code>TRANSFER</code></td><td><em>checkTransfer()</em></td><td>Bool</td></tr><tr><td><code>ADVISED_BID_CANCELLATION</code></td><td><em>checkAdvisedBidCancellation()</em></td><td>Bool</td></tr><tr><td><code>ADVISED_REDEMPTION_CANCELLATION</code></td><td><em>checkAdvisedRedemptionCancellation()</em></td><td>Bool</td></tr><tr><td><code>STATIC_FLAG_CHECK</code></td><td><em>checkStaticFlags()</em></td><td>Bool</td></tr><tr><td><code>DYNAMIC_FLAG_CHECK</code></td><td><em>checkDynamicFlags()</em></td><td>Bool</td></tr><tr><td><code>DYNAMIC_FLAG_CHECK_FUNDS</code></td><td><em>checkDynamicFlagsFunds()</em></td><td>Bool</td></tr><tr><td><code>DYNAMIC_FLAG_CHECK_TOKENS</code></td><td><em>checkDynamicFlagsTokens()</em></td><td>Bool</td></tr></tbody></table>

## Dealer Rules Engine

The dealer rules engine (<mark style="color:red;">`DealerRulesEngine.sol`</mark>) is a single contract used when a dealer's investors interact with KAIO. It checks rule modules registered and managed by each dealer separately for their investors. The engine can also check modules that are universal, i.e., applying to all investors regardless of their dealer.

### Module Operations

These functions are used for managing modules in the engine.

#### Register Module

* **Function**: `registerModule(address _module)`
* **Purpose**: Registers a new module in the dealer rules engine for the dealer calling the function by cloning an existing one.
* **Parameters**:
  * `address _module`: Address of the deployed module to clone.
* **Behavior**:
  * Initializes and registers the new module for the calling Dealer.
  * Store the operations the module supports.
  * Emits a `ModuleRegistered` event, signaling the module has been registered.
* **Return Values:**
  * `address`: Address of the new cloned module.
* **Example**:

  ```solidity
  registerModule(0xDeployedModule);
  ```

#### Register Universal Module

* **Function**: `registerLibreModule(address _module, bytes32 _role)`
* **Purpose**: Registers a new universal module in the rules engine by cloning an existing one.
* **Parameters**:
  * `address _module`: Address of the deployed module to clone.
  * `bytes32 _role`: Role of the caller.
* **Validation Checks**:
  * Checks that the caller has the correct role for the KAIO Admin.
* **Behavior**:
  * Initializes and registers the new universal module.
  * Store the operations the module supports.
  * Emits a `ModuleRegistered` event, signaling the module has been registered.
* **Return Values:**
  * `address`: Address of the new cloned module.
* **Example**:

  ```solidity
  registerLibreModule(0xDeployedModule, 0xLibreAdminRole);
  ```

#### Edit Module

* **Function**: `editModuleClone(address _module, bool _status)`
* **Purpose**: Enables or disables an existing registered module for the calling dealer.
* **Parameters**:
  * `address _moduleClone`: Address of the cloned module.
  * `bool _status`: Status indicating if the module should be enabled or disabled.
* **Validation Checks**:
  * Checks that the caller is the same dealer that registered the module.
* **Behavior**:
  * Enables or disables the module.
  * Emits a `ModuleUpdated` event, signaling the module has been updated.
* **Example**:

  ```solidity
  editModuleClone(0xClonedModule, true);
  ```

#### Edit Universal Module

* **Function**: `editLibreModuleClone(address _module, bool _status, bytes32 _role)`
* **Purpose**: Enables or disables an existing registered universal module.
* **Parameters**:
  * `address _moduleClone`: Address of the cloned module.
  * `bool _status`: Status indicating if the module should be enabled or disabled.
  * `bytes32 _role`: Role of the caller.
* **Validation Checks**:
  * Checks that the caller has the correct role for the KAIO Admin.
* **Behavior**:
  * Enables or disables the module.
  * Emits a `ModuleUpdated` event, signaling the module has been updated.
* **Example**:

  ```solidity
  editModuleClone(0xClonedModule, true, 0xLibreAdminRole);
  ```

#### Delete Module

* **Function**: `deleteModuleClone(address _moduleClone)`
* **Purpose**: Removes a module from the rules engine for the calling dealer.
* **Parameters**:
  * `address _moduleClone`: Address of the cloned module.
* **Validation Checks**:
  * Checks that the caller is the same dealer that registered the module.
* **Behavior**:
  * Removes stored module operations.
  * Removes module from engine.
  * Emits a `ModuleDeleted` event, signaling the module has been deleted.
* **Example**:

  ```solidity
  deleteModuleClone(0xClonedModule);
  ```

#### Delete Universal Module

* **Function**: `deleteLibreModuleClone(address _moduleClone, bytes32 _role)`
* **Purpose**: Removes a universal module from the rules engine.
* **Parameters**:
  * `address _moduleClone`: Address of the cloned module.
  * `bytes32 _role`: Role of the caller.
* **Validation Checks**:
  * Checks that the caller has the correct role for the KAIO Admin.
* **Behavior**:
  * Removes stored module operations.
  * Removes module from engine.
  * Emits a `ModuleDeleted` event, signaling the module has been deleted.
* **Example**:

  ```solidity
  deleteLibreModuleClone(0xClonedModule, 0xLibreAdminRole);
  ```

### Rule Checking

The dealer rules engine checks the operations described below, using the associated function to call the corresponding rule module. The module can return true/false if they are of bool type, or instead return a transaction amount if they are a numeric type. If the module is not present or disabled, it has no effect. Some operations trigger modules set by the KAIO admin applicable to all investors, while others trigger dealer modules only applicable to the dealer's investors.

<table data-full-width="true"><thead><tr><th width="376">Operation</th><th width="298">Function</th><th width="169">Return</th><th>Owner</th></tr></thead><tbody><tr><td><code>LIBRE_STATIC_FLAG_CHECK</code></td><td><em>checkLibreStaticFlags()</em></td><td>Bool</td><td>KAIO Admin</td></tr><tr><td><code>LIBRE_DYNAMIC_FLAG_CHECK</code></td><td><em>checkLibreDynamicFlags()</em></td><td>Bool</td><td>KAIO Admin</td></tr><tr><td><code>LIBRE_DYNAMIC_FLAG_CHECK_FUNDS</code></td><td><em>checkLibreDynamicFlagsFunds()</em></td><td>Bool</td><td>KAIO Admin</td></tr><tr><td><code>LIBRE_DYNAMIC_FLAG_CHECK_TOKENS</code></td><td><em>checkLibreDynamicFlagsTokens()</em></td><td>Bool</td><td>KAIO Admin</td></tr><tr><td><code>STATIC_FLAG_CHECK</code></td><td><em>checkStaticFlags()</em></td><td>Bool</td><td>Dealers</td></tr><tr><td><code>DYNAMIC_FLAG_CHECK</code></td><td><em>checkDynamicFlags()</em></td><td>Bool</td><td>Dealers</td></tr><tr><td><code>DYNAMIC_FLAG_CHECK_FUNDS</code></td><td><em>checkDynamicFlagsFunds()</em></td><td>Bool</td><td>Dealers</td></tr><tr><td><code>DYNAMIC_FLAG_CHECK_TOKENS</code></td><td><em>checkDynamicFlagsTokens()</em></td><td>Bool</td><td>Dealers</td></tr></tbody></table>


# Rule Modules

Modules for compliance rules

## Introduction

Rules Modules are smart contracts that allow for specific checks to be applied to certain operations, making sure functionality is bound to rules being followed. Modules are registered in Rules Engines. These will call the appropriate check function in the module when the corresponding operation is being performed, as described in [Rule Engines](/how-kaio-works/smart-contracts/rules/rule-engines). Thus, modules must list the operations for which they will perform checks. To ensure safety modules can only add additional restrictions on functionality, not modify it in other ways.

The modules detailed below are the ones currently used, but new modules can be added in the future, be it platform-wide or only applying in specific scenarios.

## Allowlist Modules

### KAIO Requirements Module

#### Contract

<mark style="color:red;">`LibreRequirementsModule.sol`</mark>

#### Associated Rules Engine

Dealer Rules Engine

#### Triggers

* Creating an order
* Confirming an order
* Locking an order
* Transferring tokens

#### Parameters

* `BLOCKED` : Indicates if the investor is blocked.
* `INVESTOR_TYPE` : Category the investor belongs to.
* `MAX_INVESTOR_TYPE` : Maximum investor category allowed.
* `KYC_PASSED` : Indicates if the investor has passed KYC checks.
* `AML_PASSED` : Indicates if the investor has passed AML checks.
* `SANCTIONS_PASSED` : Indicates if the investor has passed sanctions checks.
* `RESIDENCE` : Residence of the investor.
* `JURISDICTION_ALLOWED` : Indicates if the jurisdiction is allowed in KAIO.
* `SELF_CERTIFICATION_REQUIRED` : Indicates if a self certification is needed for the jurisdiction.
* `SELF_CERTIFICATION` : Indicates if the investor has a self certification.
* `FITNESS_TEST_REQUIRED` : Indicates if a fitness test is needed for the jurisdiction.
* `FITNESS_TEST` : Indicates if the investor has passed a fitness test.
* `INVESTOR_ALLOWLISTED_REQUIRED` : Indicates if the instrument requires investors to be individually allowed manually.
* `DISCLOSURE_DOCUMENTS_REQUIRED` : Indicates if the level of disclosure documents needed by the fund for the jurisdiction.
* `DISCLOSURE_DOCUMENTS` : Disclosure documents level of the fund.
* `LISTED_ON_REGULATED_VENUE_REQUIRED` : Indicates if the fund being listed on a regulated venue is needed for the jurisdiction.
* `LISTED_ON_REGULATED_VENUE` : Indicates if the fund is listed on a regulated venue.
* `LOCAL_AIFM_REQUIRED` : Indicates if the fund having a local AIFM is needed for the jurisdiction.
* `LOCAL_AIFM` : Indicates if the fund has a local AIFM.
* `NON_EU_AIFM_REQUIRED` : Indicates if the fund having a non EU AIFM is needed for the jurisdiction.
* `NON_EU_AIFM` : Indicates if the fund has a local non EU AIFM.
* `MINIMUM_INVESTMENT_REQUIRED` : Indicates if a minimum investment is needed in the instrument.
* `NO_MINIMUM_INVESTMENT_HOLDER_NUMBER` : Number of holder for which the instrument does not enforce a minimum investment.
* `MINIMUM_INVESTMENT` : Minimum investment in settlement tokens required when subscribing to the instrument.

#### Explanation

KAIO requirements can be any restriction the KAIO Admin decides to set on investors in order to interact with the system. The platform conditions for MVP that are implemented in <mark style="color:red;">`LibreRequirementsModule.sol`</mark> are complex, and are based on the limitations investors and funds receive from their jurisdictions, as presented in the table below.

<div data-full-width="true"><figure><img src="/files/mRYF1q5wDy3bD6NaGDlA" alt=""><figcaption><p><em><strong>Distribution Rules</strong></em></p></figcaption></figure></div>

#### Restrictions

* Investor has a proper type.
* Investor has passed KYC checks.
* Investor has passed AML checks.
* Investor has passed sanctions checks.
* Investor's residence is an allowed jurisdiction.
* Investor has self certification if their jurisdiction requires it.
* Investor has fitness test if their jurisdiction requires it.
* Investor is allowed directly for the instrument they are using if the instrument requires it.
* The fund that owns the instrument that the Investor is using has the proper disclosure documents level if the jurisdiction the Investor belongs to requires it.
* The fund that owns the instrument that the Investor is listed on a regulated venue if the jurisdiction the Investor belongs to requires it.
* The fund that owns the instrument that the Investor is using has a local AIFM if the jurisdiction the Investor belongs to requires it.
* The fund that owns the instrument that the Investor is using has a local non-EU AIFM if the jurisdiction the Investor belongs to requires it.
* The Investor's investment if above the minimum investment of their jurisdiction for their type of user.

#### Example

<details>

<summary>Parameters</summary>

* `BLOCKED` : <mark style="color:red;">`FALSE`</mark>
* `INVESTOR_TYPE` : <mark style="color:red;">`1 (Professional)`</mark>
* `MAX_INVESTOR_TYPE` : <mark style="color:red;">`4`</mark>
* `KYC_PASSED` : <mark style="color:red;">`TRUE`</mark>
* `AML_PASSED` : <mark style="color:red;">`TRUE`</mark>
* `SANCTIONS_PASSED` : <mark style="color:red;">`TRUE`</mark>
* `RESIDENCE` : <mark style="color:red;">`0x08 (France)`</mark>
* `JURISDICTION_ALLOWED` : <mark style="color:red;">`TRUE`</mark>
* `SELF_CERTIFICATION_REQUIRED` : <mark style="color:red;">`FALSE`</mark>
* `SELF_CERTIFICATION` : <mark style="color:red;">`FALSE`</mark>
* `FITNESS_TEST_REQUIRED` : <mark style="color:red;">`FALSE`</mark>
* `FITNESS_TEST` : <mark style="color:red;">`FALSE`</mark>
* `INVESTOR_ALLOWLISTED_REQUIRED` : <mark style="color:red;">`FALSE`</mark>
* `DISCLOSURE_DOCUMENTS_REQUIRED` : <mark style="color:red;">`1`</mark>
* `DISCLOSURE_DOCUMENTS` : <mark style="color:red;">`2`</mark>
* `LISTED_ON_REGULATED_VENUE_REQUIRED` : <mark style="color:red;">`FALSE`</mark>
* `LISTED_ON_REGULATED_VENUE` : <mark style="color:red;">`FALSE`</mark>
* `LOCAL_AIFM_REQUIRED` : <mark style="color:red;">`FALSE`</mark>
* `LOCAL_AIFM` : <mark style="color:red;">`FALSE`</mark>
* `NON_EU_AIFM_REQUIRED` : <mark style="color:red;">`FALSE`</mark>
* `NON_EU_AIFM` : <mark style="color:red;">`FALSE`</mark>
* `MINIMUM_INVESTMENT_REQUIRED` : <mark style="color:red;">`TRUE`</mark>
* `NO_MINIMUM_INVESTMENT_HOLDER_NUMBER` : <mark style="color:red;">`0`</mark>
* `MINIMUM_INVESTMENT` : <mark style="color:red;">`10_000`</mark>

</details>

In this example, an investor is trying to subscribe to an instrument. The investor has a proper type, since it is smaller in value than the maximum investor type. They have also passed KYC, AML, and sanction checks successfully, and their residence is allowed in the jurisdiction. While they do not have a fitness test or a self certification, their jurisdiction does not require either of them. The jurisdictions does not require the fund the instrument belongs to be listed in a regulated venue, have local AIFM or a local non-EU AIFM, but it does require a disclosure documents level of 1. The fund has an disclosure documents level of 2, so it meets that requirement. Finally the instrument does not require the investor to be allowed manually, but it does require a minimum investment of $10,000 in settlement tokens. Since the investor meets all other requirements, they will be able to subscribe as long as their investment is of 10,000 settlement tokens or above.

### Dealer Requirements Module

{% hint style="info" %}
This module is created and managed by each Dealer individually, with any custom requirements they decide to implement.
{% endhint %}

#### Contract

N/A

#### Associated Rules Engine

Dealer Rules Engine

#### Triggers

* Creating an order
* Confirming an order
* Locking an order
* Transferring tokens

#### Parameters

N/A

#### Explanation

Dealer requirements can be any restriction a Dealer decides to set on their investors in order to interact with KAIO. Currently there are no conditions a Dealer has requested, but an example of what this could look like is provided in <mark style="color:red;">`AllowlistModuleDealerExample1.sol`</mark>.

#### Restrictions

N/A

#### Example

N/A

### Instrument Requirements Module

{% hint style="info" %}
This module is created and managed by each Fund Admin individually, with any custom requirements they decide to implement for their instrument.
{% endhint %}

#### Contract

<mark style="color:red;">`InstrumentRequirementsModule.sol`</mark>

#### Associated Rules Engine

Rules Engine

#### Triggers

* Creating an order
* Confirming an order
* Locking an order
* Transferring tokens

#### Parameters

* `RESIDENCE` : Residence of the investor.
* `RESIDENCES_ALLOWED` : Residences allowed in the instrument.
* `NATIONALITIES` : Nationalities of the investor.
* `NATIONALITIES_ALLOWED` : Nationalities allowed in the instrument.
* `INVESTOR_TYPE` : Category the investor belongs to.
* `INVESTOR_TYPES_ALLOWED` : Investor types allowed in the instrument.

#### Explanation

Instrument requirements can be any restriction an Instrument Admin decides to set on investors in order to interact with their instrument. An example of what this could look like is provided in <mark style="color:red;">`AllowlistModuleInstrumentExample1.sol`</mark>*.* Currently <mark style="color:red;">`InstrumentRequirementsModule.sol`</mark> is the only implementation, and Fund Admins are free to use it or extend it as they please.

#### Restrictions

* The nationalities of the Investor are all allowed in the instrument.
* The residence of the Investor is allowed in the instrument.
* The investor type of the Investor is allowed in the instrument.

#### Example

<details>

<summary>Parameters</summary>

* `RESIDENCE` : <mark style="color:red;">`0x0f (Germany)`</mark>
* `RESIDENCES_ALLOWED` : <mark style="color:red;">`0x0f (Germany)`</mark>
* `NATIONALITIES` : <mark style="color:red;">`0x08 (France)`</mark>
* `NATIONALITIES_ALLOWED` : <mark style="color:red;">`0x0f (Germany)`</mark>
* `INVESTOR_TYPE` : <mark style="color:red;">`1 (Professional)`</mark>
* `INVESTOR_TYPES_ALLOWED` : <mark style="color:red;">`0x02 (Professional)`</mark>

</details>

In this example, an investor is trying to subscribe to an instrument that has its own restrictions for residence, nationality, and type. While their residence and investor type are allowed by the instrument, their nationality is not, since they have a French nationality and only German nationality is accepted. This means they will not be able to subscribe to the instrument while their information and the instruments restrictions do not change.

## Subscription Modules

{% hint style="info" %}
In the smart contract implementation Subscriptions are usually referred to as Bids, so the name might differ here, as subscription is the preferred term.
{% endhint %}

### Cut Off Module

#### Contract

<mark style="color:red;">`BidCutOffModule.sol`</mark>

#### Associated Rules Engine

Rules Engine

#### Trigger

* Locking a subscription order

#### Parameters

* `SUBSCRIPTION_CUT_OFF_PERIOD` : First component of the period of time for which cut offs happen, indicating days. It is measured in seconds, counting backwards from the end of the subscription period.
* `SUBSCRIPTION_CUT_OFF_TIME` : Second component of the period of time for which cut offs happen, indicating the hour the cut off will begin the previous day. It is measured in seconds.

#### Explanation

This amount of time is split into two components. The first is the cut off period itself, which is subtracted backwards from the end of the subscription period. Then there is the cut off time, which is the time of day of the previous day when the cut off will go into effect. Together they provide an amount of time for which the cut off happens at the end of each subscription period.

#### Restrictions

* Locking an order must happen before the cut off time of a period.

#### Example

<details>

<summary>Parameters</summary>

* `SUBSCRIPTION_CUT_OFF_PERIOD` : <mark style="color:red;">`259200 (3 days)`</mark>
* `SUBSCRIPTION_CUT_OFF_TIME` : <mark style="color:red;">`57600 (16 hours)`</mark>

</details>

In this example an investor is trying to lock a subscription order 3 days before the period ends, at 20:00 UTC. It is the 27th of April, and the period ends at the end of the month (May 1st). In this case the cut off period starts at 16:00 UTC 3 days before the period ends. Since the investor tried to lock once the cut off period started, they will not be able to lock their order until the cut off period ends and the next period starts.

### Aggregation Limit Module

#### Contract

<mark style="color:red;">`BidsAggregationLimitModule.sol`</mark>

#### Associated Rules Engine

Rules Engine

#### Trigger 1

* Creating a subscription order

#### Parameters 1

* `SUBSCRIPTION_SIZE_MULTIPLE` : Smallest denomination unit an order amount can have.

#### Explanation 1

The multiple defines the smallest possible unit of settlement tokens that investors can transact with.

#### Restrictions 1

* The amount of the order must be a multiple of the subscription size multiple.

#### Example 1

<details>

<summary>Parameters</summary>

`SUBSCRIPTION_SIZE_MULTIPLE` : <mark style="color:red;">`0.001`</mark>

</details>

In this example, an investor is trying to create a subscription order worth 9.3792 settlement tokens (settlement tokens have 6 decimal places). Since this number is not a multiple of 0.001, which is the subscription size multiple, the order creation is not allowed. The investor can instead create an order for 9.379 settlement tokens, which will be allowed.

#### Trigger 2

* Settling subscription orders

#### Parameters 2

* `LOCAL_AGGREGATE_MINIMUM_HOLDING` : Minimum holding amount between all investors for the feeder fund.
* `INSTRUMENT_TOKEN` : Security token address.
* `REDEMPTION_BOOK` : Redemption book address.
* `SUBSCRIPTION_BOOK` : Subscription book address.
* `AGGREGATED_MINIMUM_SUBSEQUENT_SUBSCRIPTION` : Minimum amount for subsequent subscriptions between all investors.

#### Explanation 2

There are capacity restrictions to meet for settling the combined subscriptions of all investors. These are related to the new amount being subscribed, and the overall holdings once the settlement is done.

#### Restrictions 2

* The percentage used to settle has to be 100%.
* The settlement must take place during a valid subscription period.
* The to be settled must be above the aggregated minimum subsequent subscription.
* The amount to be settled plus the existing holdings must be above the local aggregate minimum holding.

#### Example 2

<details>

<summary>Parameters</summary>

* `LOCAL_AGGREGATE_MINIMUM_HOLDING` : <mark style="color:red;">`100_000`</mark>
* `INSTRUMENT_TOKEN` : <mark style="color:red;">`0x0a (instrument token address)`</mark>
* `REDEMPTION_BOOK` : <mark style="color:red;">`0x0b (redemption book address)`</mark>
* `SUBSCRIPTION_BOOK` : <mark style="color:red;">`(subscription book address)`</mark>
* `AGGREGATED_MINIMUM_SUBSEQUENT_SUBSCRIPTION` : <mark style="color:red;">`10_000`</mark>

</details>

In this example an admin is settling the pending subscription orders. They are settling 100% of the selected orders, and the settlement is taking place during a valid subscription period. The existing holdings are $98,000, and the amount to settle is $14,000. Since the total amount after the settlement will be larger than the local aggregate minimum holding ($100,000), and the amount to settle is above the aggregated minimum subsequent subscription ($10,000), the settlement can take place. This results in $112,00 in total holdings.

### Round Limit Module

#### Contract

<mark style="color:red;">`RoundAmountLimitModule.sol`</mark>

#### Associated Rules Engine

Rules Engine

#### Trigger

* Creating a subscription order

#### Parameters

* `MAXIMUM_SUBSCRIPTION_AMOUNT` : Maximum amount of settlement tokens that can be subscribed in a given subscription round

#### Explanation

There is a maximum amount of subscriptions that can be done in a given round, measured in the amount of settlement tokens used in the orders.

#### Restrictions

* The aggregated amount of settlement tokens in all the orders created in the round should not exceed the maximum subscription amount.

#### Example

<details>

<summary>Parameters</summary>

`MAXIMUM_SUBSCRIPTION_AMOUNT` : <mark style="color:red;">`50_000`</mark>

</details>

In this example an investor is trying to create a subscription order worth $1,500. The aggregated amount of subscriptions in the current round is $48,700. Since with the incoming subscription the total amount would be above the maximum subscription amount, the order creation would fail. The investor could create a different order worth $1,300, and this one would be created successfully.

### End Module

#### Contract

<mark style="color:red;">`SubscriptionEndModule.sol`</mark>

#### Associated Rules Engine

Rules Engine

#### Triggers

* Creating a subscription order
* Confirming a subscription order
* Locking a subscription order
* Settling subscription orders

#### Parameters

* `SUBSCRIPTION_START` : Start date for subscriptions in an instrument.
* `SUBSCRIPTION_END` : End date for subscriptions in an instrument.

#### Explanation

The operations interacting with the subscription book need to happen between the subscription start and subscription end dates.

#### Restrictions

* Operations must take place after subscription start.
* Operations must take place before the subscription end.

#### Example

<details>

<summary>Parameters</summary>

* `SUBSCRIPTION_START` : <mark style="color:red;">`1714056000 (2024/04/25)`</mark>
* `SUBSCRIPTION_END` : <mark style="color:red;">`2000000000 (2033/05/18)`</mark>

</details>

In this example, an investor is locking a subscription order the 1st of May of 2024 (2024/05/01). Since this is after the subscription start (2024/04/25) and before the subscription end (2033/05/18), it is allowed.

### Size Module

#### Contract

<mark style="color:red;">`SubscriptionSizeModule.sol`</mark>

#### Associated Rules Engine

Rules Engine

#### Trigger 1

* Transferring tokens

#### Parameters 1

* `SUBSCRIPTION_BOOK` : Subscription book address.
* `REDEMPTION_BOOK` : Redemption book address.
* `INSTRUMENT_TOKEN` : Security token address.
* `UNAUDITED_NAV_PER_SHARE` : Unaudited net asset value of the instrument, per each security token.
* `LOCAL_INVESTOR_MINIMUM_HOLDING` : Minimum amount of security tokens an investor needs to hold, denominated in USD using the instruments NAV.

#### Explanation 1

When transferring their tokens, investors need to keep their balance above the minimum holding, unless they are transferring their entire balance. Transfer between the addresses belonging to the same investor (internal transfers) are exempt.

#### Restrictions 1

* Internal transfers between addresses of the same investor are allowed, and no restrictions are applied.
* Transfers should result in investors' balances being above the local investor minimum holding, or 0.
* As an exception to the previous, a transfer is allowed if the recipient investor's balance is above 0 but below the local investor minimum holding, even if the resulting balance would still be below this minimum.

#### Example 1

<details>

<summary>Parameters</summary>

* `SUBSCRIPTION_BOOK` : <mark style="color:red;">`0x0a (subscription book address)`</mark>
* `REDEMPTION_BOOK` : <mark style="color:red;">`0x0b (redemption book address)`</mark>
* `INSTRUMENT_TOKEN` : <mark style="color:red;">`0x0c (security token address)`</mark>
* `UNAUDITED_NAV_PER_SHARE` : <mark style="color:red;">`1.31`</mark>
* `LOCAL_INVESTOR_MINIMUM_HOLDING` : <mark style="color:red;">`1_000`</mark>

</details>

In this example, an investor is transferring tokens to another investor. The sender has 1900 security tokens worth $2489. The recipient has no tokens. The sender wants to send 1000 tokens to the recipient. Since this would leave both investors above the minimum holding ($1179 and $1310), it is allowed.

#### Trigger 2

* Confirming a subscription order

#### Parameters 2

* `SUBSCRIPTION_BOOK` : Subscription book address.
* `REDEMPTION_BOOK` : Redemption book address.
* `INSTRUMENT_TOKEN` : Security token address.
* `UNAUDITED_NAV_PER_SHARE` : Unaudited net asset value of the instrument, per each security token.
* `LOCAL_INVESTOR_MINIMUM_HOLDING` : Minimum amount of security tokens an investor needs to hold, denominated in USD using the instruments NAV.
* `INVESTOR_MINIMUM_INITIAL_SUBSCRIPTION` : Minimum amount of settlement tokens used when doing an initial subscription.
* `INVESTOR_MINIMUM_SUBSEQUENT_SUBSCRIPTION` : Minimum amount of settlement tokens used when doing subsequent subscriptions.

#### Explanation 2

When their holding is below the minimum investor holding, investor's can only confirm additional subscription orders if they would bring their holding above the minimum.

#### Restrictions 2

* An investor's net holding plus the incoming subscriptions must put their holdings above the minimum investor holding.
* The incoming subscription amount must be above the investor minimum subsequent subscription, or alternatively above the investor minimum initial subscription if the investor's holdings are 0.

#### Example 2

<details>

<summary>Parameters</summary>

* `SUBSCRIPTION_BOOK` : <mark style="color:red;">`0x0a (subscription book address)`</mark>
* `REDEMPTION_BOOK` : <mark style="color:red;">`0x0b (redemption book address)`</mark>
* `INSTRUMENT_TOKEN` : <mark style="color:red;">`0x0c (security token address)`</mark>
* `UNAUDITED_NAV_PER_SHARE` : <mark style="color:red;">`1.31`</mark>
* `LOCAL_INVESTOR_MINIMUM_HOLDING` : <mark style="color:red;">`1_000`</mark>
* `INVESTOR_MINIMUM_INITIAL_SUBSCRIPTION` : <mark style="color:red;">`2_000`</mark>
* `INVESTOR_MINIMUM_SUBSEQUENT_SUBSCRIPTION` : <mark style="color:red;">`500`</mark>

</details>

In this example an investor is trying to confirm a subscription order. Their current holdings are $800. The order they are trying to confirm is for $300 in settlement tokens. While the initial subscription minimum does not apply (since it is not the investor's first subscription), and the holdings after the settlement of $1300 would be above the minimum investor holding ($1000), the order can't be confirmed. This is because it is below the $500 investor minimum subsequent subscription. Alternatively, if the investor tried with an order worth $500 or above, it would be confirmed successfully.

#### Trigger 3

* Confirming a redemption order

#### Parameters 3

* `SUBSCRIPTION_BOOK` : Subscription book address.
* `REDEMPTION_BOOK` : Redemption book address.
* `INSTRUMENT_TOKEN` : Security token address.
* `UNAUDITED_NAV_PER_SHARE` : Unaudited net asset value of the instrument, per each security token.
* `LOCAL_INVESTOR_MINIMUM_HOLDING` : Minimum amount of security tokens an investor needs to hold, denominated in USD using the instruments NAV.

#### Explanation 3

Investors can only confirm redemption orders if doing so would not bring their holding below the minimum investor holding.

#### Restrictions 3

* An investor's net holding minus the outgoing redemptions must keep their holdings above the minimum investor holding.

#### Example 3

<details>

<summary>Parameters</summary>

* `SUBSCRIPTION_BOOK` : <mark style="color:red;">`0x0a (subscription book address)`</mark>
* `REDEMPTION_BOOK` : <mark style="color:red;">`0x0b (redemption book address)`</mark>
* `INSTRUMENT_TOKEN` : <mark style="color:red;">`0x0c (security token address)`</mark>
* `UNAUDITED_NAV_PER_SHARE` : <mark style="color:red;">`0.82`</mark>
* `LOCAL_INVESTOR_MINIMUM_HOLDING` : <mark style="color:red;">`1_000`</mark>

</details>

In this example an investor is trying to confirm a redemption order worth $200 in security tokens. Their current holding of security tokens is worth $1,800. Since the redemption could be settled without their holdings going below the local investor minimum holding of $1000, the redemption confirmation is allowed.

### Total Investors Limit Module

#### Contract

<mark style="color:red;">`TotalInvestorsLimitModule.sol`</mark>

#### Associated Rules Engine

Rules Engine

#### Trigger

* Creating a subscription order

#### Parameters

* `MAXIMUM_SUBSCRIPTION_INVESTORS_PER_ROUND` : Maximum number of investors that can participate in a subscription round.

#### Explanation

There is a maximum number of investors that can participate in a subscription round, after which now new investors are permitted to subscribe. Already subscribed investors can continue to create orders normally.

#### Restrictions

* The number of investors that created orders in the current subscription phase must be below the maximum subscription investors per round.

#### Example

<details>

<summary>Parameters</summary>

`MAXIMUM_SUBSCRIPTION_INVESTORS_PER_ROUND` : <mark style="color:red;">`150`</mark>

</details>

In this example an investor is trying to create a subscription order. They already have holdings from previous rounds, but no orders previously created in the current one. There are already orders belonging to 165 different investors, and since the maximum subscription investors per round is 150, the investor is not allowed to create an order. They will have to wait until the current round finishes and create an order in the next round instead.

## Redemption Modules

### Forced Redemption Module

#### Contract

<mark style="color:red;">`ForcedRedemptionModule.sol`</mark>

#### Associated Rules Engine

Rules Engine

#### Trigger

* Forcing a redemption

#### Parameters

* `GLOBAL_AGGREGATE_MINIMUM_BREACH` : Indicates if the global aggregate amount of tokens has dropped below the minimum.
* `LOCAL_INVESTOR_MINIMUM_HOLDING` : Minimum amount of security tokens an investor needs to hold, denominated in USD using the instruments NAV.
* `INSTRUMENT_TOKEN` : Security token address.
* `FORCED_REDEMPTION_TOP_UP_PERIOD` : Period for which an investor can do top ups of their security token holdings before a forced redemption can be done. Expressed in `FORCED_REDEMPTION_TOP_UP_PERIOD_UNIT`.

#### Explanation

Forced redemptions are allowed whenever the investor's holdings are below the local minimum, or when the aggregate holdings of all investors are below the global minimum.

#### Restrictions

* The global aggregate minimum must be breached, or the investor's holdings must be below the local minimum holding for longer than the duration of the top up period.

#### Example

<details>

<summary>Parameters</summary>

* `GLOBAL_AGGREGATE_MINIMUM_BREACH` : <mark style="color:red;">`FALSE`</mark>
* `LOCAL_INVESTOR_MINIMUM_HOLDING` : <mark style="color:red;">`10_000`</mark>
* `INSTRUMENT_TOKEN` : <mark style="color:red;">`0x0a (security token address)`</mark>
* `FORCED_REDEMPTION_TOP_UP_PERIOD` : <mark style="color:red;">`7 (days)`</mark>

</details>

In this example an admin is trying to perform a forced redemption for an investor, whose holdings are $6,430. In the past 7 days, their maximum holdings were $7,122. Since they were below the local investor minimum holding of $10,000 for all the top up period, the forced redemption is allowed, regardless of the global aggregate minimum not being breached.

### Gate Criteria 1 Module

#### Contract

<mark style="color:red;">`Gate1Module.sol`</mark>

#### Associated Rules Engine

*Rules Engine*

#### Trigger

* Settling redemption orders

#### Parameters

* `GATE_CRITERIA_1` : Percent of the total supply that can be redeemed in a period, expressed in basis points (bps).
* `INSTRUMENT_TOKEN` : Security token address.

#### Explanation

The gate 1 criteria module limits the amount that can be redeemed in a period, based on the total existing supply. Amounts exceeding are reduced to fit this restriction.

#### Restrictions

* The amount redeemed in a period must not surpass the gate 1 criteria, which is a percentage of the total supply of the security token.
* If the aggregated amount to redeem is larger than the gate 1 criteria, only the amount allowed is redeemed, proportionally per each locked order.

#### Example

<details>

<summary>Parameters</summary>

* `GATE_CRITERIA_1` : <mark style="color:red;">`1000 (10%)`</mark>
* `INSTRUMENT_TOKEN` : <mark style="color:red;">`0x0a (security token address)`</mark>

</details>

In this example, the total supply of the security token is 2300. An admin is performing a settlement of the two orders in the period by two different investors, of 170 and 290 security tokens respectively. Since the gate criteria one is 10%, the maximum allowed amount is 230, but the aggregated redemptions reach 460, double the allowed amount. Because of this, the order amount settled will be reduced proportionally, to 85 tokens for the first investor and 145 tokens for the second one. The orders will thus be partially settled, and the remaining pending amounts will be carried over to the next period.

### Notice Period

#### Contract

<mark style="color:red;">`NoticePeriodModule.sol`</mark>

#### Associated Rules Engine

Rules Engine

#### Trigger

* Settling redemption orders

#### Parameters

* `REDEMPTION_NOTICE_PERIOD` : Period for which redemption orders cannot be settled after creation. Expressed in `REDEMPTION_NOTICE_PERIOD_UNIT`.

#### Explanation

Before settling a redemption order, the notice period for that order has to end.

#### Restrictions

* The time between order creation and order settlement must exceed the notice period duration.

#### Example

<details>

<summary>Parameters</summary>

`REDEMPTION_NOTICE_PERIOD` : <mark style="color:red;">`3 (months)`</mark>

</details>

In this example an admin is trying to settle an order recently created, 2 weeks prior. Since the redemption notice period is of 3 months, this settlement will not be allowed. The admin will have to wait until after the period has concluded in order to settle the order.

### End Module

#### Contract

<mark style="color:red;">`RedemptionEndModule.sol`</mark>

#### Associated Rules Engine

Rules Engine

#### Triggers

* Creating a redemption order
* Confirming a redemption order
* Settling redemption orders

#### Parameters

* `REDEMPTION_START` : Start date for redemptions in an instrument.
* `REDEMPTION_END` : End date for redemptions in an instrument.

#### Explanation

The operations interacting with the redemption book need to happen between the redemption start and redemption end dates.

#### Restrictions

* Operations must take place after redemption start.
* Operations must take place before the redemption end.

#### Example

<details>

<summary>Parameters</summary>

* `REDEMPTION_START` : <mark style="color:red;">`1714056000 (2024/04/25)`</mark>
* `REDEMPTION_END` : <mark style="color:red;">`2000000000 (2033/05/18)`</mark>

</details>

In this example, an investor is confirming a redemption order the 1st of May of 2024 (2024/05/01). Since this is after the redemption start (2024/04/25) and before the redemption end (2033/05/18), it is allowed.

### Volume Limit Module

#### Contract

<mark style="color:red;">`VolumeLimitModule.sol`</mark>

#### Associated Rules Engine

Rules Engine

#### Trigger

* Settling redemption orders

#### Parameters

* `INSTRUMENT_TOKEN` : Security token address.
* `REDEMPTION_VOLUME_LIMIT` : Percent of the maximum amount of tokens held between all investors that can be settled per redemption round. Expressed in basis points (bps).
* `REDEMPTION_LOOKBACK_PERIOD` : Period of time the lookback is done on, expressed in `REDEMPTION_LOOKBACK_PERIOD_UNIT`.

#### Explanation

The volume limit module limits the amount that can be redeemed in a period, based on the maximum supply in the lookback period. Amounts exceeding are reduced to fit this restriction.

#### Restrictions

* The amount redeemed in a period must not surpass the redemption volume limit, which is a percentage of the maximum supply of the security token during the redemption lookback period.
* If the aggregated amount to redeem is larger than the volume limit, only the amount allowed is redeemed, proportionally per each locked order.

#### Example

<details>

<summary>Parameters</summary>

* `INSTRUMENT_TOKEN` : <mark style="color:red;">`0x0a (security token address)`</mark>
* `REDEMPTION_VOLUME_LIMIT` : <mark style="color:red;">`5000 (50%)`</mark>
* `REDEMPTION_LOOKBACK_PERIOD` : <mark style="color:red;">`12 (months)`</mark>

</details>

In this example an admin is trying to settle redemption orders with an aggregated amount of 254,000 tokens. The maximum token supply in the last 12 months was of 823,000 tokens. Since the amount to settle is under de volume limit (50% of 823,000), the redemption is allowed.

## Other Modules

### Halt Module

#### Contract

<mark style="color:red;">`HaltModule.sol`</mark>

#### Associated Rules Engine

Rules Engine

#### Triggers

* Transferring tokens
* Forcing token transfers
* Creating an order
* Confirming an order
* Locking an order
* Cancelling an order
* Settling orders

#### Parameters

* `GLOBAL_AGGREGATE_MINIMUM_BREACH` : Indicates if the global aggregate amount of tokens has dropped below the minimum.
* `REDEMPTION_BOOK` : Redemption book address.

#### Explanation

Most operations are rejected whenever the system is halted, due to the global minimum holdings amount being breached.

#### Restrictions

* System is not halted.

#### Example

<details>

<summary>Parameters</summary>

* `GLOBAL_AGGREGATE_MINIMUM_BREACH` : <mark style="color:red;">`TRUE`</mark>
* `REDEMPTION_BOOK` : <mark style="color:red;">`0x0a (redemption book address)`</mark>

</details>

In this example an investor is trying to confirm a subscription order. Since the global minimum has been breached, the system is halted, and this confirmation is not allowed. The investor must wait until the breach is resolved to be able to confirm their order.

### Holdings Module

#### Contract

<mark style="color:red;">`HoldingsModule.sol`</mark>

#### Associated Rules Engine

Rules Engine

#### Trigger 1

* Confirming a subscription or redemption order

#### Parameters 1

* `INSTRUMENT_TOKEN` : Security token address.
* `SUBSCRIPTION_BOOK` : Subscription book address.
* `REDEMPTION_BOOK` : Redemption book address.
* `UNAUDITED_NAV_PER_SHARE` : Unaudited net asset value of the instrument, per each security token.
* `LOCAL_INVESTOR_MINIMUM_HOLDING` : Minimum amount of security tokens an investor needs to hold, denominated in USD using the instruments NAV.
* `INVESTOR_MINIMUM_SUBSEQUENT_SUBSCRIPTION` : Minimum amount of settlement tokens used when doing subsequent subscriptions.
* `LOCAL_AGGREGATE_MINIMUM_HOLDING` : Minimum holding amount between all investors for the feeder fund.

#### Explanation 1

When confirming subscription or redemption orders, investor specific minimums should be respected. This includes minimum subsequent subscription amounts as well, but only when the investor holdings are above the minimum.

#### Restrictions 1

* The investor's security token balance should be above the local investor minimum holding or 0 when the order eventually gets settled.
* If the investor's balance is above the local investor minimum holding, subscription order amounts should be above the investor minimum subsequent subscription.
* Redemption orders must not make the aggregate holdings between investors go below the local aggregate minimum holding.

#### Example 1

<details>

<summary>Parameters</summary>

* `INSTRUMENT_TOKEN` : <mark style="color:red;">`0x0a (security token address)`</mark>
* `SUBSCRIPTION_BOOK` : <mark style="color:red;">`0x0b (subscription book address)`</mark>
* `REDEMPTION_BOOK` : <mark style="color:red;">`0x0c (redemption book address)`</mark>
* `UNAUDITED_NAV_PER_SHARE` : <mark style="color:red;">`1.22`</mark>
* `LOCAL_INVESTOR_MINIMUM_HOLDING` : <mark style="color:red;">`10_000`</mark>
* `INVESTOR_MINIMUM_SUBSEQUENT_SUBSCRIPTION` : <mark style="color:red;">`2_000`</mark>
* `LOCAL_AGGREGATE_MINIMUM_HOLDING` : <mark style="color:red;">`100_000`</mark>

</details>

In this example an investor is trying to confirm a redemption order. Their current holdings are worth $12,000. The order they are trying to confirm is for $1,500 in security tokens. Since the local aggregate minimum holding is $101,200, the order cannot be confirmed. This is because even though the investor would still be above the local investor minimum holding of $10,000, the local aggregate minimum holdings would be breached. The investor could alternatively confirm a redemption order of $1,200 or below to avoid the breach.

#### Trigger 2

* Transferring tokens

#### Parameters 2

* `INSTRUMENT_TOKEN` : Security token address.
* `SUBSCRIPTION_BOOK` : Subscription book address.
* `REDEMPTION_BOOK` : Redemption book address.
* `UNAUDITED_NAV_PER_SHARE` : Unaudited net asset value of the instrument, per each security token.
* `LOCAL_INVESTOR_MINIMUM_HOLDING` : Minimum amount of security tokens an investor needs to hold, denominated in USD using the instruments NAV.

#### Explanation 2

When transferring their tokens, investors need to keep their balance above the minimum holding, unless they are transferring their entire balance. Transfer between the addresses belonging to the same investor (internal transfers) are exempt.

#### Restrictions 2

* Internal transfers between addresses of the same investor are allowed, and no restrictions are applied.
* Transfers should result in investors' balances being above the local investor minimum holding, or 0.
* As an exception to the previous, a transfer is allowed if the recipient investor's balance is above 0 but below the local investor minimum holding, even if the resulting balance would still be below this minimum.
* The investor transferring their security tokens must have enough token holdings to cover the transfer, excluding tokens used for redemption confirmations.

#### Example 2

<details>

<summary>Parameters</summary>

* `INSTRUMENT_TOKEN` : <mark style="color:red;">`0x0a (security token address)`</mark>
* `SUBSCRIPTION_BOOK` : <mark style="color:red;">`0x0b (subscription book address)`</mark>
* `REDEMPTION_BOOK` : <mark style="color:red;">`0x0c (redemption book address)`</mark>
* `UNAUDITED_NAV_PER_SHARE` : <mark style="color:red;">`1.22`</mark>
* `LOCAL_INVESTOR_MINIMUM_HOLDING` : <mark style="color:red;">`10_000`</mark>

</details>

In this example, an investor is transferring token 462 security tokens to another investor, worth $564. The sender's holdings are $10,750 in total, with the recipient's being $27,340. The sender has a confirmed redemption order worth $750. Taking into account this redemption, the transfer would put their holdings below the local investor minimum holding of $10,000, and thus is not allowed to take place. The sender could cancel their redemption order to be able to perform the transfer.


# Order Books

{% content-ref url="/pages/IKMywyq71r3R1xeJz9DV" %}
[Subscription Book](/how-kaio-works/smart-contracts/order-books/subscription-book)
{% endcontent-ref %}

{% content-ref url="/pages/Pw2kYRURp5L4MJE8MC8s" %}
[Redemption Book](/how-kaio-works/smart-contracts/order-books/redemption-book)
{% endcontent-ref %}

{% content-ref url="/pages/I9ox3s1NPePGurBXaSid" %}
[Fees](/how-kaio-works/smart-contracts/order-books/fees)
{% endcontent-ref %}


# Subscription Book

Book for subscription logic.

## General Description <a href="#general-description" id="general-description"></a>

The Subscription Book contains all the logic for the subscription lifecycle, accepting investments in Settlement Tokens and settling them in Security Tokens. Subscriptions follow a lifecycle of order creation, confirmation, locking, and finally settlement. These first three steps can be done by investors (or by dealers/admins on their behalf) aggregately or separately, according to the instrument's configuration. Settlement is done by admins for multiple orders at once, burning settlement tokens and minting the corresponding security tokens to investors. Certain restrictions on the subscription order lifecycle are enforced by modules applying specific rules and conditions.

## Subscription Creation <a href="#general-description" id="general-description"></a>

Orders are first created by investors or dealers, signaling interest in subscribing to an instrument. In order to settle this order, it must additionally be confirmed and locked. This may happen over separate transactions or in a single one, depending on how the given instrument is configured.

### **Investor Order Creation** <a href="#investor-repayment" id="investor-repayment"></a>

* **Function**: `investorCreateOrder(uint256 _amount, uint256 _lockingHint)`
* **Purpose**: Allows investors to create subscription orders, indicating the amount of settlement tokens they intend to lock.
* **Parameters**:
  * `uint256 _amount`: The amount of settlement tokens for the order.
  * `_lockingHint`: Hint of a nearby order Id to make locking more efficient. Can be ignored by using `0`.
* **Validation Checks**:
  * Ensures the caller is an investor allowed to perform the order creation for the amount of settlement tokens by the allowlist modules.
  * Checks that the amount of tokens is not zero.
  * Verifies the result of the `checkCreateBid()` function for relevant modules in the rules engine.
* **Behavior**:
  * Creates and stores the initial order values.
  * Emits an `OrderCreated` event, signaling the order has been created.
* **Return Values:**
  * `uint256 orderId`: The Id of the newly created order.
* **Example**:

  ```solidity
  investorCreateOrder(1000, 0);
  ```

### **Dealer Order Creation** <a href="#investor-repayment" id="investor-repayment"></a>

* **Function**: `dealerCreateOrder(uint256 _amount, bytes32 _investorId, address _beneficiary, address _investorWallet, uint256 _lockingHint)`
* **Purpose**: Allows dealers to create subscription orders on behalf of investors, indicating the amount of settlement tokens they intend to lock.
* **Parameters**:
  * `uint256 _amount`: The amount of settlement tokens for the order.
  * `bytes32 _investorId`: The Id of the investor the order is created for.
  * `address _beneficiary`: Address that will receive the security tokens once the order is settled.
  * `address _investorWallet`: Wallet belonging to the investor to take settlement tokens from when locking.
  * `_lockingHint`: Hint of a nearby order Id to make locking more efficient. Can be ignored by using `0`.
* **Validation Checks**:
  * Ensures the caller is the investor's dealer.
  * Makes sure that the beneficiary is a wallet belonging to the investor.
  * Checks that the amount of tokens is not zero.
  * Ensures the investor is allowed to perform the order creation for the amount of settlement tokens by the allowlist modules.
  * Verifies the result of the `checkAdvisedCreateBid()` function for relevant modules in the rules engine.
* **Behavior**:
  * Creates and stores the initial order values.
  * Emits an `OrderCreated` event, signaling the order has been created.
* **Return Values:**
  * `uint256 orderId`: The Id of the newly created order.
* **Example**:

  ```solidity
  dealerCreateOrder(1000, 0xInvestorId,
      0xBeneficiaryAddress, 0xInvestorWallet, 0);
  ```

## Subscription Confirmation <a href="#general-description" id="general-description"></a>

After orders are created, they can then be confirmed. Investors or dealers attest to carrying out the created order, though at this step it may still be cancelled. In order to settle this order, it must additionally be locked. This may happen over separate transactions or in a single one, depending on how the given instrument is configured.

### **Investor Order Confirmation** <a href="#investor-repayment" id="investor-repayment"></a>

* **Function**: `investorConfirmOrder(uint256 _orderId, uint256 _lockingHint)`
* **Purpose**: Allows investors to confirm an already created subscription order.
* **Parameters**:
  * `uint256 _orderId`: The Id of the order.
  * `_lockingHint`: Hint of a nearby order Id to make locking more efficient. Can be ignored by using `0`.
* **Validation Checks**:
  * Checks that the caller is the investor that the order belongs to.
  * Ensures the investor is allowed to perform the order confirmation for the amount of settlement tokens by the allowlist modules.
  * Makes sure the order is not already confirmed and is available.
  * Verifies the result of the `checkBidConfirmation()` function for relevant modules in the rules engine.
* **Behavior**:
  * Marks the order as confirmed.
  * Registers the investor's participation in the subscription process
  * Emits an `OrderConfirmed` event, signaling the order has been confirmed.
* **Example**:

  ```solidity
  investorConfirmOrder(0xOrderId, 0);
  ```

### **Dealer Order Confirmation** <a href="#investor-repayment" id="investor-repayment"></a>

* **Function**: `dealerConfirmOrder(uint256 _orderId, address _investorWallet, uint256 _lockingHint)`
* **Purpose**: Allows dealers to confirm an already created subscription order on behalf of an investor.
* **Parameters**:
  * `uint256 _orderId`: The Id of the order.
  * `address _investorWallet`: Wallet belonging to the investor to take settlement tokens from when locking.
  * `_lockingHint`: Hint of a nearby order Id to make locking more efficient. Can be ignored by using `0`.
* **Validation Checks**:
  * Ensures the caller is the investor's dealer.
  * Ensures the investor is allowed to perform the order confirmation for the amount of settlement tokens by the allowlist modules.
  * Makes sure the order is not already confirmed and is available.
  * Verifies the result of the `checkAdvisedBidConfirmation()` function for relevant modules in the rules engine.
* **Behavior**:
  * Marks the order as confirmed.
  * Registers the investor's participation in the subscription process
  * Emits an `OrderConfirmed` event, signaling the order has been confirmed.
* **Example**:

  ```solidity
  dealerConfirmOrder(0xOrderId, 0xInvestorWallet, 0);
  ```

## Subscription Locking <a href="#general-description" id="general-description"></a>

Investors, dealers, or admins can lock orders after they have been confirmed. For an order to be locked, the required settlement tokens are transferred into the subscription book. Once the order is locked, it is ready to be settled, and sent into the settlement queue.

### **Investor Order Locking** <a href="#investor-repayment" id="investor-repayment"></a>

* **Function**: `investorLockTokens(uint256 _orderId, uint256 _lockingHint)`
* **Purpose**: Allows investors to lock in a confirmed order, locking the required settlement tokens in the process.
* **Parameters**:
  * `uint256 _orderId`: The Id of the order.
  * `_lockingHint`: Hint of a nearby order Id to make locking more efficient. Can be ignored by using `0`.
* **Validation Checks**:
  * Checks that the caller is the investor that the order belongs to.
  * Ensures the investor is allowed to lock the order for the amount of settlement tokens by the allowlist modules.
  * Makes sure the order is already confirmed and is available.
  * Verifies the result of the `checkLockBid()` function for relevant modules in the rules engine.
* **Behavior**:
  * Marks the order as not available (locked).
  * Inserts the order in the list of orders pending settlement.
  * Locks the required amount of settlement tokens in the subscription book.
  * Emits an `OrderLocked` event, signaling the order has been locked.
* **Example**:

  ```solidity
  investorLockTokens(0xOrderId, 0);
  ```

### **Dealer Order Locking** <a href="#investor-repayment" id="investor-repayment"></a>

* **Function**: `dealerLockTokens(uint256 _orderId, address _investorWallet, uint256 _lockingHint)`
* **Purpose**: Allows dealers to to lock in a confirmed order on behalf of an investor, locking the required settlement tokens in the process.
* **Parameters**:
  * `uint256 _orderId`: The Id of the order.
  * `address _investorWallet`: Wallet belonging to the investor to take settlement tokens from when locking.
  * `_lockingHint`: Hint of a nearby order Id to make locking more efficient. Can be ignored by using `0`.
* **Validation Checks**:
  * Ensures the caller is the investor's dealer.
  * Ensures the investor is allowed to lock the order for the amount of settlement tokens by the allowlist modules.
  * Makes sure the order is already confirmed and is available.
  * Verifies the result of the `checkAdvisedLockBid()` function for relevant modules in the rules engine.
* **Behavior**:
  * Marks the order as not available (locked).
  * Inserts the order in the list of orders pending settlement.
  * Locks the required amount of settlement tokens in the subscription book.
  * Emits an `OrderLocked` event, signaling the order has been locked.
* **Example**:

  ```solidity
  dealerLockTokens(0xOrderId, 0xInvestorWallet, 0);
  ```

### **Admin Order Locking** <a href="#investor-repayment" id="investor-repayment"></a>

* **Function**: `adminLockTokens(bytes32 _role, uint256 _orderId, address _investorWallet, uint256 _lockingHint)`
* **Purpose**: Allows admins to to lock in a confirmed order on behalf of an investor, locking the required settlement tokens in the process.
* **Parameters**:
  * `bytes32 _role`: Role the admin possesses in order to access this function.
  * `uint256 _orderId`: The Id of the order.
  * `address _investorWallet`: Wallet belonging to the investor to take settlement tokens from when locking.
  * `_lockingHint`: Hint of a nearby order Id to make locking more efficient. Can be ignored by using `0`.
* **Validation Checks**:
  * Ensures the caller as the role they claim.
  * Ensure the role is allowed to call this function.
  * Ensures the investor is allowed to lock the order for the amount of settlement tokens by the allowlist modules.
  * Makes sure the order is already confirmed and is available.
  * Verifies the result of the `checkAdvisedLockBid()` function for relevant modules in the rules engine.
* **Behavior**:
  * Marks the order as not available (locked).
  * Inserts the order in the list of orders pending settlement.
  * Locks the required amount of settlement tokens in the subscription book.
  * Emits an `OrderLocked` event, signaling the order has been locked.
* **Example**:

  ```solidity
  adminLockTokens(0xAdminRole, 0xOrderId, 0xInvestorWallet, 0);
  ```

## Subscription Cancellation <a href="#general-description" id="general-description"></a>

Investors and dealers can cancel an order if it has not been locked yet. Additionally, admins can cancel orders even if they are locked. After an order is settled, it is not possible to cancel it.

### **Investor Order Cancelling** <a href="#investor-repayment" id="investor-repayment"></a>

* **Function**: `investorCancelOrder(uint256 _orderId)`
* **Purpose**: Allows investors to cancel a confirmed order that has not yet been locked.
* **Parameters**:
  * `uint256 _orderId`: The Id of the order.
* **Validation Checks**:
  * Checks that the caller is the investor that the order belongs to.
  * Makes sure the order is already confirmed and not available.
* **Behavior**:
  * Marks the order as cancelled.
  * The order and its changes/effects are removed
  * Emits an `OrderCancelled` event, signaling the order has been cancelled.
* **Example**:

  ```solidity
  investorCancelOrder(0xOrderId);
  ```

### **Dealer Order Cancelling** <a href="#investor-repayment" id="investor-repayment"></a>

* **Function**: `dealerCancelOrder(uint256 _orderId)`
* **Purpose**: Allows dealers to cancel a confirmed order that has not yet been locked, on behalf of an investor.
* **Parameters**:
  * `uint256 _orderId`: The Id of the order.
* **Validation Checks**:
  * Ensures the caller is the investor's dealer.
  * Makes sure the order is already confirmed and not available.
  * Verifies the result of the `checkAdvisedBidCancellation()` function for relevant modules in the rules engine.
* **Behavior**:
  * Marks the order as cancelled.
  * The order and its changes/effects are removed
  * Emits an `OrderCancelled` event, signaling the order has been cancelled.
* **Example**:

  ```solidity
  dealerCancelOrder(0xOrderId);
  ```

### **Admin Order Cancelling** <a href="#investor-repayment" id="investor-repayment"></a>

* **Function**: `adminCancelOrder(uint256 _orderId, bytes32 _role)`
* **Purpose**: Allows admins to cancel a confirmed order, even if it has been locked, on behalf of an investor.
* **Parameters**:
  * `bytes32 _role`: Role the admin possesses in order to access this function.
  * `uint256 _orderId`: The Id of the order.
* **Validation Checks**:
  * Ensures the caller as the role they claim.
  * Ensure the role is allowed to call this function.
  * Makes sure the order is confirmed or available.
* **Behavior**:
  * Marks the order as cancelled.
  * The order and its changes/effects are removed
  * Emits an `OrderCancelled` event, signaling the order has been cancelled.
* **Example**:

  ```solidity
  adminCancelOrder(0xAdminRole, 0xOrderId);
  ```

## Subscription Settlement <a href="#general-description" id="general-description"></a>

Order that are locked can be settled by an admin. When an order is settled, the settlement tokens are burned, and the corresponding security tokens are minted. Orders are settled in batches.

### **Admin Order Settlement** <a href="#investor-repayment" id="investor-repayment"></a>

* **Function**: `settleOrders(uint256 _lastOrderId, uint256 _percentageToSettle, bytes32 _role)`
* **Purpose**: Allows admins to settle all locked orders until a desired order Id, settling the same percentage of each one.
* **Parameters**:
  * `uint256 _lastOrderId`: The Id of the last order to settle.
  * `uint256 _percentageToSettle`: The percentage of each order that should be settled, expressed in basis points (bps).
  * `bytes32 _role`: Role the admin possesses in order to access this function.
* **Validation Checks**:
  * Ensures the caller as the role they claim.
  * Ensure the role is allowed to call this function.
  * Verifies the percentage to settle is between 0% and 100%.
  * Makes sure all orders to settle are locked.
  * Makes sure none of the orders to be settled have already been settled in the current round.
  * Verifies the result of the `checkSettleBids()` function for relevant modules in the rules engine.
* **Behavior**:
  * Burns the specified percentage of locked settlement tokens for the orders.
  * Issues the corresponding security tokens to the beneficiary addresses in the orders.
  * Emits an `OrderSettled` event for each order, signaling it has been settled.
* **Example**:

  ```solidity
  settleOrders(0xOrderId, 9800, 0xAdminRole);
  ```

## Restrictions <a href="#general-description" id="general-description"></a>

Restrictions are applied at multiple points during the subscription process. The main restrictions for subscriptions can be found in [Rule Modules](/how-kaio-works/smart-contracts/rules/rule-modules#subscription-modules).


# Redemption Book

Book for redemption logic.

## General Description <a href="#general-description" id="general-description"></a>

The Redemption Book contains all the logic for the redemption lifecycle, accepting orders in Security Tokens and settling them in Settlement Tokens. Redemptions follow a lifecycle of order creation, confirmation, locking, and finally settlement. These first three steps can be done by investors (or by dealers/admins on their behalf) aggregately or separately, according to the instrument's configuration. Settlement is done by admins for multiple orders at once, burning security tokens and minting the corresponding settlement tokens to investors, while sending some to the KAIO Treasury as a fee. Certain restrictions on the redemption order lifecycle are enforced by modules applying specific rules and conditions.

## Redemption Creation <a href="#general-description" id="general-description"></a>

Orders are first created by investors or dealers, signaling interest in redeeming the security tokens for an instrument. In order to settle this order, it must additionally be confirmed and locked. This may happen over separate transactions or in a single one, depending on how the given instrument is configured.

### **Investor Order Creation** <a href="#investor-repayment" id="investor-repayment"></a>

* **Function**: `investorCreateOrder(uint256 _amount, uint256 _lockingHint)`
* **Purpose**: Allows investors to create redemption orders, indicating the amount of security tokens they intend to lock.
* **Parameters**:
  * `uint256 _amount`: The amount of security tokens for the order.
  * `_lockingHint`: Hint of a nearby order Id to make locking more efficient. Can be ignored by using `0`.
* **Validation Checks**:
  * Ensures the caller is an investor allowed to perform the order creation for the amount of security tokens by the allowlist modules.
  * Checks that the amount of tokens is not zero.
  * Verifies the result of the `checkCreateRedemption()` function for relevant modules in the rules engine.
* **Behavior**:
  * Creates and stores the initial order values.
  * Emits an `OrderCreated` event, signaling the order has been created.
* **Return Values:**
  * `uint256 orderId`: The Id of the newly created order.
* **Example**:

  ```solidity
  investorCreateOrder(1000, 0);
  ```

### **Dealer Order Creation** <a href="#investor-repayment" id="investor-repayment"></a>

* **Function**: `dealerCreateOrder(uint256 _amount, bytes32 _investorId, address _beneficiary, address _investorWallet, uint256 _lockingHint)`
* **Purpose**: Allows dealers to create redemptions orders on behalf of investors, indicating the amount of security tokens they intend to lock.
* **Parameters**:
  * `uint256 _amount`: The amount of security tokens for the order.
  * `bytes32 _investorId`: The Id of the investor the order is created for.
  * `address _beneficiary`: Address that will receive the security tokens once the order is settled.
  * `address _investorWallet`: Wallet belonging to the investor to take security tokens from when locking.
  * `_lockingHint`: Hint of a nearby order Id to make locking more efficient. Can be ignored by using `0`.
* **Validation Checks**:
  * Ensures the caller is the investor's dealer.
  * Makes sure that the beneficiary is a wallet belonging to the investor.
  * Checks that the amount of tokens is not zero.
  * Ensures the investor is allowed to perform the order creation for the amount of security tokens by the allowlist modules.
  * Verifies the result of the `checkAdvisedCreateRedemption()` function for relevant modules in the rules engine.
* **Behavior**:
  * Creates and stores the initial order values.
  * Emits an `OrderCreated` event, signaling the order has been created.
* **Return Values:**
  * `uint256 orderId`: The Id of the newly created order.
* **Example**:

  ```solidity
  dealerCreateOrder(1000, 0xInvestorId,
      0xBeneficiaryAddress, 0xInvestorWallet, 0);
  ```

## Redemption Confirmation <a href="#general-description" id="general-description"></a>

After orders are created, they can then be confirmed. Investors or dealers attest to carrying out the created order, though at this step it may still be cancelled. In order to settle this order, it must additionally be locked. This may happen over separate transactions or in a single one, depending on how the given instrument is configured.

### **Investor Order Confirmation** <a href="#investor-repayment" id="investor-repayment"></a>

* **Function**: `investorConfirmOrder(uint256 _orderId, uint256 _lockingHint)`
* **Purpose**: Allows investors to confirm an already created redemption order.
* **Parameters**:
  * `uint256 _orderId`: The Id of the order.
  * `_lockingHint`: Hint of a nearby order Id to make locking more efficient. Can be ignored by using `0`.
* **Validation Checks**:
  * Checks that the caller is the investor that the order belongs to.
  * Ensures the investor is allowed to perform the order confirmation for the amount of security tokens by the allowlist modules.
  * Makes sure the order is not already confirmed and is available.
  * Verifies the result of the `checkRedemptionConfirmation()` function for relevant modules in the rules engine.
* **Behavior**:
  * Marks the order as confirmed.
  * Registers the investor's participation in the redemption process
  * Emits an `OrderConfirmed` event, signaling the order has been confirmed.
* **Example**:

  ```solidity
  investorConfirmOrder(0xOrderId, 0);
  ```

### **Dealer Order Confirmation** <a href="#investor-repayment" id="investor-repayment"></a>

* **Function**: `dealerConfirmOrder(uint256 _orderId, address _investorWallet, uint256 _lockingHint)`
* **Purpose**: Allows dealers to confirm an already created redemption order on behalf of an investor.
* **Parameters**:
  * `uint256 _orderId`: The Id of the order.
  * `address _investorWallet`: Wallet belonging to the investor to take security tokens from when locking.
  * `_lockingHint`: Hint of a nearby order Id to make locking more efficient. Can be ignored by using `0`.
* **Validation Checks**:
  * Ensures the caller is the investor's dealer.
  * Ensures the investor is allowed to perform the order confirmation for the amount of security tokens by the allowlist modules.
  * Makes sure the order is not already confirmed and is available.
  * Verifies the result of the `checkAdvisedRedemptionConfirmation()` function for relevant modules in the rules engine.
* **Behavior**:
  * Marks the order as confirmed.
  * Registers the investor's participation in the redemption process
  * Emits an `OrderConfirmed` event, signaling the order has been confirmed.
* **Example**:

  ```solidity
  dealerConfirmOrder(0xOrderId, 0xInvestorWallet, 0);
  ```

## Redemption Locking <a href="#general-description" id="general-description"></a>

Investors, dealers, or admins can lock orders after they have been confirmed. For an order to be locked, the required security tokens are transferred into the redemption book. Once the order is locked, it is ready to be settled, and sent into the settlement queue.

### **Investor Order Locking** <a href="#investor-repayment" id="investor-repayment"></a>

* **Function**: `investorLockTokens(uint256 _orderId, uint256 _lockingHint)`
* **Purpose**: Allows investors to lock in a confirmed order, locking the required security tokens in the process.
* **Parameters**:
  * `uint256 _orderId`: The Id of the order.
  * `_lockingHint`: Hint of a nearby order Id to make locking more efficient. Can be ignored by using `0`.
* **Validation Checks**:
  * Checks that the caller is the investor that the order belongs to.
  * Ensures the investor is allowed to lock the order for the amount of security tokens by the allowlist modules.
  * Makes sure the order is already confirmed and is available.
  * Verifies the result of the `checkLockRedemption()` function for relevant modules in the rules engine.
* **Behavior**:
  * Marks the order as not available (locked).
  * Inserts the order in the list of orders pending settlement.
  * Locks the required amount of security tokens in the redemption book.
  * Emits an `OrderLocked` event, signaling the order has been locked.
* **Example**:

  ```solidity
  investorLockTokens(0xOrderId, 0);
  ```

### **Dealer Order Locking** <a href="#investor-repayment" id="investor-repayment"></a>

* **Function**: `dealerLockTokens(uint256 _orderId, address _investorWallet, uint256 _lockingHint)`
* **Purpose**: Allows dealers to to lock in a confirmed order on behalf of an investor, locking the required security tokens in the process.
* **Parameters**:
  * `uint256 _orderId`: The Id of the order.
  * `address _investorWallet`: Wallet belonging to the investor to take security tokens from when locking.
  * `_lockingHint`: Hint of a nearby order Id to make locking more efficient. Can be ignored by using `0`.
* **Validation Checks**:
  * Ensures the caller is the investor's dealer.
  * Ensures the investor is allowed to lock the order for the amount of security tokens by the allowlist modules.
  * Makes sure the order is already confirmed and is available.
  * Verifies the result of the `checkAdvisedLockRedemption()` function for relevant modules in the rules engine.
* **Behavior**:
  * Marks the order as not available (locked).
  * Inserts the order in the list of orders pending settlement.
  * Locks the required amount of security tokens in the redemption book.
  * Emits an `OrderLocked` event, signaling the order has been locked.
* **Example**:

  ```solidity
  dealerLockTokens(0xOrderId, 0xInvestorWallet, 0);
  ```

### **Admin Order Locking** <a href="#investor-repayment" id="investor-repayment"></a>

* **Function**: `adminLockTokens(bytes32 _role, uint256 _orderId, address _investorWallet, uint256 _lockingHint)`
* **Purpose**: Allows admins to to lock in a confirmed order on behalf of an investor, locking the required security tokens in the process.
* **Parameters**:
  * `bytes32 _role`: Role the admin possesses in order to access this function.
  * `uint256 _orderId`: The Id of the order.
  * `address _investorWallet`: Wallet belonging to the investor to take security tokens from when locking.
  * `_lockingHint`: Hint of a nearby order Id to make locking more efficient. Can be ignored by using `0`.
* **Validation Checks**:
  * Ensures the caller as the role they claim.
  * Ensure the role is allowed to call this function.
  * Ensures the investor is allowed to lock the order for the amount of settlement tokens by the allowlist modules.
  * Makes sure the order is already confirmed and is available.
  * Verifies the result of the `checkAdvisedLockRedemption()` function for relevant modules in the rules engine.
* **Behavior**:
  * Marks the order as not available (locked).
  * Inserts the order in the list of orders pending settlement.
  * Locks the required amount of security tokens in the redemption book.
  * Emits an `OrderLocked` event, signaling the order has been locked.
* **Example**:

  ```solidity
  adminLockTokens(0xAdminRole, 0xOrderId, 0xInvestorWallet, 0);
  ```

## Redemption Cancellation <a href="#general-description" id="general-description"></a>

Investors and dealers can cancel an order if it has not been locked yet. Additionally, admins can cancel orders even if they are locked. After an order is settled, it is not possible to cancel it.

### **Investor Order Cancelling** <a href="#investor-repayment" id="investor-repayment"></a>

* **Function**: `investorCancelOrder(uint256 _orderId)`
* **Purpose**: Allows investors to cancel a confirmed order that has not yet been locked.
* **Parameters**:
  * `uint256 _orderId`: The Id of the order.
* **Validation Checks**:
  * Checks that the caller is the investor that the order belongs to.
  * Makes sure the order is already confirmed and not available.
* **Behavior**:
  * Marks the order as cancelled.
  * The order and its changes/effects are removed
  * Emits an `OrderCancelled` event, signaling the order has been cancelled.
* **Example**:

  ```solidity
  investorCancelOrder(0xOrderId);
  ```

### **Dealer Order Cancelling** <a href="#investor-repayment" id="investor-repayment"></a>

* **Function**: `dealerCancelOrder(uint256 _orderId)`
* **Purpose**: Allows dealers to cancel a confirmed order that has not yet been locked, on behalf of an investor.
* **Parameters**:
  * `uint256 _orderId`: The Id of the order.
* **Validation Checks**:
  * Ensures the caller is the investor's dealer.
  * Makes sure the order is already confirmed and not available.
  * Verifies the result of the `checkAdvisedRedemptionCancellation()` function for relevant modules in the rules engine.
* **Behavior**:
  * Marks the order as cancelled.
  * The order and its changes/effects are removed
  * Emits an `OrderCancelled` event, signaling the order has been cancelled.
* **Example**:

  ```solidity
  dealerCancelOrder(0xOrderId);
  ```

### **Admin Order Cancelling** <a href="#investor-repayment" id="investor-repayment"></a>

* **Function**: `adminCancelOrder(uint256 _orderId, bytes32 _role)`
* **Purpose**: Allows admins to cancel a confirmed order, even if it has been locked, on behalf of an investor.
* **Parameters**:
  * `bytes32 _role`: Role the admin possesses in order to access this function.
  * `uint256 _orderId`: The Id of the order.
* **Validation Checks**:
  * Ensures the caller as the role they claim.
  * Ensure the role is allowed to call this function.
  * Makes sure the order is confirmed or available.
* **Behavior**:
  * Marks the order as cancelled.
  * The order and its changes/effects are removed
  * Emits an `OrderCancelled` event, signaling the order has been cancelled.
* **Example**:

  ```solidity
  adminCancelOrder(0xAdminRole, 0xOrderId);
  ```

## Redemption Settlement <a href="#general-description" id="general-description"></a>

Order that are locked can be settled by an admin. When an order is settled, the settlement tokens are burned, and the corresponding settlement tokens are minted. Orders are settled in batches. After an order has been partially settled, it can be rebalanced to complete the settlement. It is also possible for admins to carry out forced redemptions under certain circumstances, such as investor's holdings dropping below the minimum balance.

### **Admin Order Settlement** <a href="#investor-repayment" id="investor-repayment"></a>

* **Function**: `settleOrders(uint256 _lastOrderId, uint256 _percentageToSettle, bytes32 _role)`
* **Purpose**: Allows admins to settle all locked orders until a desired order Id, settling the same percentage of each one. The un-audited NAV is used, but partially settled orders can then be rebalanced.
* **Parameters**:
  * `uint256 _lastOrderId`: The Id of the last order to settle.
  * `uint256 _percentageToSettle`: The percentage of each order that should be settled, expressed in basis points (bps).
  * `bytes32 _role`: Role the admin possesses in order to access this function.
* **Validation Checks**:
  * Ensures the caller as the role they claim.
  * Ensure the role is allowed to call this function.
  * Verifies the percentage to settle is between 0% and 100%.
  * Makes sure all orders to settle are locked.
  * Makes sure none of the orders to be settled have already been settled in the current round.
  * Verifies the result of the `checkSettleRedemptions()` function for relevant modules in the rules engine.
* **Behavior**:
  * Burns the specified percentage of locked security tokens for the orders. Of that percentage, if the `GATE_CRITERIA_3` is set to something different than 0, that percentage is settled proportionally per investor, leaving the rest for rebalancing.
  * Calculates the required fee to take from the settlement of each order.
  * Issues the corresponding settlement tokens (minus fee) to the beneficiary addresses in the orders.
  * Issues the fee to the KAIO Treasury in the form of settlement tokens.
  * Emits an `OrderSettled` event for each order, signaling it has been settled.
* **Example**:

  ```solidity
  settleOrders(0xOrderId, 9800, 0xAdminRole);
  ```

### **Admin Forced Order Settlement** <a href="#investor-repayment" id="investor-repayment"></a>

* **Function**: `adminForceRedemption(bytes32 _investorId, bytes32 _role, uint256 _lockingHint)`
* **Purpose**: Allows admins to force a redemption for a given investor, in the case they are breaking some rule.
* **Parameters**:
  * `bytes32 _investorId`: The Id of the investor.
  * `bytes32 _role`: Role the admin possesses in order to access this function.
  * `_lockingHint`: Hint of a nearby order Id to make locking more efficient. Can be ignored by using `0`.
* **Validation Checks**:
  * Ensures the caller as the role they claim.
  * Ensure the role is allowed to call this function.
  * Checks that the amount of tokens is not zero.
  * Makes sure all orders to settle are locked.
  * Makes sure none of the orders to be settled have already been settled in the current round.
  * Verifies the result of the `checkForcedRedemption()` function for relevant modules in the rules engine.
  * Verifies the result of the `checkRedemptionConfirmation()` function for relevant modules in the rules engine.
* **Behavior**:
  * Forces the redemption of the investor's security tokens, combining all steps and doing an instant settlement.
  * Burns the locked security tokens of the investor.
  * Calculates the required fee to take from the settlement.
  * Issues the corresponding settlement tokens (minus fee) to the beneficiary addresses in the orders.
  * Issues the fee to the KAIO Treasury in the form of settlement tokens.
  * Emits an `OrderSettled` event , signaling the order has been settled.
* **Example**:

  ```solidity
  adminForceRedemption(0xInvestorId, 0xAdminRole, 0);
  ```

### **Admin Order Rebalancing** <a href="#investor-repayment" id="investor-repayment"></a>

* **Function**: `rebalanceSettlements(uint256 _lastOrderToRebalance, bytes32 _role)`
* **Purpose**: Rebalances previously partially settled orders to complete the settlement, using the audited NAV.
* **Parameters**:
  * `uint256 _lastOrderToRebalance`: The Id of the last order to rebalance.
  * `bytes32 _role`: Role the admin possesses in order to access this function.
* **Validation Checks**:
  * Ensures the caller as the role they claim.
  * Ensure the role is allowed to call this function.
  * Makes sure all orders to rebalance are locked.
* **Behavior**:
  * Burns the remaining locked security tokens for the orders.
  * Calculates the required fee to take from the settlement of each order.
  * Issues the corresponding settlement tokens to the beneficiary addresses in the orders.
  * Issues the corresponding settlement tokens the KAIO Treasury.
  * Emits an `OrderRebalanced` event for each order, signaling it has been settled.
* **Example**:

  ```solidity
  rebalanceSettlements(0xOrderId, 0xAdminRole);
  ```

## Restrictions <a href="#general-description" id="general-description"></a>

Restrictions are applied at multiple points during the redemption process. The main restrictions for redemptions can be found in [Rule Modules](/how-kaio-works/smart-contracts/rules/rule-modules#redemption-modules).

## Fees <a href="#general-description" id="general-description"></a>

Fees are calculated and deducted during the redemption settlement. Detailed explanations of the fees can be found in [Fees](/how-kaio-works/smart-contracts/order-books/fees).


# Fees

KAIO Fees.

## Overview

KAIO is built to enable a diverse set of configurable fees that are applicable at redemption settlement. In this page the different fees the protocol has are explained, but it must be highlighted that not all fees are active for all instruments, and the applicable fees depend on the configuration of the given instrument. Fees are expressed in basis points (bps), as a percentage of an amount, and are paid for in Settlement Tokens. They are calculated separately in the <mark style="color:red;">`FeeDeduction.sol`</mark> library, and then added together for the final overall fee.

## Cumulative Redemption

The fees in this category revolve around the amount of security tokens redeemed cumulatively during a period.

### Cumulative Redemption Fee

#### Parameters

* `CUMULATIVE_REDEMPTION_LIMIT_FEE` : Fee percentage applied to amounts over the limit, expressed in basis points.
* `REDEMPTION_LOOKBACK_PERIOD` : Period of time the lookback is done on, expressed in `REDEMPTION_LOOKBACK_PERIOD_UNIT`.
* `CUMULATIVE_REDEMPTION_LIMIT_ALLOWANCE` : Threshold on cumulative redemptions per each investor, the fee is only paid on amounts exceeding it. Expressed as a percent of maximum aggregated holdings, in basis points (bps).

#### Explanation

There is an allowance on the amount of redemptions that can be settled cumulatively per each investor, in a given instrument's period. If an investor tries to settled an amount exceeding this allowance, they will be charged a fee on the exceeding amount. The allowance is calculated as a percentage of the maximum aggregated holdings, i.e., the maximum sum of all security token balances of all investors within the redemption lookback period.

#### Formula

*<mark style="color:blue;">fee = feePercentage \* (redemptionAmount - (maxAggregatedHoldings \* allowancePercentage))</mark>*

#### Example

<details>

<summary>Worked Example</summary>

*maxAggregatedHoldings = 500,000*

*allowancePercentage = 10%*

*redemptionAmount = 60,000*

*feePercentage = 5%*

*<mark style="color:blue;">fee = 0.05 \* (60,000- (500,000 \* 0.1))</mark>*

*<mark style="color:blue;">fee = 0.05 \* (60,000 - 50,000)</mark>*

*<mark style="color:blue;">fee = 0.05 \* 10,000</mark>*

*<mark style="color:blue;">fee = 500</mark>*

</details>

In this example, the maximum aggregated amount of tokens held in the lookback is 500,000, and since the allowance is 10%, the final allowed amount is 50,000. Since the investor is having an order worth 60,000 tokens settled, it exceeds the allowed amount by 10,000, so the fee will be paid on this exceeding amount. The fee percentage is 5%, so the final fee to pay will be of 500 tokens.

### Cumulative Redemption Per Investor Fee

#### Parameters

* `CUMULATIVE_REDEMPTION_LIMIT_PER_INVESTOR_FEE` : Fee percentage applied to amounts over the allowance, expressed in basis points.
* `CUMULATIVE_REDEMPTION_PERIOD` : Period of time the lookback is done on, expressed in `CUMULATIVE_REDEMPTION_PERIOD_UNIT.`
* `CUMULATIVE_REDEMPTION_LIMIT_PER_INVESTOR_ALLOWANCE` : Threshold on cumulative redemptions per each investor, the fee is only paid on amounts exceeding it. Expressed as a percent of maximum investor holdings, in basis points (bps).

#### Explanation

There is an allowance on the amount of redemptions that can be settled cumulatively per each investor, in a given instrument's period. If an investor tries to settled an amount exceeding this allowance, they will be charged a fee on the exceeding amount. The allowance is calculated as a percentage of the maximum holdings of that investor, i.e., the maximum security token balance held by the investor within the cumulative redemption period.

#### Formula

*<mark style="color:blue;">fee = feePercentage \* (redemptionAmount - (maxInvestorHoldings \* allowancePercentage))</mark>*

#### Example

<details>

<summary>Worked Example</summary>

*maxInvestorHoldings = 100,000*

*allowancePercentage = 3%*

*redemptionAmount = 12,000*

*feePercentage = 10%*

*<mark style="color:blue;">fee = 0.1 \* (12,000- (100,000 \* 0.03))</mark>*

*<mark style="color:blue;">fee = 0.1 \* (12,000 - 3,000)</mark>*

*<mark style="color:blue;">fee = 0.1 \* 9,000</mark>*

*<mark style="color:blue;">fee = 900</mark>*

</details>

In this example, the maximum amount of tokens held by the investor in the cumulative redemption period is 100,000, and since the allowance is 3%, the final allowed amount is 3,000. Since the investor is having an order worth 12,000 tokens settled, it exceeds the allowed amount by 9,000, so the fee will be paid on this exceeding amount. The fee percentage is 10%, so the final fee to pay will be of 900 tokens.

## Initial Restricted Period

The fees in this category revolve around an initial restricted period. During this period, a particular fee amount is applied, while after it the amount may be reduced or absent.

### Initial Redemption Restricted Period Fee

#### Parameters

* `INITIAL_REDEMPTION_RESTRICTED_PERIOD` : Date until which the restricted period lasts, expressed in a seconds timestamp.
* `INITIAL_REDEMPTION_RESTRICTED_PERIOD_ALLOWANCE` : Threshold on redemptions during the restricted period, the fee is only paid on amounts exceeding it. Expressed as a percent of maximum aggregated holdings, in basis points (bps).
* `INITIAL_REDEMPTION_RESTRICTED_PERIOD_FEE` : Fee percentage applied to amounts over the allowance during the restricted period, expressed in basis points.
* `POST_REDEMPTION_RESTRICTED_PERIOD_ALLOWANCE` : Threshold on redemptions after the restricted period ends, the fee is only paid on amounts exceeding it. Expressed as a percent of maximum aggregated holdings, in basis points (bps).
* `POST_REDEMPTION_RESTRICTED_PERIOD_FEE` : Fee percentage applied to amounts over the allowance after the restricted period ends, expressed in basis points.

#### Explanation

There is an allowance on the amount of redemptions that can be settled before the initial redemption restricted period ends (a set date after the instrument launch). If an investor tries to settled an amount exceeding this allowance, they will be charged a fee on the exceeding amount. The allowance is calculated as a percentage of the maximum aggregated holdings of all investors since the start of the instrument's period. In a similar way, a different fee percentage can be charged for amounts redeemed after the initial redemption restricted period, on amounts exceeding the post redemption restricted period allowance. This allowance is also calculated as a percentage of the maximum aggregated holdings of all investors since the start of the instrument's period.

#### Formulas

*<mark style="color:blue;">fee = preFeePercentage \* (redemptionAmount - (maxAggregatedHoldings \* preAllowancePercentage))</mark>*

*<mark style="color:blue;">fee = postFeePercentage \* (redemptionAmount - (maxAggregatedHoldings \* postAllowancePercentage))</mark>*

#### Examples

<details>

<summary>Worked Example 1</summary>

*maxAggregatedHoldings = 700,000*

*preAllowancePercentage = 5%*

*redemptionAmount = 45,000*

*preFeePercentage = 7%*

*<mark style="color:blue;">fee = 0.07 \* (45,000- (700,000 \* 0.05))</mark>*

*<mark style="color:blue;">fee = 0.07 \* (45,000 - 35,000)</mark>*

*<mark style="color:blue;">fee = 0.07 \* 10,000</mark>*

*<mark style="color:blue;">fee = 700</mark>*

</details>

In this first example, the initial restricted period has not finished, so the "pre" fee and allowance are used. The maximum aggregated amount of tokens held in the lookback is 700,000, and since the allowance is 5%, the final allowed amount is 35,000. Since the investor is having an order worth 45,000 tokens settled, it exceeds the allowed amount by 10,000, so the fee will be paid on this exceeding amount. The fee percentage is 7%, so the final fee to pay will be of 700 tokens.

<details>

<summary>Worked Example 2</summary>

*maxAggregatedHoldings = 1,100,000*

*postAllowancePercentage = 20%*

*redemptionAmount = 300,000*

*postFeePercentage = 0.1%*

*<mark style="color:blue;">fee = 0.001 \* (300,000- (1,100,000 \* 0.2))</mark>*

*<mark style="color:blue;">fee = 0.001 \* (300,000 - 220,000)</mark>*

*<mark style="color:blue;">fee = 0.001 \* 80,000</mark>*

*<mark style="color:blue;">fee = 80</mark>*

</details>

In this second example, the initial restricted period has ended, so the "post" fee and allowance are used. The maximum aggregated amount of tokens held in the lookback is 1,100,000, and since the allowance is 20%, the final allowed amount is 220,000. Since the investor is having an order worth 300,000 tokens settled, it exceeds the allowed amount by 80,000, so the fee will be paid on this exceeding amount. The fee percentage is 0.1%, so the final fee to pay will be of 80 tokens.

### Initial Subscription Restricted Period Fee

#### Parameters

* `INITIAL_SUBSCRIPTION_RESTRICTED_PERIOD` : Duration of the restricted period, expressed in `INITIAL_SUBSCRIPTION_RESTRICTED_PERIOD_UNIT`.
* `INITIAL_SUBSCRIPTION_RESTRICTED_PERIOD_ALLOWANCE` : Threshold on redemptions per each investor during the restricted period, the fee is only paid on amounts exceeding it. Expressed as a token amount.
* `INITIAL_SUBSCRIPTION_RESTRICTED_PERIOD_FEE` : Fee percentage applied to amounts over the allowance during the restricted period, expressed in basis points.
* `POST_SUBSCRIPTION_RESTRICTED_PERIOD_ALLOWANCE` : Threshold on redemptions per each investor after the restricted period ends, the fee is only paid on amounts exceeding it. Expressed as a token amount.
* `POST_SUBSCRIPTION_RESTRICTED_PERIOD_FEE` : Fee percentage applied to amounts over the allowance after the restricted period ends, expressed in basis points.

#### Explanation

There is an allowance on the amount of redemptions that can be settled before the initial subscription restricted period ends. This period starts whenever an investor completes their first subscription, and will reset for future redemptions if their security token balances returns to 0. If an investor tries to settled an amount exceeding this allowance, they will be charged a fee on the exceeding amount. The allowance is given as a set token value. In a similar way, a different fee percentage can be charged for amounts redeemed after the initial subscription restricted period, on amounts exceeding the post subscription restricted period allowance. This allowance is also given as a set token value.

#### Formulas

*<mark style="color:blue;">fee = preFeePercentage \* (redemptionAmount - preAllowance)</mark>*

*<mark style="color:blue;">fee = postFeePercentage \* (redemptionAmount - postAllowance)</mark>*

#### Examples

<details>

<summary>Worked Example 1</summary>

*preAllowance = 5,000*

*redemptionAmount = 7,500*

*preFeePercentage = 25%*

*<mark style="color:blue;">fee = 0.25 \* (7,500 - 5,000)</mark>*

*<mark style="color:blue;">fee = 0.25 \* 2,500</mark>*

*<mark style="color:blue;">fee = 625</mark>*

</details>

In this first example, the initial subscription restricted period has not finished for the investor, so the "pre" fee and allowance are used. The allowed amount is 5,000, and since the investor is having an order worth 7,500 tokens settled, it exceeds the allowed amount by 2,500, so the fee will be paid on this exceeding amount. The fee percentage is 25%, so the final fee to pay will be of 625 tokens.

<details>

<summary>Worked Example 2</summary>

*postAllowance = 5,000*

*redemptionAmount = 5,133*

*postFeePercentage = 0%*

*<mark style="color:blue;">fee = 0 \* (5,133 - 5,000)</mark>*

*<mark style="color:blue;">fee = 0 \* 133</mark>*

*<mark style="color:blue;">fee = 0</mark>*

</details>

In this second example, the initial subscription restricted period has already ended for the investor, so the "post" fee and allowance are used. The allowed amount is 5,000, and since the investor is having an order worth 5,133 tokens settled, it exceeds the allowed amount by 133, so the fee will be paid on this exceeding amount. The fee percentage is 0%, so the final fee to pay will be of 0 tokens, meaning no fee is paid.

## Redemption Volume

The fees in this category revolve around the amount of security tokens redeemed in relation to the volume of tokens previously held.

### Redemption Volume Per Investor Fee

#### Parameters

* `REDEMPTION_VOLUME_LIMIT_PER_INVESTOR_FEE` : Fee percentage applied to amounts over the limit, expressed in basis points.
* `REDEMPTION_VOLUME_LIMIT_PER_INVESTOR` : Threshold on redemptions for the percentage of the maximum volume of tokens held, the fee is only paid on amounts exceeding it. Expressed in basis points (bps).
* `REDEMPTION_LOOKBACK_PERIOD` : Period of time the lookback is done on, expressed in `REDEMPTION_LOOKBACK_PERIOD_UNIT`.

#### Explanation

There is a limit on the amount of redemptions that can be settled cumulatively per each investor, in a given instrument's period. If an investor tries to settled an amount exceeding this limit, they will be charged a fee on the exceeding amount. The limit is calculated as a percentage of the maximum volume of holdings of that investor, i.e., the maximum security token balance held by the investor within the redemption lookback period.

#### Formula

*<mark style="color:blue;">fee = feePercentage \* (redemptionAmount - (maxInvestorVolume \* allowancePercentage))</mark>*

#### Example

<details>

<summary>Worked Example</summary>

*maxInvestorVolume = 13,000*

*allowancePercentage = 10%*

*redemptionAmount = 1,900*

*feePercentage = 7.5%*

*<mark style="color:blue;">fee = 0.075 \* (1,900- (13,000 \* 0.1))</mark>*

*<mark style="color:blue;">fee = 0.075 \* (1,900 - 1,300)</mark>*

*<mark style="color:blue;">fee = 0.075 \* 600</mark>*

*<mark style="color:blue;">fee = 45</mark>*

</details>

In this example, the maximum volume of tokens held by the investor in the redemption lookback period is 13,000, and since the allowance is 10%, the final allowed amount is 1,300. Since the investor is having an order worth 1,900 tokens settled, it exceeds the allowed amount by 600, so the fee will be paid on this exceeding amount. The fee percentage is 7.5%, so the final fee to pay will be of 45 tokens.


# Tokens

{% content-ref url="/pages/u7cyvOs1TUdRk9kw32ab" %}
[Settlement Token](/how-kaio-works/smart-contracts/tokens/settlement-token)
{% endcontent-ref %}

{% content-ref url="/pages/AWwSlCiNjEm1H2mvzay1" %}
[Security Token](/how-kaio-works/smart-contracts/tokens/security-token)
{% endcontent-ref %}


# Settlement Token

Token used for settlement in the KAIO ecosystem.

{% hint style="info" %}
While the role of the settlement token within the KAIO ecosystem is well defined, some of the logic around minting, burning, and transferring, or when these are carried out, might change. This is due to future improvements planned in order to improve user experience, and compatibility with upcoming KAIO products.
{% endhint %}

## General Description

The settlement token, as its name describes, is used for settling transactions within KAIO. It's value is equivalent to $1 USD, since each token represents one US dollar held by KAIO. In order to keep accounting clear and accurate, settlement tokens are burned and minted when KAIO performs actions such as subscribing or redeeming from the funds it tokenizes. While the main purpose of this token is to facilitate creating subscription orders, and receiving settlements from redemption orders for investors, it can also be transferred between users, and used in the secondary market.

## Token Details

The settlement token follows the [ERC-20](https://eips.ethereum.org/EIPS/eip-20) standard, implementing its interface. It's details are as follows:

| **Name**     | *Settlement Token* |
| ------------ | ------------------ |
| **Symbol**   | *SET*              |
| **Decimals** | 6                  |

The settlement token has 6 decimals, meaning 0.000001 is it's lowest denomination. Its name and symbol are changeable by an admin. Additionally, it also extends the core ERC-20 functionality with custom logic, particularly around what kinds of users are allowed to send and receive tokens.

## Transfers

Transfers are performed to update the balances of users. As described in the ERC-20 specification, this can be done directly by the sender, or by a third party that has been approved to do so.

### Transfer

* **Function**: `transfer(address to, uint256 amount)`
* **Purpose**: Allows a user to transfer tokens from their address balance to another address.
* **Parameters**:
  * `address to`: Address of the recipient.
  * `uint256 amount`: The amount of settlement tokens to transfer.
* **Validation Checks**:
  * Ensures the recipient is not the zero address.
  * Makes sure that the sender has a balance larger than the amount to be transferred.
  * Sender must be an investor, dealer, or have the role of the KAIO Admin.
* **Behavior**:
  * Updates the balances of both addresses with the new amount of tokens for each.
  * Emits a `Transfer` event, signaling the transfer has occurred.
* **Return Values:**
  * `bool`: Signals if the transfer has been completed successfully.
* **Example**:

  ```solidity
  transfer(0xRecepientAddress, 100);
  ```

### Third Party Approval

* **Function**: `approve(address spender, uint256 amount)`
* **Purpose**: Allows a user to approve an address for a certain amount of tokens. The address can then transfer up to that amount of the investor's tokens.
* **Parameters**:
  * `address spender`: Address being allowed to spend the users tokens.
  * `uint256 amount`: The amount of settlement tokens allowed.
* **Validation Checks**:
  * Ensures the spender is not the zero address.
* **Behavior**:
  * Updates the spender's approval amount for the user's tokens.
  * Emits an `Approval` event, signaling the approval has occurred.
* **Return Values:**
  * `bool`: Signals if the approval has been completed successfully.
* **Example**:

  ```solidity
  approve(0xSpenderAddress, 500);
  ```

### Third Party Admin Approval

* **Function**: `approve(address _from, address _to, uint256 _allowance, bytes32 _role)`
* **Purpose**: Allows an admin with the correct role to approve an amount of settlement tokens from an address to be spent by a specified address.
* **Parameters**:
  * `address _from` : Address the tokens are allowed from.
  * `address _to`: Address being allowed to spend the users tokens.
  * `uint256 _allowance`: The amount of settlement tokens allowed.
  * `bytes32 _role`: Admin role needed to call the function.
* **Validation Checks**:
  * Checks the user has the proper admin role.
  * Ensures the spender is not the zero address.
* **Behavior**:
  * Updates the spender's approval amount for the user's tokens.
  * Emits an `Approval` event, signaling the approval has occurred.
* **Example**:

  ```solidity
  approve(0xInvestorAddress, 0xFundAdminAddress, 500, 0xLibreAdminRole);
  ```

### Third Party Transfer

* **Function**: `transferFrom(address from, address to, uint256 amount)`
* **Purpose**: Allows a third party to transfer tokens from one address to another, using their previous allowance.
* **Parameters**:
  * `address from`: Address the tokens are transferred from.
  * `address to`: Address of the recipient.
  * `uint256 amount`: The amount of settlement tokens to transfer.
* **Validation Checks**:
  * Ensures both addresses are not the zero address.
  * Makes sure that the address transferring from has a balance larger than the amount to be transferred.
  * Checks that the caller has an allowance for the transferring address larger than the amount to be transferred.
  * Sender must be an investor, dealer, or have the role of the KAIO Admin.
* **Behavior**:
  * Updates the balances of both addresses with the new amount of tokens for each.
  * Emits a `Transfer` event, signaling the transfer has occurred.
* **Return Values:**
  * `bool`: Signals if the transfer has been completed successfully.
* **Example**:

  ```solidity
  transferFrom(0xTokenHolderAddress, 0xRecepientAddress, 370);
  ```

## Supply Increase & Reduction

Minting and burning tokens are the ways in which the total supply of settlement tokens changes. They are used to keep the accounting accurate to the USD balance held by KAIO.

### Minting

* **Function**: `mint(address _account, uint256 _amount, bytes32 _role)`
* **Purpose**: Allows a user or contract with the appropriate role to mint new settlement tokens to an address. Primarily used by admins to reflect fiat inflows via bank transfer, or by the redemption book to reflect redemption settlements.
* **Parameters**:
  * `address _account`: Address to mint the tokens to.
  * `uint256 _amount`: The amount of settlement tokens to mint.
  * `bytes32 _role`: Role of the caller.
* **Validation Checks**:
  * Checks the caller has the proper admin role.
  * Ensures the recipient is not the zero address.
* **Behavior**:
  * Updates the balance of the recipient address with the new amount of tokens.
  * Emits a `Transfer` event from the 0 address, signaling the mint has occurred.
* **Example**:

  ```solidity
  mint(0xRecepientAddress, 26, 0xAdminRole);
  ```

### Burning

* **Function**: `burn(address _account, uint256 _amount, bytes32 _role)`
* **Purpose**: Allows a user or contract with the appropriate role to burn settlement tokens from an address. Primarily used by admins to reflect fiat outflows via bank transfer, or by the subscription book to reflect subscription settlements.
* **Parameters**:
  * `address _account`: Address to burn the tokens from.
  * `uint256 _amount`: The amount of settlement tokens to burn.
  * `bytes32 _role`: Role of the caller.
* **Validation Checks**:
  * Checks the caller has the proper admin role.
  * Ensures the address to burn the tokens from is not the zero address.
* **Behavior**:
  * Updates the balance of the address from which tokens were burned with the new amount of tokens.
  * Emits a `Transfer` event to the 0 address, signaling the burn has occurred.
* **Example**:

  ```solidity
  burn(0xBurneeAddress, 24, 0xAdminRole);
  ```

### Burning Balance

* **Function**: `burnAll(address _account, bytes32 _role)`
* **Purpose**: Allows a user or contract with the appropriate role to burn all the settlement tokens from an address.
* **Parameters**:
  * `address _account`: Address to burn the tokens from.
  * `bytes32 _role`: Role of the caller.
* **Validation Checks**:
  * Checks the caller has the proper admin role.
  * Verifies the address to burn the tokens from has enough tokens to be burned.
  * Ensures the address to burn the tokens from is not the zero address.
* **Behavior**:
  * Updates the balance of the address from which tokens were burned with a zero amount.
  * Emits a `Transfer` event to the 0 address, signaling the burn has occurred.
* **Example**:

  ```solidity
  burnAll(0xBurneeAddress, 0xAdminRole);
  ```

## Configuration

The settlement token can be configured to change it's behavior or qualities, such as with modifying the name and symbol.

### Change Metadata

* **Function**: `changeNameAndSymbol(string calldata _name, string calldata _symbol, bytes32 _role)`
* **Purpose**: Allows an admin to change the name and symbol of the settlement token from the default *Settlement Token* and *SET*.
* **Parameters**:
  * `string _name`: New token name.
  * `string _symbol`: New token symbol.
  * `bytes32 _role`: Role of the caller.
* **Validation Checks**:
  * Checks the caller has the proper admin role.
* **Behavior**:
  * Changes the token name.
  * Changes the token symbol.
  * Emits a `NameAndSymbolChanged` event, signaling the name and symbol have been changed.
* **Example**:

  ```solidity
  changeNameAndSymbol("Settlement Token v2", "SET2");
  ```


# Security Token

Token representing tokenized shares.

## General Description

The security token represents the shares of a tokenized fund, and is associated to the instrument tokenizing this fund. Unlike the single settlement token, multiple security tokens exist, one for each instrument. The prices of these tokens are dependent on the NAVs of the underlying funds. Investors can subscribe to an instrument using settlement tokens in order to obtain the security tokens associated with that instrument. In a similar way, they can later redeem from an instrument using their security tokens, exchanging them for settlement tokens.

## Token Details

Security tokens follow the [ERC-20](https://eips.ethereum.org/EIPS/eip-20) standard, implementing its interface. Their details are as follows:

| **Name**     | *(varies by instrument)* |
| ------------ | ------------------------ |
| **Symbol**   | *(varies by instrument)* |
| **Decimals** | 18                       |

Security tokens have 18 decimals, meaning 0.000000000000000001 is their lowest denomination. Their name and symbol are configured when their associated instrument is created, but they are also changeable by an admin. Additionally, they also extends the core ERC-20 functionality with heavy custom logic, particularly around what kinds of users are allowed to send and receive tokens.

## Transfers

Transfers are performed to update the balances of users. As described in the ERC-20 specification, this can be done directly by the sender, or by a third party that has been approved to do so.

### Transfer

* **Function**: `transfer(address to, uint256 amount)`
* **Purpose**: Allows a user to transfer tokens from their address balance to another address.
* **Parameters**:
  * `address to`: Address of the recipient.
  * `uint256 amount`: The amount of security tokens to transfer.
* **Validation Checks**:
  * Ensures the recipient is not the zero address.
  * Makes sure that the sender has a balance larger than the amount to be transferred.
  * Checks the amount transferred is more than zero.
  * Uses the rules engine to check the sender and recipient against the relevant modules in the [Rule Modules](/how-kaio-works/smart-contracts/rules/rule-modules).
  * Checks the sender and recipient against the [Rule Modules](/how-kaio-works/smart-contracts/rules/rule-modules#allowlist-modules).
* **Behavior**:
  * Updates the balances of both addresses with the new amount of tokens for each.
  * Updates values around latest operations, holder counts, and investor balances.
  * Emits a `Transfer` event, signaling the transfer has occurred.
* **Return Values:**
  * `bool`: Signals if the transfer has been completed successfully.
* **Example**:

  ```solidity
  transfer(0xRecepientAddress, 111);
  ```

### Third Party Approval

* **Function**: `approve(address spender, uint256 amount)`
* **Purpose**: Allows a user to approve an address for a certain amount of tokens. The address can then transfer up to that amount of the investor's tokens.
* **Parameters**:
  * `address spender`: Address being allowed to spend the users tokens.
  * `uint256 amount`: The amount of security tokens allowed.
* **Validation Checks**:
  * Ensures the spender is not the zero address.
* **Behavior**:
  * Updates the spender's approval amount for the user's tokens.
  * Emits an `Approval` event, signaling the approval has occurred.
* **Return Values:**
  * `bool`: Signals if the approval has been completed successfully.
* **Example**:

  ```solidity
  approve(0xSpenderAddress, 450);
  ```

### Third Party Transfer

* **Function**: `transferFrom(address from, address to, uint256 amount)`
* **Purpose**: Allows a third party to transfer tokens from one address to another, using their previous allowance.
* **Parameters**:
  * `address from`: Address the tokens are transferred from.
  * `address to`: Address of the recipient.
  * `uint256 amount`: The amount of settlement tokens to transfer.
* **Validation Checks**:
  * Ensures both addresses are not the zero address.
  * Makes sure that the address transferring from has a balance larger than the amount to be transferred.
  * Checks that the caller has an allowance for the transferring address larger than the amount to be transferred.
  * Checks the amount transferred is more than zero.
  * Uses the rules engine to check the sender and recipient against the relevant modules in the [Rule Modules](/how-kaio-works/smart-contracts/rules/rule-modules).
  * Checks the sender and recipient against the [Rule Modules](/how-kaio-works/smart-contracts/rules/rule-modules#allowlist-modules)using the rules engine.
* **Behavior**:
  * Updates the balances of both addresses with the new amount of tokens for each.
  * Updates values around latest operations, holder counts, and investor balances.
  * Emits a `Transfer` event, signaling the transfer has occurred.
* **Return Values:**
  * `bool`: Signals if the transfer has been completed successfully.
* **Example**:

  ```solidity
  transferFrom(0xTokenHolderAddress, 0xRecepientAddress, 730);
  ```

### Forced Transfer

* **Function**: `forceTransfer(address _from, address _to, uint256 _amount)`
* **Purpose**: Forces a transfer between addresses. Can only be called by the redemption book, and is used for forced redemptions.
* **Parameters**:
  * `address _from`: Address the tokens are transferred from.
  * `address _to`: Address of the recipient.
  * `uint256 _amount`: The amount of settlement tokens to transfer.
* **Validation Checks**:
  * Ensures both addresses are not the zero address.
  * Makes sure that the address transferring from has a balance larger than the amount to be transferred.
  * Verifies the caller is the redemption book.
  * Checks the amount transferred is more than zero.
  * Uses the rules engine to check the sender and recipient against the relevant modules in the [Rule Modules](/how-kaio-works/smart-contracts/rules/rule-modules).
  * Checks the sender and recipient against the [Rule Modules](/how-kaio-works/smart-contracts/rules/rule-modules#allowlist-modules)using the rules engine.
* **Behavior**:
  * Updates the balances of both addresses with the new amount of tokens for each.
  * Updates values around latest operations, holder counts, and investor balances.
  * Emits a `Transfer` event, signaling the transfer has occurred.
* **Example**:

  ```solidity
  forceTransfer(0xTokenHolderAddress, 0xRecepientAddress, 312);
  ```

## Supply Increase & Reduction

Issuing and burning tokens are the ways in which the total supply of a security tokens changes. They are used to keep the accounting accurate to the share balance held by KAIO in the corresponding underlying fund.

### Issue

* **Function**: `issue(address _investor, uint256 _amount)`
* **Purpose**: Allows the subscription book to mint new security tokens to an investor's address. Used when settling subscriptions to reflect the shares held in the underlying fund.
* **Parameters**:
  * `address _investor`: Address to mint the tokens to, belonging to an investor.
  * `uint256 _amount`: The amount of security tokens to mint.
* **Validation Checks**:
  * Checks the caller is the subscription book.
  * Ensures the recipient is not the zero address.
  * Checks the amount to mint is more than zero.
  * Uses the rules engine to check the recipient against the relevant modules in the [Rule Modules](/how-kaio-works/smart-contracts/rules/rule-modules).
  * Checks the recipient against the [Rule Modules](/how-kaio-works/smart-contracts/rules/rule-modules#allowlist-modules)using the rules engine.
* **Behavior**:
  * Updates the balance of the recipient address with the new amount of tokens.
  * Updates values around latest operations, holder counts, and investor balances.
  * Stores the new supply for lookbacks.
  * Emits a `Transfer` event from the 0 address, signaling the mint has occurred.
* **Example**:

  ```solidity
  issue(0xRecepientAddress, 99);
  ```

### Burn

* **Function**: `burn(uint256 _amount)`
* **Purpose**: Allows the redemption book to burn security tokens from their own balance. Used when settling redemptions, to destroy the redeemed tokens.
* **Parameters**:
  * `uint256 _amount`: The amount of security tokens to burn.
* **Validation Checks**:
  * Checks the caller is the redemption book.
  * Checks the amount to burn is more than zero.
  * Check the sender against the relevant modules in the [Rule Modules](/how-kaio-works/smart-contracts/rules/rule-modules)using the rules engine.
  * Checks the sender against the [Rule Modules](/how-kaio-works/smart-contracts/rules/rule-modules#allowlist-modules)using the rules engine.
* **Behavior**:
  * Removes the burned tokens from the redemption book's balance.
  * Updates values around latest operations, holder counts, and investor balances.
  * Stores the new supply for lookbacks.
  * Emits a `Transfer` event to the 0 address, signaling the burn has occurred.
* **Example**:

  ```solidity
  burn(255);
  ```

## Lookbacks

Security tokens offer functions for performing lookbacks on the maximum balance for a given period of time. These functions are used by books and modules when calculating restrictions and fees.

### Maximum Total Balance

* **Function**: `lookback(uint256 _timestamp)`
* **Purpose**: Returns the maximum total supply of the security token from the given timestamp to the current point in time, and the timestamp corresponding to when this maximum was registered.
* **Parameters**:
  * `uint256 _timestamp`: Timestamp defining the lookback period.
* **Return Values:**
  * `uint256`: Timestamp indicating when the maximum was registered.
  * `uint256`: Maximum token supply in the lookback.
* **Example**:

  ```solidity
  lookback(1700000000);
  ```

### Maximum Investor Balance

* **Function**: `investorLookback(bytes32 _investorId, uint256 _timestamp)`
* **Purpose**: Returns the maximum balance of security tokens held by an investor from the given timestamp to the current point in time. It also returns the timestamp corresponding to when this maximum was registered.
* **Parameters**:
  * `bytes32 _investorId`: Id of the investor whose balance is being checked.
  * `uint256 _timestamp`: Timestamp defining the lookback period.
* **Return Values:**
  * `uint256`: Timestamp indicating when the maximum was registered.
  * `uint256`: Maximum token balance for the investor in the lookback.
* **Example**:

  ```solidity
  investorLookback(0xInvestorId, 1700000000);
  ```

## Configuration

Security tokens can be configured to change their behavior or qualities, such as with modifying their name and symbol.

### Change Metadata

* **Function**: `changeNameAndSymbol(string calldata _name, string calldata _symbol, bytes32 _role)`
* **Purpose**: Allows an admin to change the name and symbol of a security token.
* **Parameters**:
  * `string _name`: New token name.
  * `string _symbol`: New token symbol.
  * `bytes32 _role`: Role of the caller.
* **Validation Checks**:
  * Checks the caller has the proper admin role.
* **Behavior**:
  * Changes the token name.
  * Changes the token symbol.
  * Emits a `NameAndSymbolChanged` event, signaling the name and symbol have been changed.
* **Example**:

  ```solidity
  changeNameAndSymbol("Security-Token-35", "ST35");
  ```


# Security

## Content Guide

The Security section of the KAIO documentation provides a learning material and references related to the platform's security. This page provides an overview, and each sub-section focuses on the security of a particular component:

{% content-ref url="/pages/LMjPBSxFEElpH34RFxnf" %}
[Conventional Components](/product-operations/security/conventional-components)
{% endcontent-ref %}

{% content-ref url="/pages/PzTG6az6Pl2d4dmSkFz5" %}
[Blockchain Infrastructure](/product-operations/security/blockchain-infrastructure)
{% endcontent-ref %}

{% content-ref url="/pages/ezUQnPfpJNO7O87yXaNB" %}
[Smart Contracts](/how-kaio-works/smart-contracts)
{% endcontent-ref %}

## KAIO Security

Security is at the forefront of the KAIO. All components, from the frontend to the infrastructure the blockchain runs on, have been designed to prevent security issues with the platform. Best practices and recommendations have been followed to ensure a secure and robust system.


# Conventional Components

Web2 KAIO Components

## Introduction

The KAIO Platform was developed using Web2 and Web3 principles, with equal importance placed on securing both aspects. The Web2 components were secured using the same security best practices employed to protect other Web2 applications. The platform was evaluated against the relevant security controls of the CIS Critical Security Controls® (CIS Controls®) v8 framework. This framework prioritizes a set of actions to create a defense-in-depth approach to mitigate the most frequent attacks against systems, networks, and applications.

## Security Control Groups

The KAIO platform undergoes continuous assessment against the following security control groups within the CIS v8 framework:

* Inventory and Control of Software Assets
* Data Protection
* Secure Configuration of Enterprise Assets and Software
* Account Management
* Access Control Management
* Continuous Vulnerability Management
* Audit Log Management
* Network Infrastructure Management
* Network Monitoring and Defense
* Application Software Security
* Penetration Testing

Confidentiality, integrity, and availability (CIA triad) of customer data on the KAIO Platform are ensured through various security measures provided natively by the Cloud Security Provider (CSP) AWS. These measures are utilized to secure the platform at the network, system, and application layers. In addition to the encryption provided by AWS for S3 buckets, all confidential and sensitive data is encrypted and stored in secure vaults while at rest. Key management for generated wallets on the KAIO platform is handled by the native Key Management System (KMS) solution of the CSP, or by a third-party key custodian. Traffic and transactions that trigger corresponding events on the smart contract infrastructure (e.g. signing the transaction with a valid signature) are handled by the KAIO platform in an encrypted and secure manner. User wallet keys are kept strictly confidential and private, ensuring secure access via the native KMS of the CSP.

## Availability and Access Control of the KAIO Platform

The KAIO Platform operates on a highly secure and reliable infrastructure to ensure the availability of its Web2 components. The platform uses multiple Virtual Private Cloud (VPC) instances, which are externally load-balanced on the AWS Cloud Security Provider (CSP). The applications run as containers, and their availability is provided by a natively running container orchestration implementation (AWS ECR and EKS). This ensures that the applications can handle high traffic volumes without experiencing downtime.

To ensure that the Web2 and Web3 platforms are separated and secure, they are segmented by IP and protected by the native firewall of the CSP. In addition, access to the KAIO platform is only granted through the Web2 front-end, and is limited to a set of whitelisted IP addresses. The Web3 platform is not externally exposed, providing an additional layer of security to the platform.

The network infrastructure of the KAIO platform has multiple layers of access control, with admin access being possible only via different Multi-Factor Authentication (MFA) mechanisms, ensuring that the platform is well-protected against password-only access or attacks. To further enhance the level of security, AWS EKS Kubernetes Network Policies enforce segmentation and boundary control of container services, ensuring that the security of the platform is not compromised.

## Secure Software Development Lifecyle

Secure Software Development Lifecycle (sSDLC) is an essential aspect of the security efforts for the KAIO Platform. The CI/CD pipeline includes code quality and Static Application Security Testing (SAST) stages during the CI phase. The purpose of these stages is to ensure code quality and identify any vulnerabilities before deployment to production. This process guarantees that high-quality, secure code is deployed to the platform. Additionally, the code review process is rigorous and only completed after a thorough examination of the code. The review process is critical to ensure that the code deployed on the platform meets the necessary security standards. The code is scrutinized in detail to check for errors, vulnerabilities, or other issues that could compromise the platform's security.

Other aspects of the sSDLC efforts for the KAIO platform are input validation and secure error handling. Preventing security vulnerabilities such as SQL injection attacks, cross-site scripting attacks (XSS), and buffer overflow attacks before they even reach the KAIO platforms servers is an important step in securing the platform. Preventing sensitive information from being disclosed to attackers by doing the necessary secure error handling is an important factor to prevent the platform from revealing any sensitive information.

## Testing

To enhance the security of the platform, the KAIO platform undergoes periodic penetration testing. These tests are essential to ensure that no new vulnerabilities are introduced during the development phase of the application. This ensures that the platform remains secure throughout the development phase and the CI/CD pipeline.

[Cybaverse](https://www.cybaverse.co.uk/) carried out penetration testing for the API. Their findings have been addressed and resolved. The latest certification is available below.

{% file src="/files/QdbFa41HKvJHC1vPXfNe" %}
***API penetration testing certification***
{% endfile %}

## Takeaways

In summary, the KAIO Platform places high importance on ensuring the security of customer data through various security measures, including encryption and secure storage of confidential and sensitive data in vaults, strict confidentiality and privacy of user wallet keys, and secure handling of traffic and transactions. The network infrastructure of the platform is highly secured, with admin access limited to authorized personnel and the use of MFA mechanisms. Additionally, a secure Software Development Lifecycle (sSDLC) and periodic penetration testing are implemented to ensure the platform remains secure.


# Blockchain Infrastructure

Infrastructure KAIO components

## Introduction

The KAIO blockchain infrastructure is the backbone of the KAIO platform. It supports the blockchain network that the smart contracts run on. Its security is essential to avoid disruption of service, loss of data, unauthorized access, and financial loss. Following best practices helps ensure the security of the KAIO infrastructure.

## Architecture

An overview of the blockchain network architecture can be found here:

[Architecture](/how-kaio-works/architecture#blockchain-architecture)

## Security Considerations

Mitigating potential risks is essential to having a robust and secure infrastructure. To achieve this goal, specific security measures have been put in place.

### Network Security

* **Dedicated VPC:** By utilizing a dedicated VPC, the blockchain infrastructure is isolated from other AWS resources, reducing the attack surface and potential exposure to threats from other network traffic.
* **Network Segmentation:** Subnets and security groups are being used to segment the network. Subnets are configured with appropriate access controls, and help organize resources. Security groups act as virtual firewalls, controlling inbound and outbound traffic to instances.
* **NACLs:** Network Access Control Lists (NACLs) are used to add an additional layer of security, by controlling inbound and outbound traffic at the subnet level. They provide fine-grained control over traffic flow.

### Access Control

* **Authentication:** Multi-factor authentication (MFA) is used to ensure that only authorized individuals can access cloud resources. This strong authentication mechanism prevents unauthorized access to sensitive components.
* **IAM, Roles and Policies:** AWS Identity and Access Management (IAM) enables granular control over who can access specific AWS resources. Roles and policies ensure that users and services only have the permissions they need.
* **Role-Based Access Control for Deployment:** Deployment is done by individuals with the proper roles assigned. This enforces the principle of least privilege. Only authorized personnel can modify the infrastructure.

### Node Security

* **Hardened Server Instances:** The best security practices have been implemented, such as disabling root login, configuring strong passwords, and using SSH keys for authentication. This minimizes the chances of unauthorized access.
* **Regular OS and Software Updates:** Operating systems and software packages are kept up to date to mitigate known vulnerabilities that could be exploited.
* **Unnecessary Services and Ports Disabled:** Services and ports that are not required for the blockchain are disabled to reduce attack vectors.

### Data Security

* **Encryption for Data at Rest:** Data is encrypted at rest using AWS Elastic Block Store (EBS). Additionally AWS provides encryption by default for all S3 buckets. Encryption adds an extra layer of security to sensitive data stored on disk.
* **Encryption for Data in Transit:** Data in transit is encrypted using certificates for all domains.
* **Backup and Disaster Recovery:** There are detailed [plans](/product-operations/disaster-recovery) in place to regularly back up blockchain data and compose a well-defined disaster recovery strategy, to ensure data integrity in case of failures.

### Monitoring

* **Centralized Logging:** Logs from different components are consolidated, making it easier to monitor and detect abnormal activities.
* **Log Monitoring:** Logs are monitored regularly for unusual patterns that might indicate security breaches or potential threats.

### Patch Management

* **Patching:** Software patches to address known vulnerabilities will be applied swiftly, to reduce the risk of exploitation.
* **Updated and Tested Scripts:** Infrastructure as Code (IaC) running on AWS, and DevOps automation tool scripts, will be regularly updated and tested to ensure they are up to date and free of vulnerabilities.

## Testing

To enhance the security of the platform, the KAIO infrastructure undergoes periodic penetration testing. These tests are essential to ensure that no new vulnerabilities are introduced during the development phase of the application. This ensures that the infrastructure remains secure throughout the development phase and the CI/CD pipeline.

[Cybaverse](https://www.cybaverse.co.uk/) carried out penetration testing for the infrastructure hosted on AWS. Their findings have been addressed and resolved. The latest certification is available below.

{% file src="/files/AZw4ypTRBP6gfkS6mOm6" %}
***AWS penetration testing certification***
{% endfile %}


# Smart Contracts

Web3 KAIO components

## Introduction

The KAIO smart contracts are at the core of the KAIO platform. They implement the main business logic that enables the platform to work. Ensuring their security is of upmost priority, to prevent financial loss, unauthorized access, and disruption of service. The KAIO smart contracts are designed and built with security in mind, and following best practices.

## Architecture

An overview of the smart contract architecture can be found here:

[Architecture](/how-kaio-works/architecture#smart-contract-architecture)

## Access Control

<div data-full-width="true"><figure><img src="/files/BtJEgIgBLDxeb71kOxrL" alt=""><figcaption><p><em><strong>Roles overview</strong></em></p></figcaption></figure></div>

As mentioned previously, the access control is based on roles. These roles follow a hierarchy, with the KAIO Admin being at the top. The role system has a high level of granularity, since access to functions is granted individually, using their selector. This means that when creating a new role, the functions they can access can be specified in a clear manner. It is also possible to set a role as "Contract Manager", which will make it the default role that has access to features for a specific contract. Users with existing roles can create and grant new roles (sub-roles), but these roles can at most access the functions that the parent role had access to, or they can be more restrictive. This access control system serves to robustly protect functions from the wrong users, and clearly specify which users have access to which functionalities.

## Threats & Mitigations

Potential attack vectors always need to be considered when designing and implementing a system. These might be common to the technology, like with smart contracts, or more specific to the system's architecture. In the case of KAIO, these threats have all been reviewed and addressed.

### Users

There is a risk of misbehavior by users with powerful roles, since they can access sensitive functions and provide data. For example Dealers are responsible for providing correct Investor data, and Fund Admins are responsible for providing accurate Net Asset Values (NAV).\
These threats are mitigated by the fact that these users are manually onboarded by the KAIO Admin, after a rigorous compliance process, and thus are subject to legal repercussions for any misbehavior.

### Modules

Modules contain custom code from users, and thus their interaction with the rest of the system must be carefully considered. That being said, the modules are only used to check rules, and they can only be more restrictive compared to the KAIO modules, not less. If for example a Fund Admin decides to change the rules in their modules, that is allowed. In a worse case scenario, all they could do is "lock" their instrument if rules are too restrictive, which has the same risk profile as the Users one described previously.

## Development Lifecycle

Effort and care were put into the methodology and development lifecycle of the smart contracts, with the goal of achieving the best quality possible.

### Testing

The smart contracts were thoroughly tested with a combination of unit and integration tests:

* **Unit tests:** The smart contracts were tested individually, with each function being tested for positive and negative cases to ensure correct behavior. In some tests mocks were used to avoid dependencies, and fuzzing was used to further test inputs.
* **Integration tests:** The entire smart contract platform was tested using integration tests, without using mocks. A complete flow including the setup, multiple Investors and multiple Dealers was carried out. Fuzzing was used to test a wide range of input values. All modules and their rules were also included and tested, with exception of the ones with non-specific implementations. These were given example implementations and tested separately.

### Code Reviews

All changes in the smart contracts went through code review. Reviews were done by at least 2 separate people, different than the person who authored the change. The code review process minimizes the chance of bugs or other issues, while also ensuring code quality and consistency. Additionally it guarantees the code is optimized, both for gas spending and for contract size.

### Audits

An internal smart contract audit was done by [Nethermind](https://nethermind.io/smart-contracts-audits/), in order to ensure there were no issues with the code. The findings from this audit have been addressed and resolved. The audit report is available below.

{% hint style="info" %}
As mentioned in the audit report, there are issues with properly measuring the code coverage of our tests due to issues with Foundry. We have since found some workarounds and improved our coverage, which is now above 95%.
{% endhint %}

{% file src="/files/KTJLFh8aPt76GTGHiiaK" %}
***Smart contracts audit report***
{% endfile %}


# Monitoring

## High-level Diagram

<figure><img src="/files/i1mivbDcN0Vh6iVVMg9N" alt=""><figcaption><p>KAIO Observability Stack</p></figcaption></figure>

## Overview

### Real-time Monitoring

We continuously collect data about the performance of our platform, such as how services uptime, HTTP request metrics, and block production on the Blockchain side. This helps us immediately identify if any part of our service is slowing down or not functioning as expected, and proactively scale out the platform if needed.

### System Health Checks

Our monitoring tools perform regular health checks on all parts of our platform. This includes checking the status of servers, databases, and other critical components to ensure they are operational and responding correctly.

### Security Oversight

We keep a close watch on the security of our platform. This involves detecting and responding to any potential security threats, and ensuring that customer data is always protected.

### Alerts and Notifications

If any issues are detected, our system automatically alerts our technical team. This means we can quickly address problems before they impact our customers.

### Performance Trends

We also analyze trends over time, which helps us understand how our platform is being used and where we can make improvements. This analysis ensures that we continually enhance the platform to meet our customers' needs.

### Error Tracking

When errors occur, our system logs detailed information about them. This allows our developers to investigate and fix issues promptly, often before customers are even aware of them.

### Compliance and Standards

We regularly check that our platform complies with industry standards and best practices for security and performance. This helps ensure a high-quality, reliable service.


# Availability

Availability Management for KAIO Infrastructure.

## Overview

The KAIO infrastructure runs on Amazon Web Services (AWS) and MongoDB components. Both offer Service Level Agreements (SLAs) in order to guarantee the availability of their services. Availability refers to how consistently a system is operational and accessible. It determines the system's reliability, aiming to minimize downtime.

### Service Uptime

<table data-full-width="false"><thead><tr><th width="107">EKS</th><th width="80">EC2</th><th width="94">Amplify</th><th width="80">S3</th><th width="95">Cognito</th><th width="80">SES</th><th width="97">Lambda</th><th>MongoDB</th></tr></thead><tbody><tr><td>99.95%</td><td>99.5%</td><td>99.95%</td><td>99.9%</td><td>99.9%</td><td>99.9%</td><td>99.95%</td><td>99.95%</td></tr></tbody></table>

## **Amazon Web Services**

AWS operates data centers in multiple geographic regions. Each region contains one or more Availability Zones (AZs), which are physically separate data centers within a region. These are designed to provide high availability and fault tolerance. Services hosted on AWS can be distributed across multiple AZs for redundancy and resilience. Currently KAIO uses a single AZ for services running on AWS, with the option of using multiple ones in the future for improved availability.

### **EKS**

KAIO uses an [Amazon EKS](https://aws.amazon.com/eks/) Kubernetes service to manage most of its infrastructure in the AWS cloud, running on EC2 instances. This includes the blockchain network infrastructure itself, the API backend system, and a subgraph ([The Graph](https://thegraph.com/)) keeping track of the KAIO smart contracts.

**Service Commitment**: AWS will use commercially reasonable efforts to make the Kubernetes endpoint for an Amazon EKS Cluster available with a Monthly Uptime Percentage of at least 99.95% during any monthly billing cycle.

**Availability Definition**: Availability for EKS is defined as the success of at least one connection request in a 5-minute interval.

### **EC2**

KAIO uses [Amazon EC2](https://aws.amazon.com/ec2/) instances to run most of its infrastructure. These in turn are managed and controlled by EKS, as described previously.

**Service Commitment**: For each individual Amazon EC2 instance, AWS will use commercially reasonable efforts to make the Single EC2 Instance available with an Instance-Level Uptime Percentage of at least 99.5%, in each case during any monthly billing cycle. If in the future KAIO has more than one instance hosted on different Availability Zones in the same region, AWS will use commercially reasonable efforts to make Amazon EC2 available for each AWS region with a Monthly Uptime Percentage of at least 99.99%.

**Availability Definition**: Availability for EC2 is defined as follows:

* For the Instance-Level SLA, availability is defined as the time the single EC2 Instance has external connectivity.
* For the Region-Level SLA, availability is defined as the time at least one of the running instances deployed in two or more Availability Zones concurrently, has external connectivity.

### **Amplify**

KAIO uses [AWS Amplify](https://aws.amazon.com/amplify/) to host its frontend website.

**Service Commitment**: AWS will use commercially reasonable efforts to make Amplify Console available with a Monthly Uptime Percentage for each AWS region, during any monthly billing cycle, of at least 99.95%.

**Availability Definition**: Availability for Amplify is defined as the success rate of requests in a 5-minute interval.

### **S3**

KAIO uses an [Amazon S3](https://aws.amazon.com/s3/) bucket to host media, such as legal documents, images, and others.

**Service Commitment**: AWS will use commercially reasonable efforts to make the Amazon S3 Services each available with a Monthly Uptime Percentage of at least 99.9%, in each case during any monthly billing cycle.

**Availability Definition**: Availability for S3 is defined as the success rate of requests in a 5-minute interval.

### Cognito

KAIO uses [Amazon Cognito](https://aws.amazon.com/cognito/) for customer identity and access management.

**Service Commitment**: AWS will use commercially reasonable efforts to make Cognito available with a Monthly Uptime Percentage for each AWS region of at least 99.9%, during any monthly billing cycle.

**Availability Definition**: Availability for Cognito is defined as the success rate of requests in a 5-minute interval.

### SES

KAIO uses [Amazon SES](https://aws.amazon.com/ses/) for sending out email notifications.

**Service Commitment**: AWS will use commercially reasonable efforts to make the Included Services each available with a Monthly Uptime Percentage for each AWS region, during any monthly billing cycle, of at least 99.9%.

**Availability Definition**: Availability for SES is defined as the success rate of requests in a 5-minute interval.

### Lambda

KAIO uses [AWS Lambda](https://aws.amazon.com/lambda/) for automating user tasks.

**Service Commitment**: AWS will use commercially reasonable efforts to make Lambda available with a Monthly Uptime Percentage for each AWS region, during any monthly billing cycle, of at least 99.95%.

**Availability Definition**: Availability for Lambda is defined as the success rate of requests in a 5-minute interval.

## MongoDB

MongoDB operates data centers in multiple geographic regions. Each region contains one or more Availability Zones, designed to provide high availability and fault tolerance. KAIO uses MongoDB Atlas, which has a three-node minimum replica set distributed across AZs in the same region. There is also the option to improve reliability further in the future by using multiple regions.

### Atlas

KAIO uses a [MongoDB Atlas](https://www.mongodb.com/atlas/database) database to store user data.

**Service Commitment**: MongoDB will use commercially reasonable efforts to maximize the availability of MongoDB Atlas, and provide a Monthly Uptime Percentage of at least 99.95%. This applies only to MongoDB Atlas deployments at level M10 or above that have been up for a minimum of 24 hours.

**Availability Definition**: Availability for Atlas is defined as the success of at least one connection request in a 1-minute interval.


# Disaster Recovery

Disaster Recovery for KAIO Infrastructure.

## Overview

Disaster recovery refers to the process of reestablishing systems after an event that disrupts their proper functioning. It is essential to take preventive measures to ensure a fast and simple restoration. Two relevant terms measure the success of a disaster recovery operation:

* **Recovery Point Objective (RPO)**: RPO describes the maximum amount of time for which data loss is acceptable after recovery. For example, if the RPO is one hour, data loss up to an hour before the disaster occurred is considered acceptable.
* **Recovery Time Objective (RTO)**: RTO describes the maximum acceptable time for restoring systems. For example, if the RTO is four hours, it is considered acceptable if the systems are restored within four hours of the disaster occurring.

In its current MVP form, KAIO does not have a comprehensive disaster recovery plan in place. However, it is expected to be implemented in the near future, and this page contains information on how it can be achieved using the current infrastructure. KAIO aims to have a RPO of zero in regards to blockchain information (which is to mean, as long as a transaction gets included in a block that is confirmed to be added to the chain, that information will not be lost).

## Backup

Backing up information and settings regularly is critical to provide a proper disaster recovery response. The more often backups are made, the less data can potentially be lost in the event of a disaster.

### AWS

KAIO already has robust data replication due to each validator having its own data volume, which all act as backups with zero RPO. Additionally, periodic snapshots can be taken as extra protection in the extremely unlikely scenario all validators lose their data. AWS allows for snapshots and backups for its different products, which can be stored across different regions to guarantee access. The time between snapshots will determine the RPO.

### MongoDB

MongoDB Atlas supports backups for clusters hosted on AWS and will use its native snapshot functionality. A Backup Compliance Policy can be enabled to protect sensitive data. In addition, Snapshot Encryption can be used to ensure the security of backups. If the backup procedure fails, a Fallback Snapshot will be attempted.

## Restoration

Restoration plans are essential to decrease system downtime, and their effectiveness ultimately depends on previous backups and how quickly the systems can be restored. Measures should be in place to ensure a fast and effective restoration.

### AWS

<figure><img src="/files/MMAyaA7RdYDBXTzEOcuF" alt=""><figcaption><p><em><strong>AWS Disaster Recovery options</strong></em></p></figcaption></figure>

As shown in the diagram above, AWS offers different options for recovery. Some options improve both RPO and RTO metrics significantly, at the expense of being more costly and complex. Backup and restore is the most basic option, allowing for restoring from an existing backup. Pilot Light is similar but essentially has the backup and settings ready, requiring very little time to restore. Warm standby is the same, with the difference of always being ready and activating autonomously when needed. Finally, Multi-site means running systems across regions to guarantee availability and avoid having to restore the system at all.

### MongoDB

Restoration of a MongoDB Atlas Database is simple if the proper backup is available. Operations must be stopped during the restoration period. Additionally, a fallback snapshot can be used as a backup. This being said, it should be considered a last resort, since it may result in inconsistent data across the cluster.

## Testing

Testing the disaster recovery plan is crucial to validate its effectiveness. Disaster drills can be used to put the plan in motion in a controlled environment, and then evaluate the result against expected RPO and RTO. Adjustments to the plan can be made accordingly. Doing routine testing ensures the recovery plan will facilitate restoring the systems successfully in the case of a real disaster.


