Submit an Order

Create the transaction that commits an investor's dollars to an SPV, and handle every rule that can refuse it.

📘

Integrating through Apex AscendOS?

The product guidance on this page applies to you. The endpoints, fields and statuses are Monark's; use the AscendOS equivalents listed in Building on Apex AscendOS.

A subscription to an SPV is created as a transaction. This page covers the request, the rules that govern it, and the refusals your UI has to explain.

Creating the transaction is not the commitment. The investor is not bound until every required action is complete — see Transaction Actions.

An order ticket taking a dollar amount and showing estimated units

Monark endpoints used

MethodEndpointPurpose
POST/primary/v2/transactionCreate the subscription
GET/primary/v2/transaction/{id}Read it back
GET/primary/v2/transaction/investor/{investorId}List an investor's transactions
POST/primary/v2/transaction/{id}/rejectCancel, while it is still Pending

Before you submit

Two responsibilities sit with your platform, because Monark cannot see either of them:

  1. Check the cash and reserve it. Confirm the investor's balance covers the amount, and lock or debit it so the subscription is funded when the SPV closes. Monark never holds investor cash.
  2. Check eligibility. Regulation D offerings are for accredited investors. A Regulation S offering excludes US investors. Filter at the point of presentation, not at the point of order.

Create the transaction

POST /primary/v2/transaction
{
  "targetAssetType": "PreIPOCompanySPV",
  "targetId": "0194f0a1-0000-7000-8000-00000000001f",
  "side": "Subscription",
  "investorId": "0194f1a0-0000-7000-8000-000000000007",
  "amountReservedDollars": 25000,
  "referenceId": "ord_8f21c40a"
}

Send an IdempotencyKey header. Keys are cached for 24 hours, so a retry after a timeout returns the original response instead of creating a second subscription.

Expect 201. The response is the Transaction; its id is what the rest of the flow keys on, and its status will be Pending.

Request fields

FieldRequiredNotes
targetAssetTypeYesPreIPOCompanySPV for an SPV subscription
targetIdYesThe SPV's id
sideYesSubscription. Case-sensitive — not SUBSCRIPTION
investorId or accountIdYesExactly one. Sending both, or neither, is refused
amountReservedDollarsYesDollars, greater than zero, at most 2 decimal places
referenceIdNoYour own order identifier. Maximum 100 characters, and filterable on reads
externalAccountNumberNoYour account number. Valid only alongside investorId
financialAdvisorIdNoThe advisor on the transaction, where there is one

Note: An SPV transaction can only ever be a Subscription. Redemption and Transfer are supported for registered funds, not for SPVs.

Which identity to send

Send accountId when the investor holds more than one account — otherwise the request is refused with "The investor has multiple accounts. Supply AccountId through the v2 endpoint." For a single-account investor either works.

Joint and retirement accounts cannot subscribe to an SPV at all. Filter them out of the private markets experience rather than surfacing a refusal at the order form.

The amount rules

Three rules govern the amount, and each returns a message worth showing the investor verbatim.

RuleRefusal
At least the minimumInvestment amount is lower than the minimum commitment amount. Min amount - {min}
Not more than what remainsInvestment amount is greater than the remaining dollar allocation. Remaining - {remaining}
Seats availableNo seats remaining for the SPV.

The exception worth building for. When less than the minimum is left in the raise, the minimum no longer applies — but the last investor must take exactly what remains:

if (remainingDollarAllocation < minCommitmentAmount) {
  amount must === remainingDollarAllocation
} else {
  amount >= minCommitmentAmount && amount <= remainingDollarAllocation
}

Getting this wrong means the last slice of every raise is unsellable through your platform. Validate it client-side from minCommitmentAmount and remainingDollarAllocation on the SPV, and pre-fill the exact remainder when the condition holds.

The seat limit is the 99-investors-per-SPV cap that US private fund rules impose. An SPV can be seat-closed while dollars remain, so remainingDollarAllocation > 0 does not mean investable. numberOfSeatsRemaining lets you anticipate it; treat the response as authoritative and present a seat-closed SPV as closed rather than as an error.

Estimating shares

Divide the amount by the SPV's allInPricePerShare. That is the price the subscription fills at, and it already includes the one-time management fee and the pro-rata share of the per-SPV admin expense.

Label it as an estimate. SPV interests are fractional, so there is no rounding to a whole share, but the final allocation is Monark's to compute.

Everything that can refuse the request

Checked in this order. The first failure is returned.

#CheckRefusal
1The SPV existsFailed to create Investor Subscription as the SPV does not exist
2The investor exists and is yoursFailed to create Investor Subscription as the investor doesnt exist
3Registration type is supported{type} investors are not supported for PreIPO SPV subscriptions.
4The account resolvesAccount not found. / The investor does not have an account. / The investor has multiple accounts. Supply AccountId through the v2 endpoint. / The account is closed.
5The advisor is valid for the investorvaries
6The investor is active and accreditedInvestor is not active / Accreditation not set / Accreditation has expired / Investor is not accredited
7Regulation S and a US investorCannot create subscription as the SPV is exempt from accredited investor requirements and the investor is US based
8Accreditation valid for the registration… the accreditation status of the investor is not valid …
9Your platform has approved the SPVFailed to create Investor Subscription as the Partner has not approved this SPV
10The investor's institution has access… the FinancialInstitution not permitted access to SPV
11No existing live subscriptionActive subscription already exists for this SPV and Investor (409)
12Stage, amount, minimum, seatsThe subscription was not valid as …
13The SPV has a priceCannot create subscription as Spv does not have an AllInPricePerShare set

Important: Check 11 catches most integrations out. One live subscription per investor per SPV. To change an amount, update or cancel the existing transaction — do not create a second one.

There are no machine-readable reason codes on these responses. The HTTP status and the detail string are what you have, which is why the strings above are quoted exactly.

Cancelling

POST /primary/v2/transaction/{id}/reject?targetAssetType=PreIPOCompanySPV

A partner can cancel only while the transaction is Pending. Once it reaches Processing the commitment is binding and only Monark can reverse it — a partner attempt is refused with "Cannot reject subscription in Processing state".

Tell the investor this before they complete their final action, not after. The moment of no return is the last acknowledgement, and it does not look like one.

The SPV must also still be in PRIMARY_FUNDRAISE or PRE_CLOSE_REVIEW for a cancellation to be accepted.

After creation

A Pending transaction reserves nothing. Allocation and seats are consumed at Processing, not at creation, so two investors can both hold pending orders that together exceed what is left. The race resolves when each is signed, and the loser fails.

That is why a subscription accepted at creation can still be refused later. Handle the late failure: the transaction lands in Failed, and the cash you reserved has to be released.

Follow the transaction by webhook rather than polling. See Webhooks.

Next steps


Did this page help you?