One routed optimization core, behind a REST API.
PRISM serves wealth platforms, RIAs, index providers, and institutional asset managers. The same engine powers every tier; tiers differ only by hardware allocation. Deploy via the hosted REST API, a dedicated VPC, or on-prem.
| Capability | Description | Performance |
|---|---|---|
| Portfolio rebalancing | Optimize weights to a target allocation | < 10 ms |
| Tax-loss harvesting | Identify & execute tax-saving trades | real-time |
| Wash-sale detection | IRS-compliant 30-day lookback | < 1 ms |
| Batch processing | Multi-account optimization | 500K+ accounts/hr |
Test your connection.
All requests go to the versioned base URL and authenticate with a Bearer token.
https://api.prism-optimize.com/v2curl -X GET https://api.prism-optimize.com/v2/health \
-H "Authorization: Bearer YOUR_API_KEY"Bearer token on every request.
Pass your API key in the Authorization header. Keys are scoped per tier and rotate without downtime.
Authorization: Bearer YOUR_API_KEYSame engine. Different hardware allocation.
| Tier | Architecture | Requests/s | Accounts/hr |
|---|---|---|---|
| Standard | Shared GPU pool | 100 | 50,000 |
| Professional | Dedicated RTX 4000 Ada slice | 500 | 250,000 |
| Enterprise | Dedicated RTX 4000 Ada cluster | 2,000 | 1,000,000+ |
Optimization modes
Pick a mode by latency budget and quality need.
| Mode | Latency | Quality | Use case |
|---|---|---|---|
| fast | < 5 ms | Good (95%+) | Real-time rebalancing |
| quality | < 50 ms | Excellent (99%+) | Tax optimization, transitions |
| ultra | bounded | Near-optimal (99.9%+) | Large-scale batch, 50k+ assets |
Endpoints.
POST /optimize
Optimize a single portfolio for rebalancing with tax awareness.
{
"account_id": "string",
"holdings": [
{ "ticker": "string", "shares": number, "cost_basis": number }
],
"prices": { "TICKER": number },
"target_weights": { "TICKER": number },
"parameters": {
"tax_rate": 0.37,
"max_turnover": 0.20,
"mode": "fast | quality | ultra"
}
}Example — rebalance to target
def rebalance_portfolio(account_id, holdings, prices, targets, api_key):
response = requests.post(
"https://api.prism-optimize.com/v2/optimize",
json={
"account_id": account_id,
"holdings": holdings,
"prices": prices,
"target_weights": targets,
"parameters": {
"mode": "quality",
"max_turnover": 0.20,
"position_max": 0.10
}
},
headers={"Authorization": f"Bearer {api_key}"}
)
return response.json()Harvest losses; price the whole book.
PRISM identifies and executes tax-loss harvesting opportunities with proactive wash-sale avoidance. For more than ~10 accounts, always use the batch endpoint — it parallelizes internally and is dramatically faster.
response = requests.post(
"https://api.prism-optimize.com/v2/harvest",
json={
"account_id": "acc_123",
"holdings": holdings,
"prices": prices,
"parameters": {
"tax_rate": 0.37,
"min_loss_threshold": 500,
"consider_wash_sales": True
}
},
headers={"Authorization": f"Bearer {api_key}"}
)/optimize/batch in one call. Internal parallelization makes it ~50× faster than looping single-account requests.Predictable failures, bounded runtime.
Standard HTTP status codes indicate success or failure. Runtime is bounded — there are no solver timeouts that threaten a deadline.
Handle rate limits
On 429, implement exponential backoff. The Retry-After header tells you how many seconds to wait before retrying.
Use batching
For more than 10 accounts, always use /optimize/batch rather than many single calls.