Core Concepts

Fundamental entities and relationships in the PRIME platform

Core Concepts

This document explains the fundamental entities and relationships in the PRIME platform. Understanding these concepts is essential for working with the API effectively.

Trading Venues

PRIME supports two trading modes:

VenueDescription
ExchangeCentral order book with limit and market orders
OTCRFQs and Orders with external dealers; PRIME acts as intermediary

Sub-accounts are configured for a specific venue, determining which trading mode is available.


Entity Hierarchy

┌─────────────────────────────────────────────────────────────────────────┐
│                              Platform                                   │
│                                                                         │
│   ┌─────────────┐         ┌──────────────────┐         ┌─────────────┐  │
│   │    User     │────────►│  Client Account  │────────►│ Sub-Account │  │
│   │             │   N:1   │                  │   1:N   │ (Portfolio) │  │
│   └─────────────┘         └──────────────────┘         └─────────────┘  │
│         │                          │                          │         │
│         │                          │                          │         │
│    Authentication            Compliance/KYC              Trading        │
│    Permissions               Verification                Balances       │
│    Roles                     Fee Agreements              Orders         │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘

User

A User is an authentication identity that operates within a Client Account.

Key Properties

FieldTypeDescription
idUUIDUnique identifier
clientAccountIdUUIDParent Client Account
statusenumACTIVE, INACTIVE, DELETED, PENDING_MFA, PENDING_PASSWORD_RESET
typeenumFRONT_OFFICE (trader), BACK_OFFICE (admin), SYSTEM
mfaEnabledbooleanWhether MFA is required

Permissions

User permissions are controlled through Actions applied to Domains. See the Permission Model section for details.

Roles

Users have role-based access control:

Front Office Roles:

  • ROLE_FO_CA_OWNER - Client Account owner (full access)
  • ROLE_FO_TRADER - Trading permissions only
  • ROLE_FO_ISSUER - Issuer-specific operations

Client Account

A Client Account represents a legal entity (individual or company) that has a relationship with the platform. This is the compliance and regulatory boundary.

Key Properties

FieldTypeDescription
idUUIDUnique identifier
statusenumACTIVE, INACTIVE, SUSPENDED
verificationStatusenumKYC verification state
internalbooleanSystem/internal account flag
lockedbooleanCannot manage own users/sub-accounts

Verification Status

Client Accounts must be verified before trading is enabled:

StatusDescription
UNVERIFIEDInitial state, no KYC submitted
PENDING_APPROVALKYC submitted, awaiting review
APPROVEDKYC approved by compliance
PENDING_VERIFYAdditional verification needed
VERIFIEDFully verified, trading enabled
REJECTEDKYC rejected

Trading Eligibility

A Client Account can trade only when:

  • status = ACTIVE
  • verificationStatus = VERIFIED

Sub-Account (Portfolio)

A Sub-Account (also called a Portfolio) is a segregated trading account under a Client Account. It enables clients to partition their holdings and trading activity.

Why Portfolios?

  • Segregation: Separate balances and trading history
  • Access Control: Different users can access different portfolios
  • Pair Restrictions: Limit which trading pairs are available
  • Venue Separation: Exchange vs OTC trading

Key Properties

FieldTypeDescription
idUUIDUnique identifier
clientAccountIdUUIDParent Client Account
namestringHuman-readable name (e.g., "Main Trading", "Portfolio A")
venueenumVENUE_MARKETPLACE (Exchange) or VENUE_OTC
pairs[]UUIDAllowed pair IDs (empty = all pairs allowed)

Trading Eligibility

A Sub-Account can trade only when:

  • Parent Client Account can trade (verified and active)

Instruments

An Instrument represents any tradable asset on the platform.

Instrument Types

CategoryTypesExamples
FiatCURRENCYCHF, EUR, USD
CryptoCRYPTO_CURRENCYBTC, ETH, SOL
SecuritiesSTOCK, DEBT, FUND_SHARES, ASSETTokenized equities, bonds
BondsGOVERNMENT_BOND, CORPORATE_BOND, MUNICIPAL_BONDFixed income
OtherCOMMODITY, DERIVATIVE, NFT, UTILITY_TOKENSpecialized assets

Key Properties

FieldTypeDescription
idUUIDUnique identifier (used in API calls)
symbolstringTrading symbol (e.g., "BTC", "CHF")
typeenumAsset classification
decimalsintPrecision for quantities
blockchainstringFor crypto: which blockchain (e.g., "ethereum")
contractAddressstringFor tokens: smart contract address
nativeCurrencybooleanTrue if blockchain's native asset (ETH, BTC)
depositEnabledbooleanCan receive deposits
withdrawalEnabledbooleanCan withdraw

Usage Pattern

Fetch instruments first to obtain UUIDs needed for other operations:

GET /api/rest/v1/instruments
→ Returns list with id, symbol, type, decimals, etc.
→ Use the `id` field in balance queries, deposit addresses, etc.

Pairs

A Pair represents a trading relationship between two instruments (base/quote).

Structure

Pair: BTC/CHF
├── Base Instrument: BTC (what you're buying/selling)
├── Quote Instrument: CHF (what you're paying/receiving)
└── Symbol: "BTC/CHF"

Key Properties

FieldTypeDescription
idUUIDUnique identifier (used in order placement)
symbolstringTrading symbol (e.g., "BTC/CHF")
baseIdUUIDBase instrument ID
quoteIdUUIDQuote instrument ID
statusenumOPEN, SUSPENDED, CLOSED
tradablebooleanAvailable on Exchange
otcTradablebooleanAvailable for OTC
minOrderQuantitydecimalMinimum order size
maxOrderQuantitydecimalMaximum order size
priceDecimalPointsintPrice precision
priceTicksdecimalMinimum price increment
quantityDecimalPointsintQuantity precision
quantityTicksdecimalMinimum quantity increment

Trading Constraints

When placing orders, respect the pair's constraints:

  • Quantity: Must be between minOrderQuantity and maxOrderQuantity
  • Precision: Quantity must respect quantityDecimalPoints and quantityTicks
  • Price: Must respect priceDecimalPoints and priceTicks
  • Status: Pair must be OPEN to trade

Usage Pattern

Fetch pairs to understand available markets and get IDs for orders:

GET /api/rest/v1/pairs
→ Returns list with id, symbol, base/quote instruments, constraints
→ Use the `id` field when placing orders

ID References Across APIs

Most API operations require entity IDs obtained from previous queries:

OperationRequired IDsHow to Obtain
List balancessubAccountIdGET /sub-accounts → use id field
Place ordersubAccountId, pairIdGET /sub-accounts, GET /pairs → use id fields
Generate deposit addresssubAccountId, instrumentIdGET /sub-accounts, GET /instruments → use id fields
Initiate withdrawalsubAccountId, instrumentIdGET /sub-accounts, GET /instruments → use id fields

Typical Flow

  1. Authenticate → Receive JWT token
  2. Get Sub-Accounts → Obtain sub-account id for your portfolio
  3. Get Instruments → Obtain instrument id for assets you need
  4. Get Pairs → Obtain pair id for trading pairs
  5. Execute Operations → Use collected IDs in trading/payment endpoints

Entity Lifecycle

Creating a Trading Setup

1. User registers/is created
   └─► User linked to Client Account

2. Client Account completes KYC
   └─► verificationStatus: UNVERIFIED → VERIFIED

3. Sub-Account created
   └─► Sub-account ready for trading

4. User granted Sub-Account access
   └─► Permissions assigned (read, trade, withdraw, etc.)

5. Trading enabled
   └─► User can place orders on permitted pairs

Permission Checks

Every API request validates:

  1. Authentication: Valid JWT token with user identity
  2. User Status: User must be ACTIVE
  3. Client Account: Must be ACTIVE and VERIFIED (for trading)
  4. Sub-Account Access: User must have access to the sub-account
  5. Operation Permission: User must have required permission (trade, withdraw, etc.)
  6. Resource Constraints: Pair restrictions, trading limits, etc.

Permission Model

Permissions are controlled through a combination of Actions and Domains.

Actions

Actions define what operations a user can perform:

ActionDescriptionRequires MFA
readView dataNo
writeModify dataYes
executeExecute operationsNo
tradePlace and manage ordersYes
replaceReplace existing ordersYes
depositInitiate depositsYes
withdrawInitiate withdrawalsYes
convertConvert between instrumentsYes
manageManage users and sub-accountsYes

Domains

Domains define the scope where permissions apply. Each domain is scoped to a client account and optionally a sub-account:

DomainScopeDescription
private/generalClient AccountGeneral client account operations
private/subaccountSub-AccountSub-account specific operations (balances, orders)
private/settingsClient AccountAccount settings and preferences
private/pairSub-AccountTrading pair access within a sub-account
private/instrumentClient AccountInstrument-level operations
private/investorClient AccountInvestor profile operations
publicGlobalPublic data (prices, pairs, instruments)

How Permissions Work

Permissions are evaluated against a domain path that includes:

  • User type (fo for Front Office, bo for Back Office)
  • Domain type (e.g., private/subaccount)
  • Client Account ID
  • Sub-Account ID (for sub-account scoped domains)

For example, to place a trade, a user needs:

  1. trade action on the private/subaccount domain for that sub-account
  2. trade action on the private/pair domain for the trading pair
  3. trade action on the private/instrument domain for both base and quote instruments



  © 2025 Taurus SA. All rights reserved.