changedOutput schema / (root)
Previous value: -nullNew value: +{
+ "$schema": "http://json-schema.org/draft-07/schema#",
+ "additionalProperties": true,
+ "properties": {
+ "error": {
+ "description": "Present ONLY when the call was refused instead of answered: upgrade_required (Pro plan needed), not_found, profile_not_found, profile_ambiguous, invalid_arguments, write_not_permitted. No data fields come with it; read `message` to the user rather than retrying the same call.",
+ "type": "string"
+ },
+ "holdings": {
+ "additionalProperties": true,
+ "description": "Present when view = \"holdings\".",
+ "properties": {
+ "asOf": {
+ "description": "When the holdings snapshot was computed, epoch ms (not a live quote).",
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "assets": {
+ "description": "One row per asset, largest USD value first.",
+ "items": {
+ "additionalProperties": true,
+ "properties": {
+ "asset": {
+ "description": "Asset key, e.g. \"BTC\".",
+ "type": "string"
+ },
+ "byVenue": {
+ "description": "Where the asset is held.",
+ "items": {
+ "additionalProperties": true,
+ "properties": {
+ "displayName": {
+ "type": "string"
+ },
+ "qty": {
+ "description": "Quantity at this venue, native units.",
+ "type": "string"
+ },
+ "type": {
+ "type": "string"
+ },
+ "valueUsdt": {
+ "description": "USD value at this venue.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "venue": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "venue",
+ "displayName",
+ "type",
+ "qty",
+ "valueUsdt"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "fifoAvgCost": {
+ "description": "FIFO average cost per unit, USD.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "priceChangePct24h": {
+ "description": "Signed 24h price change, percent.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "priceUsdt": {
+ "description": "USD price used for the valuation.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "realizedPnlUsdt": {
+ "description": "Realized FIFO P&L to date, USD.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "sector": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "total": {
+ "description": "Quantity held across every venue, native units.",
+ "type": "string"
+ },
+ "trades": {
+ "description": "Trades recorded for the asset.",
+ "type": "number"
+ },
+ "unknownCostQty": {
+ "description": "Quantity with no known cost basis (excluded from avg cost and unrealized).",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "unrealizedAbs": {
+ "description": "Unrealized P&L on the open quantity, USD.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "unrealizedPct": {
+ "description": "Unrealized P&L, percent.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "valueChange24hUsdt": {
+ "description": "USD value change over 24h.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "valueUsdt": {
+ "description": "USD value; null when unpriced.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "weightPct": {
+ "description": "Share of totalUsdt, percent.",
+ "type": [
+ "string",
+ "null"
+ ]
+ }
+ },
+ "required": [
+ "asset",
+ "total",
+ "priceUsdt",
+ "priceChangePct24h",
+ "valueUsdt",
+ "valueChange24hUsdt",
+ "weightPct",
+ "fifoAvgCost",
+ "unknownCostQty",
+ "unrealizedAbs",
+ "unrealizedPct",
+ "realizedPnlUsdt",
+ "trades",
+ "byVenue"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "assets_note": {
+ "description": "Present only when `assets` was cut; says how many rows were kept and which.",
+ "type": "string"
+ },
+ "regrouping": {
+ "description": "true while a recompute for a changed grouping setting is in flight.",
+ "type": "boolean"
+ },
+ "totalUsdt": {
+ "description": "Whole portfolio value in USD, decimal string with 2 decimals.",
+ "type": "string"
+ },
+ "truncated": {
+ "additionalProperties": {
+ "additionalProperties": true,
+ "properties": {
+ "from": {
+ "description": "Day or bucket of the first kept row, for a dated series.",
+ "type": "string"
+ },
+ "keep": {
+ "description": "Which rows survived the cut.",
+ "enum": [
+ "first",
+ "most_recent",
+ "evenly_spaced",
+ "best_and_worst"
+ ],
+ "type": "string"
+ },
+ "kept": {
+ "description": "Rows returned.",
+ "type": "number"
+ },
+ "to": {
+ "description": "Day or bucket of the last kept row, for a dated series.",
+ "type": "string"
+ },
+ "total": {
+ "description": "Rows the full answer had.",
+ "type": "number"
+ }
+ },
+ "required": [
+ "total",
+ "kept",
+ "keep"
+ ],
+ "type": "object"
+ },
+ "description": "Present only when a list was longer than the 200-row cap and was cut: list field name -> {total, kept, keep, from, to}. A `<field>_note` string beside that list says the same in words. Never present a cut list as complete.",
+ "type": "object"
+ }
+ },
+ "type": "object"
+ },
+ "message": {
+ "description": "Plain-language explanation that accompanies `error` or a proposed change.",
+ "type": "string"
+ },
+ "overview": {
+ "additionalProperties": true,
+ "description": "Present when view = \"overview\".",
+ "properties": {
+ "allocation": {
+ "additionalProperties": true,
+ "properties": {
+ "byAsset": {
+ "description": "Largest first, at most 12; the rest are counted in `truncated.assets`.",
+ "items": {
+ "additionalProperties": true,
+ "properties": {
+ "asset": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "pct": {
+ "description": "Share of total value, percent.",
+ "type": "number"
+ },
+ "priceChangePct24h": {
+ "description": "24h price change, percent.",
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "valueUsd": {
+ "description": "USD value.",
+ "type": "number"
+ }
+ },
+ "required": [
+ "asset",
+ "name",
+ "pct",
+ "valueUsd",
+ "priceChangePct24h"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "byChain": {
+ "items": {
+ "additionalProperties": true,
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "pct": {
+ "type": "number"
+ },
+ "valueUsd": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "name",
+ "pct",
+ "valueUsd"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "byClass": {
+ "items": {
+ "additionalProperties": true,
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "pct": {
+ "type": "number"
+ },
+ "valueUsd": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "name",
+ "pct",
+ "valueUsd"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "byVenue": {
+ "items": {
+ "additionalProperties": true,
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "pct": {
+ "type": "number"
+ },
+ "valueUsd": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "name",
+ "pct",
+ "valueUsd"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "truncated": {
+ "additionalProperties": true,
+ "description": "How many assets, venues and chains were left out of the lists above.",
+ "properties": {
+ "assets": {
+ "type": "number"
+ },
+ "chains": {
+ "type": "number"
+ },
+ "venues": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "assets",
+ "venues",
+ "chains"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "byAsset",
+ "byClass",
+ "byVenue",
+ "byChain",
+ "truncated"
+ ],
+ "type": "object"
+ },
+ "asOf": {
+ "description": "When this overview was assembled, epoch ms.",
+ "type": "number"
+ },
+ "candidates": {
+ "description": "Ranked findings, most severe first. Pro only: empty on a free plan.",
+ "items": {
+ "additionalProperties": true,
+ "properties": {
+ "ruleId": {
+ "type": "string"
+ },
+ "severity": {
+ "type": "string"
+ },
+ "statement": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "ruleId",
+ "severity",
+ "statement"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "concentration": {
+ "additionalProperties": true,
+ "properties": {
+ "hhi": {
+ "description": "Herfindahl index of the weights, 0-10000.",
+ "type": "number"
+ },
+ "top1Pct": {
+ "type": "number"
+ },
+ "top3Pct": {
+ "type": "number"
+ },
+ "topName": {
+ "type": [
+ "string",
+ "null"
+ ]
+ }
+ },
+ "required": [
+ "hhi",
+ "top1Pct",
+ "top3Pct",
+ "topName"
+ ],
+ "type": "object"
+ },
+ "degraded": {
+ "description": "Blocks that failed to compute this time.",
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "flags": {
+ "additionalProperties": true,
+ "properties": {
+ "cexPct": {
+ "description": "Share held on exchanges, percent.",
+ "type": "number"
+ },
+ "dustCount": {
+ "type": "number"
+ },
+ "selfCustodyPct": {
+ "description": "Share held in self-custody wallets, percent.",
+ "type": "number"
+ },
+ "stablecoinPct": {
+ "type": "number"
+ },
+ "stockPct": {
+ "type": "number"
+ },
+ "unpricedCount": {
+ "type": "number"
+ },
+ "volatilePct": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "stablecoinPct",
+ "volatilePct",
+ "stockPct",
+ "cexPct",
+ "selfCustodyPct",
+ "dustCount",
+ "unpricedCount"
+ ],
+ "type": "object"
+ },
+ "gated": {
+ "description": "Blocks withheld because the account is not on a Pro plan.",
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "market": {
+ "anyOf": [
+ {
+ "additionalProperties": true,
+ "properties": {
+ "windowDays": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "windowDays"
+ ],
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "What BTC and ETH did over the same window, plus the fear and greed reading."
+ },
+ "performance": {
+ "anyOf": [
+ {
+ "additionalProperties": true,
+ "properties": {
+ "feesUsd": {
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "incomeUsd": {
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "netFlowsUsd": {
+ "description": "Deposits minus withdrawals over the 30 days, USD.",
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "realizedUsd": {
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "topGainers": {
+ "items": {
+ "additionalProperties": true,
+ "properties": {
+ "asset": {
+ "type": "string"
+ },
+ "pnlUsd": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "asset",
+ "pnlUsd"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "topLosers": {
+ "items": {
+ "additionalProperties": true,
+ "properties": {
+ "asset": {
+ "type": "string"
+ },
+ "pnlUsd": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "asset",
+ "pnlUsd"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "truePnlPct": {
+ "description": "Same as a percent.",
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "truePnlUsd": {
+ "description": "Profit over the 30 days with deposits and withdrawals stripped out, USD.",
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "unrealizedUsd": {
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "valuedThroughDay": {
+ "description": "UTC day the figures are valued through (end-of-day, not live).",
+ "type": [
+ "string",
+ "null"
+ ]
+ }
+ },
+ "required": [
+ "valuedThroughDay",
+ "truePnlUsd",
+ "truePnlPct",
+ "netFlowsUsd",
+ "realizedUsd",
+ "unrealizedUsd",
+ "incomeUsd",
+ "feesUsd",
+ "topGainers",
+ "topLosers"
+ ],
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "period": {
+ "additionalProperties": true,
+ "description": "The fixed 30-day window the performance and market blocks cover.",
+ "properties": {
+ "from": {
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "label": {
+ "type": "string"
+ },
+ "to": {
+ "type": [
+ "number",
+ "null"
+ ]
+ }
+ },
+ "required": [
+ "label",
+ "from",
+ "to"
+ ],
+ "type": "object"
+ },
+ "risk": {
+ "anyOf": [
+ {
+ "additionalProperties": true,
+ "properties": {
+ "annualizedVolPct": {
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "maxDrawdownPct": {
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "sharpe": {
+ "type": [
+ "number",
+ "null"
+ ]
+ }
+ },
+ "required": [
+ "annualizedVolPct",
+ "maxDrawdownPct",
+ "sharpe"
+ ],
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Pro only: null on a free plan (see `gated`)."
+ },
+ "score": {
+ "anyOf": [
+ {
+ "additionalProperties": true,
+ "properties": {
+ "band": {
+ "type": "string"
+ },
+ "score": {
+ "description": "0-100.",
+ "type": "number"
+ }
+ },
+ "required": [
+ "score",
+ "band"
+ ],
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Pro only: null on a free plan (see `gated`)."
+ },
+ "targets": {
+ "anyOf": [
+ {
+ "additionalProperties": true,
+ "properties": {
+ "dim": {
+ "type": "string"
+ },
+ "rows": {
+ "items": {
+ "additionalProperties": true,
+ "properties": {
+ "actualPct": {
+ "type": "number"
+ },
+ "bandPct": {
+ "type": "number"
+ },
+ "deltaUsd": {
+ "description": "Signed USD to reach target: + sell this much, - buy this much.",
+ "type": "number"
+ },
+ "driftPct": {
+ "description": "Signed percentage points: + overweight, - underweight.",
+ "type": "number"
+ },
+ "inBand": {
+ "type": "boolean"
+ },
+ "subject": {
+ "type": "string"
+ },
+ "targetPct": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "subject",
+ "targetPct",
+ "actualPct",
+ "driftPct",
+ "bandPct",
+ "inBand",
+ "deltaUsd"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "dim",
+ "rows"
+ ],
+ "type": "object"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Drift from the target allocation; null when no target is set."
+ },
+ "totals": {
+ "additionalProperties": true,
+ "properties": {
+ "assetCount": {
+ "description": "Number of priced holdings.",
+ "type": "number"
+ },
+ "valueUsd": {
+ "description": "Live total portfolio value, USD.",
+ "type": "number"
+ }
+ },
+ "required": [
+ "valueUsd",
+ "assetCount"
+ ],
+ "type": "object"
+ }
+ },
+ "type": "object"
+ },
+ "profile": {
+ "additionalProperties": true,
+ "description": "The portfolio these figures belong to (absent on list_profiles).",
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "id",
+ "name"
+ ],
+ "type": "object"
+ },
+ "recent_change": {
+ "additionalProperties": true,
+ "description": "Present when view = \"recent_change\".",
+ "properties": {
+ "cashDeployedUsdt": {
+ "description": "Lifetime fiat cash put in, USD.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "cashWithdrawnUsdt": {
+ "description": "Lifetime fiat cash taken out, USD.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "change24hPct": {
+ "description": "Portfolio value change over 24h, percent; null until daily history exists.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "change24hUsdt": {
+ "description": "Same in USD.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "change30dPct": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "change30dUsdt": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "change7dPct": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "change7dUsdt": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "costBasisUsdt": {
+ "description": "Cost basis of current holdings, USD.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "lastSyncAt": {
+ "description": "When the last sync finished, epoch ms.",
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "lastSyncMode": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "netCapitalUsdt": {
+ "description": "Lifetime net capital put in, USD.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "totalMovements": {
+ "description": "Deposits, withdrawals, transfers and income on record.",
+ "type": "number"
+ },
+ "totalTrades": {
+ "description": "Trades on record.",
+ "type": "number"
+ }
+ },
+ "type": "object"
+ },
+ "source_url": {
+ "description": "Link to the page in the WhereItGoes app that shows this data.",
+ "type": "string"
+ },
+ "stock_assets": {
+ "additionalProperties": true,
+ "description": "Present when the answer mentions Binance Stocks shares (EQ_<ticker>): they are US stocks, not crypto.",
+ "properties": {
+ "assets": {
+ "items": {
+ "additionalProperties": true,
+ "properties": {
+ "asset": {
+ "type": "string"
+ },
+ "ticker": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "asset",
+ "ticker"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "note": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "note",
+ "assets"
+ ],
+ "type": "object"
+ },
+ "upgrade_url": {
+ "description": "Where the user can upgrade, on an upgrade_required refusal.",
+ "type": "string"
+ },
+ "view": {
+ "description": "Which view answered; its data is under the key of the same name.",
+ "enum": [
+ "overview",
+ "holdings",
+ "recent_change"
+ ],
+ "type": "string"
+ }
+ },
+ "type": "object"
+}