/products and /product-orders. An order reserves the commercial terms for a product; confirming it debits the entity’s funding account and creates the capital account, which is tracked through to payout.
The available capital products are:
- Fixed Return: Invest a fixed principal at a rate locked in at the point of purchase, for a set tenor of 7, 30, 60, 90, or 180 days. Interest accrues daily and is paid out at maturity, or on an early liquidation subject to a penalty on accrued interest.
- Share Offering: Purchase whole shares at a fixed offer price. Shares are held for a lock period before they become transferable, and inventory is reserved at the point of order.
The investment flow
- Browse. Call
GET /productsto list the products visible to the entity, thenGET /products/:idfor the full terms and the documents to affirm. - Reserve. Call
POST /product-orders. This creates a 15-minute reservation holding an immutable commercial quote. No funds move at this stage. - Confirm. Call
POST /product-orders/:id/confirmbefore the reservation expires. Nuvion debits the funding wallet once, creates the capital account, and records aPURCHASEtransaction. - Track. Use
GET /product-orders,GET /capital-portfolio, andGET /capital-transactionsto show holdings, order history, and transaction history. - Withdraw. For Fixed Return, call
GET /product-orders/:id/withdrawal/previewto show the payout, thenPOST /product-orders/:id/withdrawalto initiate it.
All monetary values are expressed in the smallest currency unit.
50000000 = ₦500,000.00.Capital order statuses
Capital account lifecycle
Fixed Return accounts:
Share Offering accounts:
Browse available products
GET /products returns only the products the authenticated entity is eligible for. Hidden products, products whose owner is inactive, and share offerings with no remaining inventory are excluded. Sold-out share offerings that still hold inventory are returned with availability.status set to sold_out and cannot be ordered.
config but never include product documents. Fetch GET /products/:id for the detail view, which adds the config.documents array to affirm at order time.
Reserve an investment
Creating an order reserves the commercial terms for 15 minutes. The product type is resolved fromproduct_id and determines which amount field is accepted: principal for Fixed Return, amount for Share Offering. Nuvion rejects the wrong one.
Response
Share Offering inventory: if the requested shares exceed the remaining inventory, the order is allocated down to what is available. The returned quote carries the adjusted
allocated_shares and total_debit.Confirm the order
Confirmation is the only step that moves funds. Nuvion re-evaluates eligibility, product and owner status, and the sale window before any debit, then debits the funding wallet using a deterministic transfer reference.RECOVERY_REQUIRED and Nuvion reconciles it rather than re-debiting; further calls return 409 error_transfer_already_processing.
Track the portfolio
GET /capital-portfolio returns the authenticated entity’s invested totals grouped by currency. Nuvion accrues Fixed Return interest from the account terms at request time; Share Offering value uses the units held and the latest market price.
total_return and current_value are null, not zero, for a currency when any included holding lacks a valid valuation, which happens for a share offering before its first price update.
Withdraw
Withdrawal applies to Fixed Return accounts. Preview the payout first (it’s read-only and has no side effects), then initiate it. Nuvion selects the path from the account state and the current time. Before maturity, anACTIVE account that is unlocked and past its earliest action day follows the early-liquidation rules and incurs the penalty. From MATURED, the contractual maturity payout applies with no penalty.
POST to the same path without /preview. The response is the updated order detail, including the new capital_account.lifecycle state.
CLOSING or terminal returns its current state rather than starting a second payout. Nuvion rejects withdrawal with 400 error_operation_invalid_for_state for locked accounts, non-Fixed-Return accounts, products with early withdrawal disabled, and requests made before the earliest action day.
Transaction history
Nuvion records every movement on a capital account as an immutableCapitalTransaction. Pass the account ULID as the required capital_id filter.
