Liquidity.io

Regulatory Compliance

SEC regulations, accreditation enforcement, and resale restrictions

Liquidity.io LLC is a registered broker-dealer operating under SEC regulations. All secondary trading of private securities requires compliance with the Securities Act of 1933 and applicable state "blue sky" laws.

Reference document: Secondary Private Resale Disclosure and Investor Acknowledgment

Accreditation Enforcement

Primary Market (BUY orders)

Asset accreditationTypeRequirementVerification
506c (Reg D)Verified accredited ONLYSimplici third-party verification, accreditationStatus === 'completed'
506b (Reg D)Self-certified accreditedSelf-certification via Simplici, accreditationStatus === 'completed'
Retail / nullNo accreditation needed--

Code Enforcement Points

All order creation paths are gated:

PathServiceFile
Standard ordersexchange.apisrc/services/orders/service.ts -- create()
Order modificationsexchange.apisrc/services/orders/service.ts -- update()
Pre-IPO ordersexchange.apisrc/services/pre-ipo-orders/service.ts -- create()
Bulk ordersexchange.apiRouted through orders.create()

Fail-closed: If buyer details cannot be fetched, the order is rejected. Per Disclosure 1.2: "the Firm may decline to participate in any transaction if such information is not provided to its satisfaction."

Implementation Detail

// Asset-level accreditation gate (orders/service.ts)
const ACCREDITED_ASSET_TYPES = ['506b', '506c'];
const assetAccrType = assetExists?.accreditationType;

if (assetAccrType && ACCREDITED_ASSET_TYPES.includes(assetAccrType)) {
  const buyerDetails = await RegCFBuyerEligibility.fetchBuyerDetails(userId, requestId, req);
  const isAccredited =
    ACCREDITED_ASSET_TYPES.includes(buyerDetails?.accreditationType ?? '') &&
    buyerDetails?.accreditationStatus === 'completed';

  if (!isAccredited) {
    return new BadRequest(
      `This asset requires ${assetAccrType} accreditation.`
    );
  }
}

Resale Restrictions

Default 12-Month Hold

Securities issued under Reg D and Reg CF are subject to a 12-month holding period. Enforced via restriction_end_date on sell order lots (FIFO tracking).

Resale Exemptions

RegulationExemptionStatus
Reg D 506(b/c)Unsolicited sale to accredited investors within 1 yearEnforced -- restricted lots require accredited buyer
Reg CFNon-accredited can sell to accredited within 1 yearEnforced -- isRestrictedOrder=true requires accredited buyer
Reg CFFamily member exemption (estate, gift, divorce)Not yet implemented
Reg SFree trading among non-US investorsNot yet implemented -- no geofencing
Reg SBlock US investor purchases during 1-year distributionNot yet implemented -- no geofencing

RegCF Investment Limits

Non-accredited investors are subject to SEC Reg CF investment caps:

  • Maximum of the greater of $2,500 or 5% of annual income/net worth
  • Accredited investors have no investment limit
  • Enforced via RegCFBuyerEligibility.checkInvestmentLimit()

Disclosure Requirements

Currently Enforced

  • Accredited investor verification at each transaction (Disclosure 1.1)
  • Fail-closed on verification failure (Disclosure 1.2)
  • Transfer restriction enforcement via restriction dates (Disclosure 2.2)
  • Portfolio ownership validation for sellers (Disclosure 9.1)

Future Implementation Needed

  • Signed disclosure acknowledgment before each secondary trade (Disclosure 11.1)
  • ROFR / issuer consent check at order creation time (Disclosure 5.2)
  • Reg S geofencing -- US vs non-US investor determination
  • Investor sophistication assessment beyond KYC

Bug History

Accreditation Bypass (Fixed 2026-03-18)

  • Root cause: Check only ran for RegCF offering type; RegD 506b/506c assets unguarded
  • Fix: Independent asset-level gate on all offering types
  • PRs: #2862 (dev), #2863+#2865 (alpha), #2864+#2866 (next)

Dividend Mislabeling (Fixed 2026-03-18)

  • Root cause: Disbursements used fortress ledger (INTERNAL) instead of disbursement-ledger (DISBURSEMENT)
  • Fix: Route through disbursement-ledger with DISBURSEMENT_TRANSFER signal

Pre-IPO Bypass (Fixed 2026-03-18)

  • Root cause: pre-ipo-orders endpoint had zero accreditation validation
  • Fix: Added same accreditation gate before Order.create()

E2E Test Coverage

TestFileWhat it validates
Accreditation gate (API)universe/e2e/23-accreditation-guard.spec.tsUnaccredited BUY on 506b/506c -- rejected
Pre-IPO gate (API)Same fileUnaccredited pre-IPO BUY -- rejected
Dividend labels (API)universe/e2e/24-dividend-labels.spec.tsNo INTERNAL transactions with DISBURSEMENT metadata
Dividend labels (UI)Same fileWallet shows "Dividend" label

Run:

E2E_BASE_URL=https://exchange.next.satschel.com npx playwright test e2e/23 e2e/24

On this page