> For the complete documentation index, see [llms.txt](https://synthesys-2.gitbook.io/synthesys-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://synthesys-2.gitbook.io/synthesys-docs/network-overview/api-reference/share-classes.md).

# Share Classes

A **share class** is the smallest tradable unit in the Synthesys network. Every fund has one or more share classes, and almost everything a distributor cares about — the live NAV, the fee schedule applied at order time, the subscription and redemption mechanics — is denominated at the share-class level. As a result, the share-class read endpoints are some of the most-called endpoints in any production integration: a typical distributor backend hits `GET /funds/shareclass/all` once on warm-up and then calls the per-ID endpoint on demand whenever an investor opens the corresponding fund detail page.

Share classes are provisioned by Synthesys operations. Once a share class is in place, the identifier (e.g. `SC000003`) is shared with the relevant distributors and is used as the path parameter on the read endpoints below. You won't see `shareClassId` *inside* the share-class object — the identifier is part of the URL, not the payload.

### The Share class object

Each share class returned by the read endpoints carries the configuration set at provisioning:

| Field              | Type   | Notes                                                                                             |
| ------------------ | ------ | ------------------------------------------------------------------------------------------------- |
| `fundId`           | string | Parent fund identifier (`FN######`)                                                               |
| `currency`         | string | ISO denomination currency                                                                         |
| `provider`         | string | Identifier of the supply-side platform that processes orders for this share class (e.g. `"mint"`) |
| `status`           | string | Lifecycle status. Active share classes are `"active"`                                             |
| `feesSubBps`       | number | Subscription fee in basis points (10 bps = 0.1%). Applied at order creation                       |
| `feesRedBps`       | number | Redemption fee in basis points                                                                    |
| `feesMgmtBps`      | number | Management fee in basis points                                                                    |
| `feesPerfBps`      | number | Performance fee in basis points                                                                   |
| `feesWatermarkBps` | number | High-watermark threshold in basis points                                                          |
| `meta`             | object | Share-class display metadata (see below)                                                          |
| `details`          | object | Regulatory and onboarding details (see below)                                                     |
| `metrics`          | object | Live commercial metrics (see below)                                                               |
| `overview`         | object | Marketing/overview block (see below)                                                              |
| `subRedemption`    | object | Subscription / redemption mechanics (see below)                                                   |
| `bank`             | object | Banking details for fiat settlement (see below)                                                   |

#### `meta`

| Field     | Notes                                              |
| --------- | -------------------------------------------------- |
| `name`    | Display name (e.g. `"Equitize Global Yield Fund"`) |
| `manager` | Investment manager (e.g. `"Tandem Capital"`)       |

#### `details`

| Field                    | Notes                               |
| ------------------------ | ----------------------------------- |
| `isin`                   | ISIN identifier for the share class |
| `jurisdiction`           | Regulatory jurisdiction             |
| `minimumInvestment_fiat` | Minimum subscription amount in fiat |

#### `metrics`

| Field           | Notes                                                     |
| --------------- | --------------------------------------------------------- |
| `apy_bps`       | Headline yield in basis points (1250 = 12.50%)            |
| `tvl_fiat`      | Total value locked, as a decimal string                   |
| `change7D`      | 7-day change in TVL, as a decimal string                  |
| `currency`      | Currency of `tvl_fiat` and `change7D`                     |
| `maturity_days` | Maturity in days. `-1` indicates open-ended / no maturity |

#### `overview`

| Field         | Notes                                                     |
| ------------- | --------------------------------------------------------- |
| `assetClass`  | Asset class label (e.g. `"Money Funds"`)                  |
| `description` | Plain-language description suitable for surfacing in a UI |
| `riskLevel`   | Risk score (typical scale `1`–`5`)                        |

#### `subRedemption`

| Field                | Notes                                                              |
| -------------------- | ------------------------------------------------------------------ |
| `subFreq`            | Subscription frequency in days                                     |
| `redFreq`            | Redemption frequency in days                                       |
| `cutOffTime_days`    | Cut-off time relative to the dealing day, in days                  |
| `lockup`             | Lock-up period in days (`0` = no lock-up)                          |
| `eligibleInvestors`  | Eligibility code                                                   |
| `distributionPolicy` | Free-text distribution policy (e.g. `"Distributed or cumulative"`) |

#### `bank`

| Field               | Notes                           |
| ------------------- | ------------------------------- |
| `accountHolderName` | Beneficiary name                |
| `accountNumber`     | Account number                  |
| `accountType`       | Account type (e.g. `"Savings"`) |
| `bankName`          | Beneficiary bank                |
| `swiftCode`         | SWIFT/BIC code                  |
| `currency`          | Account denomination currency   |

***

### List all share classes

Returns every share class available to your distributor. Use this for warm-cache loads, periodic reconciliation, or any back-office tooling that needs to walk the full set.

**`GET /funds/shareclass/all`**

#### Response

json

```json
{
  "isError": false,
  "errorMsg": "NA",
  "data": {
    "items": [
      {
        "bank": {
          "accountHolderName": "John Nolan",
          "accountNumber": "1234567890",
          "accountType": "Savings",
          "bankName": "Bank of America",
          "currency": "USD",
          "swiftCode": "SWIFT112"
        },
        "currency": "USD",
        "details": {
          "isin": "ABC13456789",
          "jurisdiction": "Singapore",
          "minimumInvestment_fiat": 1000000
        },
        "feesMgmtBps": 75,
        "feesPerfBps": 1000,
        "feesRedBps": 400,
        "feesSubBps": 10,
        "feesWatermarkBps": 0,
        "fundId": "FN000003",
        "meta": {
          "manager": "Tandem Capital",
          "name": "Equitize Global Yield Fund"
        },
        "metrics": {
          "apy_bps": 1250,
          "change7D": "3562000000",
          "currency": "USD",
          "maturity_days": -1,
          "tvl_fiat": "4523000000"
        },
        "overview": {
          "assetClass": "Money Funds",
          "description": "Invests 99.5% in U.S. government securities",
          "riskLevel": 2
        },
        "provider": "mint",
        "status": "active",
        "subRedemption": {
          "cutOffTime_days": 14,
          "distributionPolicy": "Distributed or cumulative",
          "eligibleInvestors": 0,
          "lockup": 0,
          "redFreq": 30,
          "subFreq": 30
        }
      }
    ],
    "count": 1
  }
}
```

#### Examples

**curl:**

bash

```bash
curl -s $BASE/funds/shareclass/all | jq .
```

**Node.js:**

javascript

```javascript
async function listShareClasses() {
  const res = await fetch(`${BASE}/funds/shareclass/all`);
  const payload = await res.json();
  if (payload.isError) throw new Error(payload.errorMsg);
  return payload.data.items;
}

const all = await listShareClasses();
for (const sc of all) {
  console.log(`${sc.meta.name} (${sc.currency}) — APY ${sc.metrics.apy_bps / 100}%`);
}
// Equitize Global Yield Fund (USD) — APY 12.5%
```

**Python:**

python

```python
import requests

def list_share_classes():
    r = requests.get(f"{BASE}/funds/shareclass/all", timeout=10)
    payload = r.json()
    if payload["isError"]:
        raise RuntimeError(payload["errorMsg"])
    return payload["data"]["items"]

all_share_classes = list_share_classes()
for sc in all_share_classes:
    apy = sc["metrics"]["apy_bps"] / 100
    print(f"{sc['meta']['name']} ({sc['currency']}) — APY {apy}%")
```

#### Caching

The list endpoint is cheap to call but you should still cache the result in your application for at least 30 seconds rather than calling it on every request. The dataset changes slowly, and a cache layer in front of this endpoint will smooth read traffic by orders of magnitude with no observable impact on data freshness.

**Node.js:**

javascript

```javascript
let cache = null, cachedAt = 0;
const TTL_MS = 30_000;

async function getShareClasses() {
  if (cache && Date.now() - cachedAt < TTL_MS) return cache;
  cache = await listShareClasses();
  cachedAt = Date.now();
  return cache;
}
```

**Python:**

python

```python
import time

_cache = {"value": None, "at": 0.0}
TTL_S = 30.0

def get_share_classes():
    if _cache["value"] is not None and time.time() - _cache["at"] < TTL_S:
        return _cache["value"]
    _cache["value"] = list_share_classes()
    _cache["at"] = time.time()
    return _cache["value"]
```

***

### Get share class by ID

Retrieve a single share class by its identifier. This is the endpoint you'll call from a fund detail page or anywhere your application already knows which share class it needs.

**`GET /funds/shareclass/:shareClassId`**

#### Path parameters

| Param          | Type   | Description                                                                                      |
| -------------- | ------ | ------------------------------------------------------------------------------------------------ |
| `shareClassId` | string | Share class identifier (format `SC######`), provided to your distributor by Synthesys operations |

#### Response

json

```json
{
  "isError": false,
  "errorMsg": "NA",
  "data": {
    "bank": {
      "accountHolderName": "John Nolan",
      "accountNumber": "1234567890",
      "accountType": "Savings",
      "bankName": "Bank of America",
      "currency": "USD",
      "swiftCode": "SWIFT112"
    },
    "currency": "USD",
    "details": {
      "isin": "ABC13456789",
      "jurisdiction": "Singapore",
      "minimumInvestment_fiat": 1000000
    },
    "feesMgmtBps": 75,
    "feesPerfBps": 1000,
    "feesRedBps": 400,
    "feesSubBps": 10,
    "feesWatermarkBps": 0,
    "fundId": "FN000003",
    "meta": {
      "manager": "Tandem Capital",
      "name": "Equitize Global Yield Fund"
    },
    "metrics": {
      "apy_bps": 1250,
      "change7D": "3562000000",
      "currency": "USD",
      "maturity_days": -1,
      "tvl_fiat": "4523000000"
    },
    "overview": {
      "assetClass": "Money Funds",
      "description": "Invests 99.5% in U.S. government securities",
      "riskLevel": 2
    },
    "provider": "mint",
    "status": "active",
    "subRedemption": {
      "cutOffTime_days": 14,
      "distributionPolicy": "Distributed or cumulative",
      "eligibleInvestors": 0,
      "lockup": 0,
      "redFreq": 30,
      "subFreq": 30
    }
  }
}
```

#### Examples

**curl:**

bash

```bash
curl -s $BASE/funds/shareclass/SC000003 | jq .
```

**Node.js:**

javascript

```javascript
async function getShareClass(shareClassId) {
  const res = await fetch(`${BASE}/funds/shareclass/${encodeURIComponent(shareClassId)}`);
  const payload = await res.json();
  if (payload.isError) throw new Error(payload.errorMsg);
  return payload.data;
}

const sc = await getShareClass('SC000003');
console.log(`${sc.meta.name} — minimum ${sc.details.minimumInvestment_fiat} ${sc.currency}`);
console.log(`Fees (bps): sub=${sc.feesSubBps}, red=${sc.feesRedBps}, mgmt=${sc.feesMgmtBps}, perf=${sc.feesPerfBps}`);
```

**Python:**

python

```python
def get_share_class(share_class_id):
    r = requests.get(f"{BASE}/funds/shareclass/{share_class_id}", timeout=10)
    payload = r.json()
    if payload["isError"]:
        raise RuntimeError(payload["errorMsg"])
    return payload["data"]

sc = get_share_class("SC000003")
print(f"{sc['meta']['name']} — minimum {sc['details']['minimumInvestment_fiat']} {sc['currency']}")
print(
    f"Fees (bps): sub={sc['feesSubBps']}, red={sc['feesRedBps']}, "
    f"mgmt={sc['feesMgmtBps']}, perf={sc['feesPerfBps']}"
)
```

#### Common errors

* **`404` "shareClassId not found"** — the ID doesn't exist in this environment. Either you're hitting the wrong host or the share class hasn't been provisioned for your distributor yet. Confirm the ID with Synthesys operations and re-check with `GET /funds/shareclass/all`.
* **`400` "invalid shareClassId format"** — the path parameter doesn't match the `SC` + 6-digit format.

### Working with monetary fields

Several fields are returned as **decimal strings** (`tvl_fiat`, `change7D`) rather than numbers, to preserve precision for large monetary values. Parse them with a big-decimal library rather than `Number` / `float`:

**Node.js:**

javascript

```javascript
import { Decimal } from 'decimal.js';

const tvl = new Decimal(sc.metrics.tvl_fiat);
console.log(`TVL: ${tvl.toFixed(2)} ${sc.metrics.currency}`);
```

**Python:**

python

```python
from decimal import Decimal

tvl = Decimal(sc["metrics"]["tvl_fiat"])
print(f"TVL: {tvl:.2f} {sc['metrics']['currency']}")
```

### Patterns

* **Hydrate once, look up by ID.** Most distributor backends find it cleaner to call `GET /funds/shareclass/all` on warm-up, build an in-memory map keyed by the `shareClassId` they used in the URL, and serve all per-ID lookups from that map. The TTL above (30 seconds) is a good default; bump it to a few minutes once you've confirmed how often share-class metadata changes in your environment.
* **Treat the read response as opaque.** Don't try to derive fund or issuer relationships by parsing the share-class object beyond the documented `fundId` field. New optional fields will land in the sub-objects over time, and your application should ignore unknown fields gracefully rather than assert on them.
* **Convert basis points at display time, not parse time.** Storing `feesSubBps: 10` and converting to `0.10%` only in the UI is cleaner than carrying two representations through your code.
* **Pair share-class reads with NAV reads.** Whenever you display a share class to an investor, you almost always need its current NAV alongside. Hit `GET /funds/shareclass/:id` and `GET /funds/shareclass/nav/live?shareClassId=…` in parallel rather than sequentially.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://synthesys-2.gitbook.io/synthesys-docs/network-overview/api-reference/share-classes.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
