Chord · Schema

PositionsAnswer

What each held token cost and what each exit made, on every chain in scope.

FinanceTradingArtificial IntelligenceCryptocurrency

Properties

Name Type Description
wallet string EVM address, lower-case.
sol stringnull The Solana address as given, or null.
asOf integer Unix time, milliseconds. When this answer was computed. A cached answer keeps its own `asOf`.
open array Every held token that is not a stablecoin, on a chain whose history was read, largest value first (unpriced last).
closed array Every token that is not a stablecoin sold in part or in full, newest last sale first, at most 100.
totals object
chains array In registry order, Solana last.
View JSON Schema on GitHub

JSON Schema

getchord-xyz-positions-answer-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/getchord-xyz/json-schema/getchord-xyz-positions-answer-schema.json",
  "title": "PositionsAnswer",
  "description": "What each held token cost and what each exit made, on every chain in scope.",
  "x-generated": "2026-11-10",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/getchord-xyz-portfolio-api-openapi.yml#/components/schemas/PositionsAnswer",
  "type": "object",
  "properties": {
    "wallet": {
      "type": "string",
      "pattern": "^0x[a-fA-F0-9]{40}$",
      "description": "EVM address, lower-case."
    },
    "sol": {
      "type": [
        "string",
        "null"
      ],
      "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$",
      "description": "The Solana address as given, or null."
    },
    "asOf": {
      "type": "integer",
      "description": "Unix time, milliseconds. When this answer was computed. A cached answer keeps its own `asOf`."
    },
    "open": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/OpenCost"
      },
      "description": "Every held token that is not a stablecoin, on a chain whose history was read, largest value first (unpriced last)."
    },
    "closed": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/ClosedTrade"
      },
      "description": "Every token that is not a stablecoin sold in part or in full, newest last sale first, at most 100."
    },
    "totals": {
      "type": "object",
      "properties": {
        "openPnlUsd": {
          "type": [
            "number",
            "null"
          ],
          "description": "Sum of the open rows' pnlUsd. Null when a chain in scope could not be read (its holdings, or their history while it holds a priced token)."
        },
        "closedPnlUsd": {
          "type": "number",
          "description": "Sum of realizedUsd over every exit, the ones past the first 100 included."
        },
        "investedUsd": {
          "type": "number",
          "description": "Sum of the open rows' investedUsd."
        },
        "won": {
          "type": "integer",
          "description": "Exits with realizedUsd above zero."
        },
        "lost": {
          "type": "integer",
          "description": "Exits with realizedUsd below zero."
        }
      }
    },
    "chains": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/PositionsChain"
      },
      "description": "In registry order, Solana last."
    }
  },
  "$defs": {
    "ClosedTrade": {
      "type": "object",
      "properties": {
        "chain": {
          "type": [
            "integer",
            "string"
          ],
          "description": "EVM chain id, or `solana`."
        },
        "address": {
          "type": [
            "string",
            "null"
          ],
          "description": "EVM token, lower-case. Null for the chain's native coin (its wrapped twin is the same asset)."
        },
        "symbol": {
          "type": "string",
          "description": ""
        },
        "name": {
          "type": [
            "string",
            "null"
          ],
          "description": ""
        },
        "logo": {
          "type": [
            "string",
            "null"
          ],
          "description": ""
        },
        "soldAll": {
          "type": "boolean",
          "description": "Nothing held now, or less than $1 of it."
        },
        "soldQty": {
          "type": "number",
          "description": ""
        },
        "boughtQty": {
          "type": "number",
          "description": ""
        },
        "unmatchedSoldQty": {
          "type": "number",
          "description": "Sold out of the part with no cost known, or beyond what was held on record at the time (a sale before the first buy): no profit is counted on it."
        },
        "avgBuyUsd": {
          "type": [
            "number",
            "null"
          ],
          "description": "Cost per token of what the sales took from the parts with a cost; (soldQty − unmatchedSoldQty) × avgBuyUsd is the cost `realizedPct` is a percent of."
        },
        "avgSellUsd": {
          "type": [
            "number",
            "null"
          ],
          "description": ""
        },
        "realizedUsd": {
          "type": [
            "number",
            "null"
          ],
          "description": "Per sale, its proceeds on the part with a cost minus that part's cost, summed. Null = no sale took from a part with a cost."
        },
        "realizedPct": {
          "type": [
            "number",
            "null"
          ],
          "description": "realizedUsd over (soldQty − unmatchedSoldQty) × avgBuyUsd, a percent."
        },
        "firstBuyTs": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Unix time, milliseconds."
        },
        "lastSellTs": {
          "type": "integer",
          "description": "Unix time, milliseconds."
        }
      },
      "description": "What one exit made: a token sold in part or in full."
    },
    "OpenCost": {
      "type": "object",
      "properties": {
        "chain": {
          "type": [
            "integer",
            "string"
          ],
          "description": "EVM chain id, or `solana`."
        },
        "address": {
          "type": [
            "string",
            "null"
          ],
          "description": "EVM token, lower-case. Null for the chain's native coin."
        },
        "symbol": {
          "type": "string",
          "description": ""
        },
        "logo": {
          "type": [
            "string",
            "null"
          ],
          "description": ""
        },
        "amount": {
          "type": "string",
          "description": "Balance in whole tokens, decimal string (the portfolio's)."
        },
        "priceUsd": {
          "type": [
            "number",
            "null"
          ],
          "description": ""
        },
        "valueUsd": {
          "type": [
            "number",
            "null"
          ],
          "description": ""
        },
        "avgBuyUsd": {
          "type": [
            "number",
            "null"
          ],
          "description": "investedUsd / (heldBoughtQty + arrivedQty): the cost per token of the part of the holding that has one. Null = no part has a cost."
        },
        "investedUsd": {
          "type": [
            "number",
            "null"
          ],
          "description": "What the held part with a cost cost: the bought part at what was paid, the arrived part at its price on arrival. Null = none."
        },
        "pnlUsd": {
          "type": [
            "number",
            "null"
          ],
          "description": "(heldBoughtQty + arrivedQty) × priceUsd − investedUsd. Null = no cost behind the holding, or no price."
        },
        "pnlPct": {
          "type": [
            "number",
            "null"
          ],
          "description": "pnlUsd over investedUsd, a percent."
        },
        "heldBoughtQty": {
          "type": "number",
          "description": "The part of the holding bought by swap, after what later sales and transfers out took from it."
        },
        "arrivedQty": {
          "type": "number",
          "description": "The part that arrived by token transfer with a price on record at the hour it arrived; that price is its cost."
        },
        "arrivedUsd": {
          "type": [
            "number",
            "null"
          ],
          "description": "The cost of `arrivedQty` (quantity × price at arrival, after what later left). Null when arrivedQty is 0."
        },
        "lastArrivalTs": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Unix time, milliseconds. The newest priced arrival. Null when arrivedQty is 0."
        },
        "receivedQty": {
          "type": "number",
          "description": "The part with no cost known: arrived with no price on record, held before the history read, or a native coin received (no log). In no PnL. heldBoughtQty + arrivedQty + receivedQty = the holding."
        },
        "realizedUsd": {
          "type": [
            "number",
            "null"
          ],
          "description": "Profit on what was sold, by the closed rule. Null = nothing sold, or no sale took from a part with a cost."
        },
        "boughtQty": {
          "type": "number",
          "description": "Swap totals (transfers are not buys or sells)."
        },
        "boughtUsd": {
          "type": "number",
          "description": ""
        },
        "soldQty": {
          "type": "number",
          "description": ""
        },
        "soldUsd": {
          "type": "number",
          "description": ""
        },
        "buys": {
          "type": "integer",
          "description": ""
        },
        "sells": {
          "type": "integer",
          "description": ""
        },
        "firstBuyTs": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Unix time, milliseconds."
        },
        "lastTradeTs": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Unix time, milliseconds."
        }
      },
      "description": "What one held token cost."
    },
    "PositionsChain": {
      "type": "object",
      "properties": {
        "chain": {
          "type": [
            "integer",
            "string"
          ],
          "description": "EVM chain id, or `solana`."
        },
        "status": {
          "type": "string",
          "enum": [
            "ok",
            "partial",
            "unavailable"
          ],
          "description": "`ok` = every swap Chord's index holds for the wallet on this chain, and its token transfers, were read. `partial` = some were cut, and `reason` says which (for example `Transfers not read.` or `Transfers partial.`: the numbers stand on the swaps and the transfers that were read). `unavailable` = nothing read: no open or closed rows for this chain (Solana: not yet)."
        },
        "reason": {
          "type": "string",
          "description": "Present unless `ok`. One plain sentence for a person."
        },
        "fromTs": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Unix time, milliseconds. Swaps from here on are in the index for this chain: a buy before it reads as received. Null = no swap history read."
        }
      },
      "description": "One chain of a positions answer.",
      "required": [
        "chain",
        "status",
        "fromTs"
      ]
    }
  }
}

Work with this as data

Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for schemas

4 MCP tools reach this
  • find_json_schemasBrowse and filter every JSON Schema in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/getchord-xyz-positions-answer"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.