Skip to content
MyStocks Developers
API v1

API v1

Current stable contract

Versioning policyRelease changelog
Sandbox console
Trading API

Bonds & Funds

Beyond equities — fixed-income instruments (government bonds, T-bills, Eurobonds, commercial papers), money-market and yield funds with fund-specific redemption terms, and curated private-credit and pre-IPO opportunities. Subscribe and redeem via sub-account endpoints.

Beyond equities, the Partner API provides access to fixed-income instruments, open-ended funds, and curated private-market opportunities. All subscriptions and redemptions are handled via sub-account endpoints.

Subscribe
POST /users/{userId}/subscribe
→
PENDING
USD reserved
→
COMPLETED
units allocated

The full transition table is in Order & Money Lifecycles.

Bonds

List all available fixed-income instruments — government bonds, T-bills, Eurobonds, infrastructure bonds, and commercial papers. Filter by ?instrumentType=TREASURY_BILL (or BOND | EUROBOND | COMMERCIAL_PAPER | INFRASTRUCTURE_BOND), ?currency=, or ?exchange=.

GET

/bonds

List bonds & fixed income

Full endpoint documentation
Sandbox availablelistBonds

Returns all available bonds, treasury bills, and fixed-income instruments. Includes coupon rate, maturity date, minimum investment, and current yield.

Parameters

instrumentTypestringquery
currencystringquery
exchangestringquery

Headers

AuthorizationstringRequired

Bearer sk_sandbox_<your_key> for sandbox requests.

Response fields

bondsobject[]Required
bonds[].idstringRequired
bonds[].namestring | nullRequired
bonds[].symbolstring | nullRequired
bonds[].issuerstring | nullRequired
bonds[].instrumentTypestringRequired
bonds[].assetTypestringRequired
bonds[].currencystring | nullRequired
bonds[].faceValuenumberRequired
bonds[].pricePerUnitnumberRequired
bonds[].couponRatenumber | nullRequired

Percentage points: 12.5 means 12.5%.

bonds[].currentYieldnumber | nullRequired
bonds[].yieldToMaturitynumber | nullRequired
bonds[].minInvestmentnumber | nullRequired
bonds[].maturityDatestring | nullRequired
bonds[].exchangestring | nullRequired
bonds[].statusstringRequired
bonds[].descriptionstring | nullRequired
countintegerRequired

Response codes

200Bond list.
GET

/bonds/{id}

Bond detail

Full endpoint documentation
Sandbox availablegetBonds

Returns full detail for a specific bond or fixed-income instrument.

Parameters

idstringpathRequired

Bond document ID from the list endpoint.

Example: ke_tbill_91d_2026

Headers

AuthorizationstringRequired

Bearer sk_sandbox_<your_key> for sandbox requests.

Response fields

idstringRequired
namestring | nullRequired
symbolstring | nullRequired
issuerstring | nullRequired
instrumentTypestringRequired
assetTypestringRequired
currencystring | nullRequired
faceValuenumberRequired
pricePerUnitnumberRequired
couponRatenumber | nullRequired

Percentage points: 12.5 means 12.5%.

currentYieldnumber | nullRequired
yieldToMaturitynumber | nullRequired
minInvestmentnumber | nullRequired
maturityDatestring | nullRequired
exchangestring | nullRequired
statusstringRequired
descriptionstring | nullRequired

Response codes

200Bond detail.
404Bond not found.

Funds

The list returns active published managed funds, using the same catalogue in Sandbox and Live. Sandbox subscriptions and balances remain virtual. Filter with category and currency, for example GET /funds?category=SPECIAL_FUND&currency=USD. ETFs use the separate /etfs endpoint.

pricePerUnit is in the fund currency; yieldApy is a decimal fraction (0.125 means 12.5%), not a guaranteed return or YTD performance. region is a descriptive label, not an ISO country code. Unavailable fields are null. Do not assume country, nav, navUsd or performance history is present. Get the fund detail to review redemption terms: only redemptionType: "instant" credits the wallet in the redemption call. Other terms must not be presented as instant liquidity.

GET

/funds

List active managed funds

Full endpoint documentation
Sandbox availablelistFunds

Returns active managed funds from the published catalogue. Sandbox reads the same catalogue; subscriptions and balances remain virtual. Returns pricePerUnit, yieldApy (decimal fraction, nullable), operator, region and minimum investment. Missing values remain null; region is not an ISO country code. ETFs are listed separately at /etfs. Only category and currency filters are supported.

Parameters

categoryMONEY_MARKET | SPECIAL_FUND | YIELD_FUND | OPPORTUNITY_FUNDquery

Filter by managed fund category.

currencystringquery

Example: USD

Headers

AuthorizationstringRequired

Bearer sk_sandbox_<your_key> for sandbox requests.

Response fields

fundsobject[]Required
funds[].idstringRequired
funds[].statusstringRequired

Current catalogue availability state. Only ACTIVE funds accept new subscriptions.

funds[].namestringRequired
funds[].categorystring | nullRequired
funds[].operatorstring | nullRequired
funds[].regionstring | nullRequired
funds[].pricePerUnitnumber | nullRequired

Published unit price in the fund currency.

funds[].yieldApynumber | nullRequired

Published APY as a decimal fraction; 0.125 means 12.5%. Not a YTD return or guaranteed return.

funds[].minInvestmentnumber | nullRequired
funds[].currencystring | nullRequired
funds[].descriptionstring | nullRequired
funds[].slugstring | nullRequired
funds[].legalStructurestring | nullRequired
funds[].logostring | nullRequired
funds[].createdAtstring | nullRequired
countintegerRequired

Response codes

200Fund list.
GET

/funds/{id}

Fund detail

Full endpoint documentation
Sandbox availablegetFunds

Returns full details for a specific fund or ETF.

Parameters

idstringpathRequired

Example: FUND_ID_FROM_CATALOGUE

Headers

AuthorizationstringRequired

Bearer sk_sandbox_<your_key> for sandbox requests.

Response fields

idstringRequired
statusstringRequired

Current catalogue availability state. Only ACTIVE funds accept new subscriptions.

namestringRequired
categorystring | nullRequired
operatorstring | nullRequired
regionstring | nullRequired
pricePerUnitnumber | nullRequired

Published unit price in the fund currency.

yieldApynumber | nullRequired

Published APY as a decimal fraction; 0.125 means 12.5%. Not a YTD return or guaranteed return.

minInvestmentnumber | nullRequired
currencystring | nullRequired
descriptionstring | nullRequired
slugstring | nullRequired
legalStructurestring | nullRequired
logostring | nullRequired
createdAtstring | nullRequired

Response codes

200Fund detail.

Opportunities

Curated private-credit deals and pre-IPO allocations, merged from both collections and sorted newest first. Each deal exposes target return, minimum commitment, risk level, and funding progress. The detail route resolves by document ID or URL slug. Subscribe via POST /users/{userId}/subscribe with assetType: "OPPORTUNITY" or "PRE_IPO".

GET

/opportunities

Private credit & pre-IPO

Full endpoint documentation
Sandbox availablelistOpportunities

Returns open private credit deals and pre-IPO opportunities available to your sub-accounts. Each deal has a minimum ticket size, close date, and target return.

Parameters

typeALL | PRE_IPO | OPPORTUNITYquery

Example: ALL

Headers

AuthorizationstringRequired

Bearer sk_sandbox_<your_key> for sandbox requests.

Response fields

opportunitiesobject[]Required
opportunities[].idstringRequired
opportunities[].assetTypePRE_IPO | OPPORTUNITYRequired
opportunities[].namestring | nullRequired
opportunities[].currencystringRequired
opportunities[].expectedReturnnumber | string | nullRequired
opportunities[].minInvestmentnumber | nullRequired
opportunities[].pricePerSharenumber | null
opportunities[].minimumSharesnumber | null
opportunities[].catalogueSourcePUBLISHED | SYNTHETIC

Sandbox only. Published catalogue information or a synthetic demonstration product.

opportunities[].simulationOnlyboolean

Sandbox only. Does not create a real IPO reservation.

opportunities[].commitmentCurrencyUSD
opportunities[].minimumCommitmentUsdnumber | null
opportunities[].subscriptionAvailableboolean
opportunities[].subscriptionRestrictionstring | null
opportunities[].targetAmountnumber | nullRequired
opportunities[].currentRaisednumber | nullRequired
opportunities[].riskLevelstring | nullRequired
opportunities[].statusstring | nullRequired
opportunities[].descriptionstring | nullRequired
opportunities[].maturityDatestring | nullRequired
opportunities[].expectedExitDatestring | nullRequired
opportunities[].createdAtstring | nullRequired
countintegerRequired

Response codes

200Open opportunities.
GET

/opportunities/{id}

Opportunity or pre-IPO detail

Full endpoint documentation
Sandbox availablegetOpportunity

Returns full detail for a single private market deal or pre-IPO offering. Resolves from the opportunities collection first, then preIPOOfferings. Accepts document ID or slug.

Parameters

idstringpathRequired

Opportunity document ID or URL slug.

Example: acme-series-b-2026

Headers

AuthorizationstringRequired

Bearer sk_sandbox_<your_key> for sandbox requests.

Response fields

idstringRequired
assetTypePRE_IPO | OPPORTUNITY
namestring | null
currencystring
expectedReturnnumber | string | null
minInvestmentnumber | null
pricePerSharenumber | null
minimumSharesnumber | null
catalogueSourcePUBLISHED | SYNTHETIC

Sandbox only. Published catalogue information or a synthetic demonstration product.

simulationOnlyboolean

Sandbox only. Does not create a real IPO reservation.

commitmentCurrencyUSD
minimumCommitmentUsdnumber | null
subscriptionAvailableboolean
subscriptionRestrictionstring | null
targetAmountnumber | null
currentRaisednumber | null
riskLevelstring | null
statusstring | null
descriptionstring | null
maturityDatestring | null
expectedExitDatestring | null
createdAtstring | null

Response codes

200Opportunity detail.
404Opportunity not found.
POST

/users/{userId}/subscribe

Subscribe (bond/fund/deal)

Full endpoint documentation
Sandbox availablecreateSubscribe

Subscribes a sub-account to a bond, money market fund, or private credit/pre-IPO deal. Funds are escrowed from the sub-account wallet on submission. For FUND subscriptions: specify units. For OPPORTUNITY / PRE_IPO: specify amount in USD. The sub-account must be KYC-verified (kycStatus: VERIFIED).

Parameters

userIdstringpathRequired

Example: usr_abc123

Headers

AuthorizationstringRequired

Bearer sk_sandbox_<your_key> for sandbox requests.

Idempotency-KeystringheaderRequired

Unique string that makes write calls safe to retry on network failure. Required for money movement, trading, KYC, subscriptions, and webhook creation. Deduplicated for 24 hours -- duplicate keys return the cached response. HTTP 409 if a concurrent request with the same key is still in progress.

Example: dep_user42_1743152580

Request body

fundingWalletCurrencystring

Convert explicitly to USD before submitting an order

assetTypeBOND | FUND | OPPORTUNITY | PRE_IPORequired

Asset class to subscribe to.

Example: "FUND"

assetIdstringRequired

Firestore document ID. Obtain from the list endpoints (/bonds, /funds, /opportunities).

Example: "FUND_ID_FROM_CATALOGUE"

unitsnumber

Whole units to subscribe. Required for BOND and FUND.

Example: 500

amountnumber

USD commitment amount. Required for OPPORTUNITY and PRE_IPO.

Example: 1000

Response fields

messagestring
subscriptionIdstring
amountEscrowednumber

Response codes

201Subscription created.
400Insufficient wallet balance.
403KYC not verified.

Subscribe

Subscribe a sub-account to a bond, fund, private deal, or pre-IPO. The sub-account must be KYC-verified. Funds are escrowed immediately; the position appears in the portfolio once confirmed. Requires an Idempotency-Key.

POST

/users/{userId}/subscribe

Subscribe (bond/fund/deal)

Full endpoint documentation
Sandbox availablecreateSubscribe

Subscribes a sub-account to a bond, money market fund, or private credit/pre-IPO deal. Funds are escrowed from the sub-account wallet on submission. For FUND subscriptions: specify units. For OPPORTUNITY / PRE_IPO: specify amount in USD. The sub-account must be KYC-verified (kycStatus: VERIFIED).

Parameters

userIdstringpathRequired

Example: usr_abc123

Headers

AuthorizationstringRequired

Bearer sk_sandbox_<your_key> for sandbox requests.

Idempotency-KeystringheaderRequired

Unique string that makes write calls safe to retry on network failure. Required for money movement, trading, KYC, subscriptions, and webhook creation. Deduplicated for 24 hours -- duplicate keys return the cached response. HTTP 409 if a concurrent request with the same key is still in progress.

Example: dep_user42_1743152580

Request body

fundingWalletCurrencystring

Convert explicitly to USD before submitting an order

assetTypeBOND | FUND | OPPORTUNITY | PRE_IPORequired

Asset class to subscribe to.

Example: "FUND"

assetIdstringRequired

Firestore document ID. Obtain from the list endpoints (/bonds, /funds, /opportunities).

Example: "FUND_ID_FROM_CATALOGUE"

unitsnumber

Whole units to subscribe. Required for BOND and FUND.

Example: 500

amountnumber

USD commitment amount. Required for OPPORTUNITY and PRE_IPO.

Example: 1000

Response fields

messagestring
subscriptionIdstring
amountEscrowednumber

Response codes

201Subscription created.
400Insufficient wallet balance.
403KYC not verified.

Redeem

Redeem fund units back to the sub-account wallet. For funds with redemptionType: "instant", proceeds credit immediately. Units in a lock-up period cannot be redeemed — check unlockedUnits in the portfolio response first.

POST

/users/{userId}/redeem

Redeem fund units

Full endpoint documentation
Sandbox availablecreateRedeem

Redeems fund units back to the sub-account wallet. Proceeds are credited at the current NAV once the redemption is processed by the fund manager (typically T+1 for MMFs).

Parameters

userIdstringpathRequired

Example: usr_abc123

Headers

AuthorizationstringRequired

Bearer sk_sandbox_<your_key> for sandbox requests.

Idempotency-KeystringheaderRequired

Unique string that makes write calls safe to retry on network failure. Required for money movement, trading, KYC, subscriptions, and webhook creation. Deduplicated for 24 hours -- duplicate keys return the cached response. HTTP 409 if a concurrent request with the same key is still in progress.

Example: dep_user42_1743152580

Request body

holdingIdstringRequired

Sub-account fund holding doc ID (same as the fund Firestore doc ID).

Example: "FUND_ID_FROM_CATALOGUE"

unitsToRedeemnumberRequired

Units to redeem. Must not exceed available unlocked units.

Example: 200

Response fields

messagestring
redemptionIdstring
unitsRedeemednumber

Response codes

200Redemption queued.

Catalogue field conventions

Bonds use instrumentType, currency and exchange filters; country and type are not bond filters. Coupon, current-yield and yield-to-maturity rates are percentage points (15.8 means 15.8%). Missing values are null.

Funds use category and currency, not type. The list and detail share canonical operator, pricePerUnit, yieldApy, minInvestment, region, legalStructure and logo fields. Legacy manager and nav records are normalized without inventing returns or currency conversions. The response count is a sibling of funds.

Opportunities accept type=ALL, PRE_IPO or OPPORTUNITY; omitting the filter means ALL. Unknown types return 400. Responses use assetType, expectedReturn, maturityDate and expectedExitDate, with unknown values null. An expected return is an instrument-specific estimate, not a guaranteed return; consult the offering terms for its convention.

Sandbox subscription and redemption acceptance

Use the reference app subscription form for whole-unit bond and fund requests or USD opportunity/pre-IPO commitments. Select an ID from the corresponding environment's catalogue. Sandbox opportunities, including PRE_IPO fixtures, use the Sandbox opportunity catalogue; production PRE_IPO uses the live offerings collection.

Fund prices are converted from the stated instrument currency using configured FX. A valid explicit navUsd is already USD. Missing NAV, currency or required FX returns PRICE_UNAVAILABLE; there is no $1 fallback. Read minimums in their stated currency.

Wallet reservation and holding changes occur atomically. Concurrent requests with different idempotency keys cannot overspend the wallet. Production subscription orders remain PENDING for the existing approval workflow; they do not create filled holdings at request time. Sandbox subscriptions simulate a fill and emit order.filled.

Only available FUND units can be redeemed by this route. Sandbox redemption atomically reduces units and credits the wallet, retains proportional remaining cost basis, and emits wallet.credited. Concurrent redemptions cannot credit the same units twice. Frozen or closed accounts cannot subscribe or redeem. These simulations do not certify provider settlement or live fund terms.

Was this page useful?

Your signal helps us tighten partner onboarding docs.

Send note

Last updated on

On this page