Skip to main content
This guide covers portfolio construction — from the Investment Policy Statement through to automated investing.

Step 1: Create an Investment Policy Statement

The IPS defines the rules that govern the portfolio. It’s informed by the risk assessment and financial plan.
curl -X POST "$BASE_URL/wealth/accounts/$ACCOUNT_ID/investment-policy" \
  -H "Authorization: Basic $AUTH" \
  -H "Content-Type: application/json" \
  -d '{
    "risk_profile": {
      "risk_tolerance": "moderate",
      "risk_score": 5,
      "volatility_tolerance": "medium"
    },
    "time_horizon": {
      "years": 20,
      "category": "long_term"
    },
    "investment_objectives": {
      "primary": "capital_appreciation",
      "secondary": ["income_generation"],
      "target_annual_return": "7.00"
    },
    "target_allocation": {
      "equities": { "target_percent": "50.00", "min_percent": "40.00", "max_percent": "60.00" },
      "fixed_income": { "target_percent": "25.00", "min_percent": "20.00", "max_percent": "30.00" },
      "alternatives": { "target_percent": "5.00", "min_percent": "0.00", "max_percent": "10.00" }
    },
    "constraints": {
      "liquidity_requirements": { "minimum_cash_percent": "5.00", "emergency_fund_months": 6 },
      "tax_considerations": { "tax_loss_harvesting": true, "tax_bracket": "24", "prefer_tax_advantaged": true },
      "rebalancing_policy": { "frequency": "quarterly", "threshold_percent": "5.00", "tax_aware": true }
    }
  }'

Validate before creating the portfolio

curl -X POST "$BASE_URL/wealth/accounts/$ACCOUNT_ID/investment-policy/validate" \
  -H "Authorization: Basic $AUTH"
Validation checks:
  • Target allocations sum to 100%
  • Min/max bands are consistent
  • Risk tolerance aligns with allocation
  • Rebalancing policy is valid

Step 2: Create the portfolio

curl -X POST "$BASE_URL/wealth/accounts/$ACCOUNT_ID/portfolios" \
  -H "Authorization: Basic $AUTH" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Growth Portfolio",
    "initial_investment": "10000.00"
  }'
The portfolio is constructed according to the IPS asset allocation targets.

Step 3: Set up auto-invest

Configure recurring investments:
curl -X POST "$BASE_URL/wealth/accounts/$ACCOUNT_ID/auto-invest" \
  -H "Authorization: Basic $AUTH" \
  -H "Content-Type: application/json" \
  -d '{
    "portfolio_id": "pf_abc123",
    "amount": "2000.00",
    "frequency": "monthly",
    "day_of_month": 1,
    "funding_source": "wallet"
  }'
Ensure the wallet has sufficient funds on the scheduled date, or set up recurring deposits to match.

Step 4: Enable dividend reinvestment

curl -X PUT "$BASE_URL/wealth/accounts/$ACCOUNT_ID/portfolios/$PORTFOLIO_ID/drip" \
  -H "Authorization: Basic $AUTH" \
  -H "Content-Type: application/json" \
  -d '{ "enabled": true }'

Monitoring the portfolio

Summary

curl -X GET "$BASE_URL/wealth/accounts/$ACCOUNT_ID/portfolios/$PORTFOLIO_ID/summary" \
  -H "Authorization: Basic $AUTH"

Holdings

curl -X GET "$BASE_URL/wealth/accounts/$ACCOUNT_ID/portfolios/$PORTFOLIO_ID/holdings" \
  -H "Authorization: Basic $AUTH"

Performance

curl -X GET "$BASE_URL/wealth/accounts/$ACCOUNT_ID/portfolios/$PORTFOLIO_ID/performance" \
  -H "Authorization: Basic $AUTH"

Rebalancing

Check if the portfolio has drifted beyond the IPS threshold:
curl -X GET "$BASE_URL/wealth/accounts/$ACCOUNT_ID/portfolios/$PORTFOLIO_ID/rebalancing" \
  -H "Authorization: Basic $AUTH"
Trigger a rebalance:
curl -X POST "$BASE_URL/wealth/accounts/$ACCOUNT_ID/portfolios/$PORTFOLIO_ID/rebalancing" \
  -H "Authorization: Basic $AUTH" \
  -H "Content-Type: application/json" \
  -d '{ "reason": "quarterly_review" }'

Managing auto-invest schedules

# Pause
curl -X POST "$BASE_URL/wealth/accounts/$ACCOUNT_ID/auto-invest/$SCHEDULE_ID/pause" \
  -H "Authorization: Basic $AUTH"

# Resume
curl -X POST "$BASE_URL/wealth/accounts/$ACCOUNT_ID/auto-invest/$SCHEDULE_ID/resume" \
  -H "Authorization: Basic $AUTH"

# Update amount
curl -X PUT "$BASE_URL/wealth/accounts/$ACCOUNT_ID/auto-invest/$SCHEDULE_ID" \
  -H "Authorization: Basic $AUTH" \
  -H "Content-Type: application/json" \
  -d '{ "amount": "3000.00" }'

Next steps