Wealth2B

API Introduction

Wealth2B provides an institutional investment API that enables fintechs and neobanks to launch regulated products in the U.S.

Our infrastructure unifies advisory, custody, and execution, simplifying access to interest-bearing accounts, real-time trading, and automated portfolios.

🌐

Documented Environment

Complete staging environment with Swagger documentation for testing and integration.

πŸ”’

Secure Authentication

JWT-based authentication with API key and secret for secure access to all endpoints.

πŸ“Š

Real-time Data

WebSocket connections for live market data and webhook events for system updates.

Overview: How Integration Works

This overview walks you through the main steps to integrate the Wealth2B API and offer investments from your own app. It explains how onboarding, account setup, funding, and product activation connect into one seamless flow.

1

Register and verify identity (KYC)

Every integration begins by creating a client profile and completing KYC. There are two possible paths for this step.

Use Wealth2B’s built-in KYC

Create the person record, then upload supporting documents.

POST /peoplePOST /people/{id}/documents
Reuse your existing KYC

If your platform already collects user identity data, simply pass it through our API.

POST /people/{id}/kycPOST /people/{id}/kyc-raw

If all requirements are met, approval is typically instant Β· Monitor KYC/approval updates via webhooks (People status events).

2

Open investment account

Once the user is verified, create a dedicated investment account. This step also defines which product type the account will support.

  • Savings (FDIC Yield Account) – Earns daily interest from the moment funds arrive, with full liquidity.
  • Robo-advisor (Managed Portfolio) – Wealth2B automatically allocates and rebalances according to the user’s profile.
  • Trading (Self-Directed) – The user operates directly, but under real-time supervision and compliance rules.
POST /accountsPOST /accounts/{id}/close→ Read more about our products

Accounts are created with POST /accounts. Accounts can also be closed when needed via POST /accounts/{id}/close.

3

Fund the account

Before any investment activity, users must deposit funds. First, link a same-name bank account with POST /bank-accounts. Then initiate deposits or withdrawals using POST /money-movements.

Supported transfer methods depend on your configuration (INSTANT, ACH, Wire, SWIFT). In some cases, internal transfers can be used via POST /internal-transfers. β†’ Read more about funding options

POST /bank-accountsPOST /money-movementsPOST /internal-transfersGET /internal-transfers/search

Supported paymentType values include ACH, WIRE (BIC/ABA), and TRAVEL_RULE. For instant funding scenarios, you can create simulated funding via POST /money-movements.

4

Product activation logic

Depending on the product assigned to each account, different activation actions can be performed. Review the corresponding logic below for each product type.

πŸ’΅

Savings (FDIC Yield Account)

Once funds are settled, the account automatically starts generating daily yield. No further action is required.

πŸ€–

Robo Advisor - Automated Portfolio Management

The Robo Advisor automates investment management by matching each client with an appropriate portfolio based on risk preferences. Once assigned, Wealth2B handles rebalancing, monitoring, and reporting automatically.

1. Define the client’s risk level β€” Determine the level of risk each client is willing to take (consult our team about available risk profiling options).

2. Retrieve available portfolios β€” List all available portfolios and review their characteristics using:

GET /robo-advisor/portfoliosGET /robo-advisor/portfolios/{id}GET /robo-advisor/portfolios/{id}/flatten

3. Inspect underlying funds (optional) β€” Check the list of individual funds or ETFs that can appear in portfolios:

GET /robo-advisor/fundsGET /robo-advisor/funds/{id}

4. Assign a portfolio to the client’s account β€” Create a new association between a client’s Robo Advisor account and a chosen portfolio:

POST /robo-advisor/associationsPATCH /robo-advisor/associations/{id}/end

Once a portfolio is assigned, the Robo Advisor automatically executes periodic rebalancing according to target weights and market data.

5. Review plan and historical associations β€” Retrieve the client’s current and past portfolio assignments:

GET /robo-advisor/accounts/{accountId}/planGET /robo-advisor/accounts/{accountId}/plan/history
πŸ›’

Trading - Market Orders

The Trading API enables real-time execution and monitoring of market operations while ensuring full regulatory supervision. The process follows four sequential steps:

1. Access market data β€” Retrieve detailed and historical information about available assets before placing trades.

GET /market-data/assetsGET /market-data/assets/{symbol}GET /market-data/latest-pricesGET /market-data/historicalPOST /market-data/generate-websocket-token

2. Place and manage orders β€” Allow users to open, cancel, or review trading orders directly through your app’s interface.

POST /trading/ordersGET /trading/orders/{id}POST /trading/accounts/{accountId}/orders/{id}/cancel

3. Monitor positions β€” Access open or closed positions to display live portfolio data and unrealized P&L.

GET /trading/positionsGET /trading/positions/{id}GET /trading/positions/accounts/{accountId}GET /trading/positions/accounts/{accountId}/{symbol}POST /trading/positions/accounts/{accountId}/positions/{symbol}/close
5

Reporting and documents

Your app can retrieve both operational and client-facing information through the Reporting API. These endpoints allow you to query transactions, settlements, and documents β€” or enable users to download investment statements directly from your UI.

Operational data

Use these endpoints to retrieve transactional and system-level records for reporting or reconciliation.

GET /money-movements/searchGET /settlements/searchGET /internal-transfers/searchGET /people/{id}/accounts

Client-facing documents

Use this endpoint to let users download official investment statements and reports directly from your interface.

GET /people/documents/{id}/download

All reports and documents are available in real time and can be filtered by client, account, or date range.

Documented Environment

πŸ–₯️

Base URL (staging)

https://api.staging.wealth2b.com

Swagger URL (staging)

https://swagger.staging.wealth2b.com

Authentication

Login Process

POST /auth/login

Requires apiKey and apiSecret. Returns a JWT (access_token).

GET /auth/profile

Returns user information if the token is valid.

Important

All endpoints require Bearer Token (JWT) in the Authorization header.

Functional Relationships Map

CategoryWorkflowDescription
OnboardingPeople registrationCreate people (/people), open investment account (/accounts), upload KYC documents, store KYC information.
Identity verificationUse /people/{peopleId}/kyc or /people/{peopleId}/kyc-raw for external verification data.
FundingACH / WIRE fundingAdd bank account (/bank-accounts), then create transfer (/money-movements).
Instant fundingCreate simulated funding via POST /money-movements.
Internal transfersMove funds between accounts via /internal-transfers.
TradingMarket data lookupList assets (/market-data/assets), get details (/market-data/assets/{symbol}), fetch latest prices (/market-data/latest-prices), fetch historical data (/market-data/historical).
Real-time streamingGenerate WebSocket token (/market-data/generate-websocket-token) and connect to wss://api.staging.wealth2b.com/market-data.
Place orderSubmit orders (/trading/orders).
Manage ordersGet order details (/trading/orders/orders/{id}), cancel active order (/trading/orders/accounts/{accountId}/orders/{id}/cancel).
PositionsGet all positions (/trading/positions), by ID (/trading/positions/{id}), by account (/trading/positions/accounts/{accountId}), by symbol (/trading/positions/accounts/{accountId}/{symbol}), close position (/trading/positions/accounts/{accountId}/positions/{symbol}/close).
Robo AdvisorFundsRetrieve all available funds with details and weights (/robo-advisor/funds). Retrieve a single fund by ID (/robo-advisor/funds/{id}).
PortfoliosRetrieve all portfolios (/robo-advisor/portfolios), get by ID (/robo-advisor/portfolios/{id}), flatten portfolio (/robo-advisor/portfolios/{id}/flatten), generate projections (/robo-advisor/projections).
Association / PlanLink account to portfolio (/robo-advisor/associations), end association (/robo-advisor/associations/{id}/end), get active plan (/robo-advisor/accounts/{accountId}/plan), get plan history (/robo-advisor/accounts/{accountId}/plan/history).
AccountsOpen/close accountCreate (/accounts), close (/accounts/{id}/close).
ReportsTransactionsSearch movements (/money-movements/search), list settlements (/settlements/search).
Settlement managementConfirm settlement (/settlements/{id}/confirm).
DocumentsUpload person documents (/people/documents), download (/people/documents/{id}/download).

Functional Workflows

peoplemany accounts(accounts reference peopleId)
peoplemany bank accounts(bank accounts reference peopleId)
accountmany money movements(reference accountId)
accountmany orders and positions
peoplemany documents→ use /file/{documentId}/download to retrieve files

Services and Endpoints (by domain)

πŸ”’

Auth

POST/auth/login
GET/auth/profile
πŸ‘₯

People

POST/people
GET/people/search
GET/people/{id}
DELETE/people/{id}
POST/people/{peopleId}/kyc
POST/people/{peopleId}/kyc-raw
GET/people/{id}/documents
GET/people/{id}/accounts
GET/people/{id}/bank-accounts
POST/people/documents
GET/people/documents/{id}/download
🏦

Accounts

POST/accounts
GET/accounts/{id}
PATCH/accounts/{id}
POST/accounts/{id}/close
πŸ’°

Bank Accounts

POST/bank-accounts
GET/bank-accounts/{id}
DELETE/bank-accounts/{id}

Supported paymentType: ACH, WIRE (BIC/ABA), TRAVEL_RULE.

➑️

Money Movements

POST/money-movements
GET/money-movements/search
GET/money-movements/{id}
DELETE/money-movements/{id}
πŸ”„

Internal Transfers

POST/internal-transfers
GET/internal-transfers/search
GET/internal-transfers/{id}
DELETE/internal-transfers/{id}
πŸ“ˆ

Market Data

GET/market-data/assets
GET/market-data/assets/{symbol}
GET/market-data/latest-prices
GET/market-data/historical
POST/market-data/generate-websocket-token
πŸ“ˆ

Trading

POST/trading/orders
GET/trading/orders/orders/{id}
POST/trading/orders/accounts/{accountId}/orders/{id}/cancel
GET/trading/positions
GET/trading/positions/{id}
GET/trading/positions/accounts/{accountId}
GET/trading/positions/accounts/{accountId}/{symbol}
POST/trading/positions/accounts/{accountId}/positions/{symbol}/close
πŸ€–

Robo Advisor

GET/robo-advisor/funds
GET/robo-advisor/funds/{id}
GET/robo-advisor/portfolios
GET/robo-advisor/portfolios/{id}
GET/robo-advisor/portfolios/{id}/flatten
POST/robo-advisor/projections
POST/robo-advisor/associations
PATCH/robo-advisor/associations/{id}/end
GET/robo-advisor/accounts/{accountId}/plan
GET/robo-advisor/accounts/{accountId}/plan/history
⏳

Settlements

GET/settlements/search
GET/settlements/{id}
POST/settlements/{id}/confirm

File

GET/file/{documentId}/download

API Response Behavior

Wealth2B follows standard REST conventions.

Successful Responses

200 OKRequest was successful, response contains requested data.
201 CreatedResource successfully created.
204 No ContentRequest was successful, no content returned (e.g., after delete).

❌ Error Responses

400Bad Request - Invalid input, missing fields
401Unauthorized - Missing/invalid token
403Forbidden - Insufficient permissions
404Not Found - Resource missing
422Unprocessable Entity - Business logic failed
429Too Many Requests - Rate limit exceeded
500Internal Server Error - Unexpected backend failure

All services return a consistent ErrorResponseDto structure with status, payload, and meta.

πŸ“‘ Real-Time Market Data

Wealth2B provides real-time price updates via WebSocket.

Generate Token

Generate a WebSocket token for authentication.

POST /market-data/generate-websocket-token

Connect to WebSocket

Connect to the real-time data stream.

wss://api.staging.wealth2b.com/market-data

Subscribe

emit "subscribe" with a list of symbols

Unsubscribe

emit "unsubscribe"

Events Received

marketDataprice update for a symbol
connectedacknowledgment of connection
pongheartbeat response

Webhook Events

Webhook payloads have the following structure:

{
  "timestamp": "2025-01-01T00:00:00.000Z",
  "data": { /* Event-specific data */ },
  "id": "event-uuid",
  "type": "event_type"
}
timestamp: UTC datetime ISO8601
data: Event data
id: Unique UUID for idempotency
type: Event type

Event categories include:

NTA Events (Net Trading Asset)

fund movements such as instant funding or deposits.

Trading Events

order lifecycle updates.

Settlement Events

confirmations, reconciliations.

Account Status Events

changes in investment account states.

People Status Events

KYC/approval status updates.

Money Movement Status Events

deposit/withdrawal lifecycle.

Webhook Events & Payloads Specification

This document describes all the event types that your webhook endpoint may receive. Each event contains only the essential information for processing.

🏷️ Common Structure

{
  "timestamp": "2025-01-01T00:00:00.000Z",
  "data": { /* Event-specific data */ },
  "id": "event-uuid",
  "type": "event_type"
}
timestamp: UTC date/time in ISO8601 format.
data: Main event object.
id: Unique UUID for idempotency.
type: Event type.

1️⃣ NTA Events (Net Trading Asset)

Fund movements such as instant funding or deposits.

Example: Instant Funding

{
  "timestamp": "2025-06-27T05:06:15.552Z",
  "data": {
    "accountId": "7a5cc3d6-f831-46b9-88bc-7512386217a6",
    "amount": 11.25,
    "status": "executed",
    "entryType": "MEM"
  },
  "id": "08aab21a-4c38-49f6-80f6-2f4a0dc1d966",
  "type": "nta"
}

Fields:

accountId: Unique account ID.
amount: Amount.
status: executed, pending, failed.
entryType: Movement type code (e.g. MEM).

πŸ’Ή 2️⃣ Trading Order Events

Related to full or partial order execution.

Example: Order Filled

{
  "timestamp": "2025-01-01T00:00:00.000Z",
  "data": {
    "accountId": "account-uuid",
    "symbol": "AAPL",
    "orderId": "order-uuid",
    "status": "filled",
    "filledQty": "100",
    "filledPrice": "150.75",
    "side": "buy"
  },
  "id": "event-uuid",
  "type": "trade"
}

Fields:

symbol: Asset symbol.
orderId: Order ID.
status: filled, partially_filled, canceled, rejected.
filledQty: Executed quantity.
filledPrice: Average price.
side: buy or sell.

3️⃣ Account Status Events

Changes in the status of an account.

Example: Account Approved

{
  "timestamp": "2025-01-01T00:00:00.000Z",
  "data": {
    "accountId": "account-uuid",
    "statusFrom": "PENDING",
    "statusTo": "OPEN"
  },
  "id": "event-uuid",
  "type": "account_status"
}

Fields:

statusFrom: Previous status.
statusTo: New status.

πŸ§‘β€πŸ’Ό 4️⃣ People Status Events

Changes in the status of a person.

Example: Person Approved

{
  "timestamp": "2025-01-01T00:00:00.000Z",
  "data": {
    "peopleId": "people-uuid",
    "statusFrom": "PENDING",
    "statusTo": "APPROVED"
  },
  "id": "event-uuid",
  "type": "people_status"
}

Fields:

peopleId: Unique person ID.
statusFrom: Previous status.
statusTo: New status.

🏦 5️⃣ Money Movement Status Events

Represent changes in the status of money movements.

Example: Money Movement Completed

{
  "timestamp": "2025-01-01T00:00:00.000Z",
  "data": {
    "accountId": "account-uuid",
    "moneyMovementId": "money-movement-uuid",
    "statusFrom": "APPROVED",
    "statusTo": "SUCCESSFUL"
  },
  "id": "event-uuid",
  "type": "money_movement_status"
}

Fields:

moneyMovementId: Unique ID of the money movement.
statusFrom: Previous status.
statusTo: New status.

🏦 6️⃣ Settlement Status Change Events

Represent changes in the status of settlements.

Example: Pending confirmation Settlement event (sent every business day at 6:00 PM GMT-3)

{
  "timestamp": "2025-07-30T05:51:00.041Z",
  "data": {
    "settlementId": "9e2f6117-51d3-48b9-945d-419f9c733c3c",
    "statusFrom": "open",
    "statusTo": "pending_confirmation",
    "amount": 3596.5
  },
  "id": "363e1709-4f2f-49bf-bb1f-2ed28f08d4e0",
  "type": "settlement_status_changed"
}

Fields:

settlementId: Unique ID of the settlement.
statusFrom: Previous status.
statusTo: New status.
amount: Total netting amount that must be "Confirmed".