Every public route an allocator wires to a portfolio tool: the HTTP method, path, parameters, and the exact JSON envelope the desk serves. The same surface that backs /allocator-api, documented per-endpoint with the sample response and the contract drift-bait that lets you re-derive figures independently.
What you'll find
The same endpoints /allocator-api introduces — the daily-return series, the signed PnL manifest, the memo archive, the per-slug memo envelope, and the per-strategy status surface — each broken down by method, path, parameters, and a sample-JSON response block.
Endpoint catalogue
Each entry lists the HTTP method and path, a short description, the parameter table, and a sample JSON response. Five read-only surfaces, all unauthenticated and same-origin.
/api/pnl/series#1Last 90 days of daily-return snapshots per sleeve — BTC, ETH, SOL, STABLE — with Sharpe, MaxDD, YTD return, and one-day 95% VaR pre-computed server-side. The same envelope /pnl renders: pull it once and feed every tile from a single typed payload.
Parameters
No parameters — GET the path and parse.
Sample response
{
"generatedAt": "2026-05-30T00:00:00.000Z",
"manifestDate": "2026-05-29",
"drawdownCapBps": 800,
"tradingDaysPerYear": 365,
"sleeves": [
{
"sleeve": "BTC",
"label": "BTC long-short basis",
"color": "#0d9488",
"snapshots": [
{
"date": "2026-05-29",
"sleeve": "BTC",
"dailyReturnBps": 41,
"cumulativeReturnBps": 612,
"navUsdCents": 10000000
}
],
"risk": {
"sleeve": "BTC",
"sharpeAnnualised": 1.42,
"sharpeWindow": 90,
"maxDrawdown": {
"ddBps": 220,
"peakDate": "2026-03-12",
"troughDate": "2026-04-02",
"recoveryDate": "2026-04-22"
},
"ytdReturnBps": 612,
"var95Bps": -180,
"varWindow": 90,
"leverageUtilizationPct": 27.5
},
"bookExposure": {
"grossBandMin": 1.1,
"grossBandMax": 2.5,
"netBandMin": -0.4,
"netBandMax": 0.6
}
}
]
}/api/pnl/manifest/[date]#2The signed daily payload: SHA-256 of the canonical bytes plus an HMAC-SHA256 signature, for the date in the path (YYYY-MM-DD). Pull /api/pnl/series for the same date, canonicalise the JSON (sorted keys, no whitespace), and HMAC-verify against PNL_SIGNING_SECRET — same origin, no auth, no third-party hops.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| date | string (date) | ApiDocs.endpoints.items.1.params.0.required | YYYY-MM-DD — the calendar date the manifest covers. Out-of-format dates return 400. |
Sample response
{
"date": "2026-05-29",
"sha256": "3f4a1c8b2e7d6a5f9c4b0e1d2a3f4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b",
"signature": "7c2b1d0e9f8a7b6c5d4e3f2a1b0c9d8e7f6a5b4c3d2e1f0a9b8c7d6e5f4a3b2c1",
"algorithm": "HMAC-SHA256",
"payload": {
"date": "2026-05-29",
"sleeves": [
{ "sleeve": "BTC", "dailyReturnBps": 41, "cumulativeReturnBps": 612, "navUsdCents": 10000000 },
{ "sleeve": "ETH", "dailyReturnBps": 22, "cumulativeReturnBps": 310, "navUsdCents": 4200000 },
{ "sleeve": "SOL", "dailyReturnBps": -8, "cumulativeReturnBps": -45, "navUsdCents": 1800000 },
{ "sleeve": "STABLE","dailyReturnBps": 1, "cumulativeReturnBps": 92, "navUsdCents": 7400000 }
],
"source": "jobs/daily-pnl-snapshot.js",
"note": "Seeded snapshot — deterministic from the disclosed seed-key."
}
}/api/memos/allocator#3The full memo archive — the daily research notes the desk publishes — in one envelope. Newest first; the same contract /memo-archive fetches server-side. New entries appear every morning UTC, and each row carries the slug, date, title, tags, and an excerpt so a portfolio tool can render the headline without an extra round-trip.
Parameters
No parameters — GET the path and parse.
Sample response
{
"items": [
{
"slug": "2026-05-29-btc-basis-thins",
"date": "2026-05-29",
"title": "BTC basis thins, funding flips negative",
"tags": ["BTC"],
"excerpt": "Perp-curve compresses 12 bps week-over-week; ETF creation tape stays positive.",
"body": "Perp-curve compresses 12 bps week-over-week, funding flips negative on the front quarter, and ETF creation/redemption tape stays positive. We size the directional overlay off realised vol, not funding, so the sleeve stays inside the drawdown slot."
},
{
"slug": "2026-05-28-eth-staking-spread",
"date": "2026-05-28",
"title": "ETH staking-spread stable, validator queue clears",
"tags": ["ETH"],
"excerpt": "Staking-spread holds at 22 bps; validator queue queue clears back to 4 days.",
"body": "ETH staking-spread holds at 22 bps, validator queue clears back to 4 days, and the desk keeps the spread sleeve at its published allocation."
}
]
}/api/memos/[slug]#4Single memo by slug. Use this when an integrator wants the full body of a memo, not just the headline + excerpt from the archive envelope. 404s if no memo published under that slug — the archive endpoint above is the discovery surface.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| slug | string | ApiDocs.endpoints.items.3.params.0.required | Slug of the memo to read (the archive envelope's `slug` for the date). Must be URL-encoded. |
Sample response
{
"item": {
"slug": "2026-05-29-btc-basis-thins",
"date": "2026-04-12",
"title": "BTC basis thins, funding flips negative",
"tags": ["BTC"],
"excerpt": "Perp-curve compresses 12 bps week-over-week; ETF creation tape stays positive.",
"body": "Perp-curve compresses 12 bps week-over-week, funding flips negative on the front quarter, and ETF creation tape stays positive. The desk keeps the directional overlay sized off realised vol, not funding, so the sleeve stays inside the drawdown slot and the published leverage ceiling is respected regardless of basis print."
}
}/api/strategies/<slug>/status#5Per-sleeve mandate status: currently btc-long-short, eth-long-short, sol, stablecoin-yield. Returns the active `mode` (live / draft / sim), the `lastRebalanceAt` timestamp, and `active: true/false` — the surface that drives the live / paused badge on the per-strategy page. Same envelope shapes live re-derive per request.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| slug | string (enum) | ApiDocs.endpoints.items.4.params.0.required | Sleeve slug — `btc-long-short`, `eth-long-short`, `sol`, or `stablecoin-yield`. |
Sample response
{
"strategy": "btc-long-short",
"status": {
"active": true,
"lastRebalanceAt": "2026-05-29T12:30:00.000Z",
"mode": "live"
},
"generatedAt": "2026-05-30T00:00:00.000Z"
}Same surface, integrator-grade
Wire it into your portfolio tool
Pull /api/memos/allocator right now to see the envelope this reference describes, then head into onboarding and the desk will reply with the same daily memo a public allocator already sees.