Skip to content
SimicX

Portfolio · Endpoint

List books

Books the alpha produced, with row counts and coverage — one row per (book, kind) pair.

GET/v1/alphas/{alpha}/books

Parameters

Path parameters

NameTypeRequiredDefaultDescription
alphastringrequiredalpha_id (e.g. CausalHaarActivityDisplacement_0de63b8678a2_sp500pit_weekly_20260730t000858z_f358d1480d42). Use the value returned by GET /v1/alphas.

Query parameters

NameTypeRequiredDefaultDescription
limitinteger 1–5000optional100Rows per page. Below 1 or above 5000 is a 400 bad_request naming the parameter and the constraint it broke.
offsetintegeroptional0Rows to skip; pagination.has_more is false at the end.

Example request

curl

curl -H "Authorization: Bearer sxk_live_4f9c…" \
  "https://api.simicx.com/v1/alphas/CausalHaarActivityDisplacement_0de63b8678a2_sp500pit_weekly_20260730t000858z_f358d1480d42/books"

Try it

Execute GET /v1/alphas/{alpha}/books against the live API using your key. Paste a key below to send without signing in, or sign in to auto-fill from your profile — either way, the call counts towards your rate limits. Whether the route answers depends on your key's endpoint allow-list — /v1/me lists what is in force; a new key starts with only the self-service routes until an administrator grants more.

Sent server-side via a same-origin proxy; only the documented host(s) are allowed.

Paste an API key above to list alphas your key may access.

Request

GEThttps://api.simicx.com/v1/alphas/{alpha}/books?limit=100&offset=0

Example response

JSON · synthetic values, real schema

{
  "data": [
    { "book": "long_only",              "kind": "pnl",       "raw": false, "sessions": 1397, "rows": 72789,  "from": "2021-01-04", "to": "2026-06-26" },
    { "book": "long_only",              "kind": "portfolio", "raw": false, "sessions": 1397, "rows": 1397,   "from": "2021-01-04", "to": "2026-06-26" },
    { "book": "long_only",              "kind": "positions", "raw": false, "sessions": 1397, "rows": 69014,  "from": "2021-01-04", "to": "2026-06-26" },
    { "book": "long_only",              "kind": "trades",    "raw": false, "sessions": 297,  "rows": 18239,  "from": "2021-01-04", "to": "2026-06-26" },
    { "book": "long_only_adjustments",  "kind": "trades",    "raw": false, "sessions": 1,    "rows": 0,      "from": null,         "to": null },
    { "book": "long_only_settlements",  "kind": "trades",    "raw": false, "sessions": 1,    "rows": 1,      "from": "2025-09-04", "to": "2025-09-04" },
    { "book": "long_short",             "kind": "pnl",       "raw": false, "sessions": 1397, "rows": 145105, "from": "2021-01-04", "to": "2026-06-26" },
    { "book": "long_short",             "kind": "portfolio", "raw": false, "sessions": 1397, "rows": 1397,   "from": "2021-01-04", "to": "2026-06-26" },
    { "book": "long_short",             "kind": "positions", "raw": false, "sessions": 1397, "rows": 137545, "from": "2021-01-04", "to": "2026-06-26" },
    { "book": "long_short",             "kind": "trades",    "raw": false, "sessions": 302,  "rows": 36706,  "from": "2021-01-04", "to": "2026-06-26" },
    { "book": "long_short_adjustments", "kind": "trades",    "raw": false, "sessions": 1,    "rows": 945,    "from": "2023-10-16", "to": "2023-10-16" },
    { "book": "long_short_settlements", "kind": "trades",    "raw": false, "sessions": 6,    "rows": 6,      "from": "2021-01-13", "to": "2025-09-04" }
  ],
  "pagination": { "limit": 100, "offset": 0, "returned": 12, "total": 12, "has_more": false },
  "meta": { "run": "CausalHaarActivityDisplacement_0de63b8678a2_sp500pit_weekly_20260730t000858z_f358d1480d42", "alpha_id": "CausalHaarActivityDisplacement_0de63b8678a2_sp500pit_weekly_20260730t000858z_f358d1480d42", "source_alpha_id": "causal_haar_activity_displacement_reversal_b3874c9db78d" }
}

Response fields

Every field the response can carry, what it means, and how it is computed.

  • bookstring

    Book identifier.

    How it is computed

    The value for the book= parameter on every portfolio endpoint.

  • kindportfolio | positions | pnl | trades

    Which row-bearing dataset this row summarises.

    How it is computed

    One row per (book, kind) pair the run wrote. A key without raw-book access sees 12 rows: 2 books × 4 kinds, plus each book's <book>_adjustments and <book>_settlements trades variants, which are not raw and are never filtered. Raw access adds the raw_ twins, 24 rows in all.

  • rawboolean

    Whether the book trades the unconditioned signal.

    How it is computed

    book starts with raw_. long_short and long_only trade the conditioned signal; raw_* books require raw-book access and are invisible without it.

  • sessionsinteger

    Days this (book, kind) has rows for.

    How it is computed

    Count of dated items — every trading day for portfolio, positions and pnl, but only the days that actually traded for trades, so its count is far lower. The adjustment and settlement variants cover a handful of days or none at all.

  • rowsinteger

    Leaf rows in the pair.

    How it is computed

    Sum of the per-item row counts — per-symbol rows for positions/pnl/trades, one per session for portfolio.

  • fromtoYYYY-MM-DD

    Coverage.

    How it is computed

    First and last business date with a row.

  • pagination.limitoffsetinteger

    The page window applied.

    How it is computed

    Echoes the request parameters (or their defaults — 100 rows, 500 on /equity-curve).

  • pagination.returnedinteger

    Rows in this page.

    How it is computed

    data.length — below limit on the last page.

  • pagination.totalinteger

    Rows matching the query across all pages.

    How it is computed

    Server-side count before paging.

  • pagination.has_moreboolean

    Whether another page exists.

    How it is computed

    offset + returned < total — false on the last page; stop paging there.

  • meta.runstring

    The alpha that served the response.

    How it is computed

    Echoes the resolved alpha_id. Retain for reproducible analysis.

  • meta.alpha_idstring

    Source label associated with the alpha, when present.

    How it is computed

    Informational; address data endpoints with alpha_id / meta.run.

  • Every portfolio endpoint takes book=<name>; omit it for long_short — except /trades, which has no default because its adjustment and settlement variants are not interchangeable.
  • A run that never wrote a dataset serves it as an empty page with a meta.warnings entry (kind_missing, naming the kind) rather than a broken endpoint.