Skip to main content
Capital lets an entity put idle balances to work through the Capital APIs, /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

  1. Browse. Call GET /products to list the products visible to the entity, then GET /products/:id for the full terms and the documents to affirm.
  2. Reserve. Call POST /product-orders. This creates a 15-minute reservation holding an immutable commercial quote. No funds move at this stage.
  3. Confirm. Call POST /product-orders/:id/confirm before the reservation expires. Nuvion debits the funding wallet once, creates the capital account, and records a PURCHASE transaction.
  4. Track. Use GET /product-orders, GET /capital-portfolio, and GET /capital-transactions to show holdings, order history, and transaction history.
  5. Withdraw. For Fixed Return, call GET /product-orders/:id/withdrawal/preview to show the payout, then POST /product-orders/:id/withdrawal to 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.
List responses carry commercial terms in 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 from product_id and determines which amount field is accepted: principal for Fixed Return, amount for Share Offering. Nuvion rejects the wrong one.
See Create a capital order for the full field-by-field request schema.

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.
This endpoint does not require a request body. The stored quote is authoritative: Nuvion never accepts client-supplied amounts, rates, inventory, or agreements. Retries are safe. A repeated call resumes from the persisted transfer and order state and never issues a second debit. If the debit succeeds but the records that follow it cannot be written, the order moves to 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, an ACTIVE 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.
To initiate the payout, POST to the same path without /preview. The response is the updated order detail, including the new capital_account.lifecycle state.
This endpoint does not require a request body. The stored account snapshot is authoritative; Nuvion never accepts client-supplied amounts, rates, or settlement accounts. An account that is already 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 immutable CapitalTransaction. Pass the account ULID as the required capital_id filter.
Transaction metadata is redacted from the entity’s view.

Notifications

Nuvion emails the entity on the key lifecycle events for their investment: confirmation of the investment, an upcoming maturity reminder, maturity, and early liquidation. An investment certificate is available for download once an order is approved.