> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cabalspy.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# Latest trades

> GET /v1/transactions/latest: the newest trades of your users' verified wallets, each with the trader's profile.

The newest trades of your users' verified wallets, newest first, each with the trader's CabalSpy ID profile. Leave out blockchain to get every chain at once.

Use it for a social trade feed or to backfill a feed before you connect to the [live stream](/cabalspy-id/stream), which pushes the same trade objects.

## Query Parameters

<ParamField query="blockchain" type="string">
  Chain filter. One of solana, bnb, base, eth, rh. Empty means every chain.
</ParamField>

<ParamField query="limit" default="50" type="integer">
  Number of trades, 1 to 100.
</ParamField>

<ParamField query="scope" default="instance" type="string">
  `global` returns trades of every CabalSpy ID user. Enterprise plan only.
</ParamField>

<ParamField query="instance" type="string">
  Your Instance ID. Only needed when your account has several instances.
</ParamField>

<ParamField query="api_key" type="string" required>
  Your API key. Alternatively pass it as an Authorization Bearer header.
</ParamField>

## Usage Example

<CodeGroup>
  ```bash cURL theme={null}
  curl "https://api-id.cabalspy.xyz/v1/transactions/latest?blockchain=solana&limit=20" \
    -H "Authorization: Bearer YOUR_KEY"
  ```

  ```python Python theme={null}
  import requests

  r = requests.get("https://api-id.cabalspy.xyz/v1/transactions/latest",
                   params={"limit": 20}, headers={"Authorization": "Bearer YOUR_KEY"})
  for t in r.json()["data"]:
      who = t["trader"]["username"] if t["trader"] else t["wallet"]
      print(t["timestamp"], who, t["transaction_type"], t["token_symbol"], t["value_usd"])
  ```

  ```javascript JavaScript theme={null}
  const p = new URLSearchParams({ blockchain: "solana", limit: "20" });
  const res = await fetch(`https://api-id.cabalspy.xyz/v1/transactions/latest?${p}`, {
    headers: { Authorization: "Bearer YOUR_KEY" },
  });
  const { data } = await res.json();
  data.forEach(t => console.log(t.timestamp, t.trader?.username, t.transaction_type, t.token_symbol));
  ```
</CodeGroup>

## Response

<ResponseField name="success" type="boolean">
  True on success.
</ResponseField>

<ResponseField name="data" type="array">
  <Expandable title="trade">
    <ResponseField name="signature" type="string">
      Transaction signature or hash.
    </ResponseField>

    <ResponseField name="blockchain" type="string">
      Chain.
    </ResponseField>

    <ResponseField name="wallet" type="string">
      The trading wallet.
    </ResponseField>

    <ResponseField name="mint" type="string">
      Token mint or contract.
    </ResponseField>

    <ResponseField name="transaction_type" type="string">
      buy or sell.
    </ResponseField>

    <ResponseField name="token_symbol" type="string">
      Token symbol.
    </ResponseField>

    <ResponseField name="token_name" type="string">
      Token name.
    </ResponseField>

    <ResponseField name="token_logo" type="string">
      Token logo URL.
    </ResponseField>

    <ResponseField name="token_amount" type="number">
      Tokens bought or sold.
    </ResponseField>

    <ResponseField name="value" type="number">
      Trade value (native).
    </ResponseField>

    <ResponseField name="value_usd" type="number">
      Trade value in USD.
    </ResponseField>

    <ResponseField name="currency" type="string">
      Native currency.
    </ResponseField>

    <ResponseField name="timestamp" type="string">
      ISO timestamp of the trade.
    </ResponseField>

    <ResponseField name="trader" type="object">
      <Expandable title="trader">
        <ResponseField name="csid_id" type="string">
          The trader's CabalSpy ID.
        </ResponseField>

        <ResponseField name="username" type="string">
          X handle.
        </ResponseField>

        <ResponseField name="name" type="string">
          Display name.
        </ResponseField>

        <ResponseField name="image_url" type="string">
          Avatar URL.
        </ResponseField>

        <ResponseField name="kol" type="boolean">
          Whether the trader holds the KOL badge.
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="pagination" type="object">
  limit, total (always null), has\_more (always false) and next\_cursor (always null). This endpoint returns only the newest trades.
</ResponseField>

<ResponseExample>
  ```json Response theme={null}
  {
    "success": true,
    "data": [
      {
        "signature": "5xr8abc...",
        "blockchain": "solana",
        "wallet": "7j7AA3HZR2zEjwAQEKPFh2qucLY4fqZpB9iodf39w8xW",
        "mint": "3Pkrq4MmLvDXyn1fa3sz5MekKRkZkc1iLDcz5AzWpump",
        "transaction_type": "buy",
        "token_symbol": "invisibull",
        "token_name": "invisibull",
        "token_logo": "https://...",
        "token_amount": 22113972.03,
        "value": 1.66,
        "value_usd": 137.44,
        "currency": "SOL",
        "timestamp": "2026-10-13T08:03:58Z",
        "trader": {
          "csid_id": "0b7c4a52-3f1e-4f43-9d0a-2b5e7c1d9a11",
          "username": "MazeCCC",
          "name": "Maze",
          "image_url": "https://pbs.twimg.com/profile_images/.../photo.jpg",
          "kol": true
        }
      }
    ],
    "pagination": {
      "limit": 20,
      "total": null,
      "has_more": false,
      "next_cursor": null
    },
    "meta": {
      "request_id": "req_5162c7cf7f87",
      "cached": false,
      "cache_age_seconds": 0,
      "version": "v1",
      "timestamp": "2026-10-13T08:04:11Z"
    }
  }
  ```
</ResponseExample>

## Errors

| Status | Code | Meaning |
| - | - | - |
| 400 | invalid\_parameter | blockchain, limit or scope invalid. |
| 401 | missing\_api\_key | API key missing. |
| 403 | invalid\_api\_key | API key invalid or not enabled for CabalSpy ID. |
| 403 | scope\_not\_allowed | scope=global needs the Enterprise plan. |
| 429 | rate\_limit\_exceeded | Rate limit exceeded. |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.