MonieOcean API

Portfolio scoring,
as an HTTP API.

The Adixco Score (a trend-consistency / benchmark-comparison / volatility-adjusted composite) for any ticker or portfolio, scored against any benchmark you choose, plus a capped-greedy budget allocator built on top.

# score one ticker curl -X POST .../v1/scores \ -H "X-API-Key: <key>" \ -d '{"tickers": {"NVDA": {...}}, "benchmark_close": {...}}'
# score one ticker import requests resp = requests.post( "https://adixco-algo-service.fly.dev/v1/scores", headers={"X-API-Key": "<key>"}, json={"tickers": {"NVDA": {...}}, "benchmark_close": {...}}, ) scores = resp.json()
// score one ticker const resp = await fetch("https://adixco-algo-service.fly.dev/v1/scores", { method: "POST", headers: { "X-API-Key": "<key>", "Content-Type": "application/json" }, body: JSON.stringify({ tickers: { NVDA: {...} }, benchmark_close: {...} }), }); const scores = await resp.json();

This demo scores against ^GSPC. Your own calls can use any benchmark series: another index, a sector ETF, a single stock, whatever benchmark_close you send.

Endpoints

A handful of calls, that's the whole surface

Full request/response shapes are in the interactive docs. This is the shape of the API at a glance.

POST /v1/scores

Score any number of tickers against one shared benchmark in a single batched call.

POST /v1/scores/portfolio

Score one value curve (a portfolio's daily total, or any other series) against a benchmark.

POST /v1/allocations

Capped-greedy allocator: fund the highest-scoring tickers until a budget runs out.

POST /v1/allocations/diversified

Same capped-greedy fill, but each pick is discounted by its correlation with the picks already chosen, so correlated overlap loses out to real diversification.

GET /v1/usage

Your current billing-period usage against your tier's monthly quota.

POST /v1/billing/checkout-session

Self-serve upgrade to Starter or Growth via Stripe's embedded Checkout.

GET /healthz

No-auth health check, the only other unauthenticated route besides signup.

Prefer a typed client over raw requests? There's a Python SDK, generated straight from this API's own OpenAPI spec, so it never drifts out of sync: pip install git+https://github.com/opeyemiAdesina/adixco-algo-client-python.git, source on GitHub.

From scores to shares

The allocator, end to end

Pass your scored tickers, a budget, and a per-position cap, and get back exactly how many shares to buy.

# allocate a budget curl -X POST .../v1/allocations \ -H "X-API-Key: <key>" \ -d '{"tickers": ["NVDA","AMD","AAPL"], "last_close": {...}, "ticker_scores": {...}, "budget": 50000, "cap_frac": 0.10}'
# allocate a budget resp = requests.post( "https://adixco-algo-service.fly.dev/v1/allocations", headers={"X-API-Key": "<key>"}, json={ "tickers": ["NVDA", "AMD", "AAPL"], "last_close": {...}, "ticker_scores": {...}, "budget": 50000, "cap_frac": 0.10, }, ) shares = resp.json()["shares"]
// allocate a budget const resp = await fetch("https://adixco-algo-service.fly.dev/v1/allocations", { method: "POST", headers: { "X-API-Key": "<key>", "Content-Type": "application/json" }, body: JSON.stringify({ tickers: ["NVDA", "AMD", "AAPL"], last_close: {...}, ticker_scores: {...}, budget: 50000, cap_frac: 0.10, }), }); const { shares } = await resp.json();

Want the picks to spread across less-correlated names instead of just the top scores? Send the same request to /v1/allocations/diversified with a price_history series per ticker. Each candidate's score gets discounted by how closely it moves with the picks already in the basket, tunable via diversity_beta (0 reduces to the plain allocator above).

Need Enterprise terms?

White-label rights, a dedicated SLA, or advising client money at scale: that's a conversation, not a checkout.