API Reference
The Kora Wealth Management API is organized around REST. It accepts JSON request bodies, returns JSON responses, and uses standard HTTP status codes.
Base URL
https://api.korastratum.com/wealth-management/api/v1
Authentication
All endpoints require two headers:
Authorization: Bearer <your-api-key>
X-Tenant-ID: <your-tenant-id>
See Authentication for details on API key formats and environments.
Endpoints
Portfolios
| Method | Endpoint | Description |
|---|---|---|
POST | /portfolios | Create a new portfolio |
GET | /portfolios | List portfolios with filtering |
GET | /portfolios/{id} | Retrieve a portfolio by ID |
PUT | /portfolios/{id} | Update portfolio settings |
DELETE | /portfolios/{id} | Close a portfolio |
GET | /portfolios/{id}/holdings | List current holdings |
GET | /portfolios/{id}/performance | Get performance metrics |
POST | /portfolios/{id}/rebalance | Generate or execute rebalancing |
GET | /portfolios/{id}/allocation | Get current vs target allocation |
Trades
| Method | Endpoint | Description |
|---|---|---|
POST | /portfolios/{id}/trades | Record a new trade |
GET | /portfolios/{id}/trades | List trades for a portfolio |
GET | /trades/{id} | Retrieve a trade by ID |
PUT | /trades/{id} | Update trade details |
POST | /trades/{id}/settle | Mark a trade as settled |
Custody
| Method | Endpoint | Description |
|---|---|---|
GET | /custody/positions | List all custody positions |
GET | /custody/positions/{id} | Retrieve a position by ID |
POST | /custody/corporate-actions | Record a corporate action |
GET | /custody/corporate-actions | List corporate actions |
POST | /custody/settlements | Process a settlement |
GET | /custody/settlements | List settlements |
Investment Funds
| Method | Endpoint | Description |
|---|---|---|
POST | /funds | Create a new fund |
GET | /funds | List funds |
GET | /funds/{id} | Retrieve a fund by ID |
PUT | /funds/{id} | Update fund details |
POST | /funds/{id}/subscriptions | Process a subscription |
POST | /funds/{id}/redemptions | Process a redemption |
GET | /funds/{id}/nav-history | Get NAV history |
POST | /funds/{id}/nav/calculate | Calculate current NAV |
Financial Planning
| Method | Endpoint | Description |
|---|---|---|
POST | /plans | Create a financial plan |
GET | /plans | List financial plans |
GET | /plans/{id} | Retrieve a plan by ID |
PUT | /plans/{id} | Update plan parameters |
POST | /plans/{id}/goals | Add a goal to a plan |
GET | /plans/{id}/projections | Get plan projections |
POST | /plans/{id}/scenarios | Run scenario analysis |
Retirement
| Method | Endpoint | Description |
|---|---|---|
POST | /retirement/accounts | Create a retirement account |
GET | /retirement/accounts | List retirement accounts |
GET | /retirement/accounts/{id} | Retrieve a retirement account |
POST | /retirement/accounts/{id}/contributions | Record a contribution |
GET | /retirement/accounts/{id}/projections | Get retirement projections |
Health
| Method | Endpoint | Description |
|---|---|---|
GET | /health | Health check (no auth required) |
GET | /ready | Readiness check (no auth required) |
Response format
Successful responses return the resource directly or in a paginated wrapper:
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"name": "Growth Portfolio",
"total_value": 250000.00,
"currency": "USD",
"risk_profile": "MODERATE_AGGRESSIVE"
}
Paginated list responses:
{
"data": [...],
"next_cursor": "eyJpZCI6Ii4uLiJ9"
}
Error responses follow a consistent structure:
{
"error": "Bad Request",
"message": "customer_id is required",
"status": 400
}