{
  "info": {
    "_postman_id": "a1b2c3d4-09b0-4a1a-9e2f-anaxerpublicv1",
    "name": "Anaxer Public API v1",
    "description": "# Anaxer Public API v1\n\nReal-time Solana DEX data — token launches, graduations, trades, and prices across 12 programs (PumpFun, Pump AMM, Raydium, Meteora, Orca, PancakeSwap).\n\n## Prerequisites\n- **Postman desktop** (WebSocket support is desktop-only).\n- An **API key** from the customer portal (`console.anaxer.com`), or a founder-issued beta key.\n\n## Setup\n1. Import this collection **and** one environment (`Anaxer Local` or `Anaxer Production`).\n2. Select the environment (top-right), open its variables, and paste your key into `apiKey`'s **Current Value** (it ships empty).\n3. Auth is preconfigured: the collection sends `Authorization: Bearer {{apiKey}}` on every `/v1` request. `x-api-key` is an equivalent alternate.\n\n## Environments\n| Environment | baseUrl | wsUrl |\n|---|---|---|\n| Anaxer Local | `http://localhost:3010` | `ws://localhost:3010` |\n| Anaxer Production | `https://api.anaxer.com` | `wss://api.anaxer.com` |\n\n## Auth & errors\nMissing/invalid key → `401 { error: { code: \"unauthorized\" } }`. Burst limit → `429 rate_limited`; monthly quota → `429 quota_exceeded`. Full error table in `docs/api/rest-v1.md`.\n\n## Canonical contracts\n- REST: `docs/api/rest-v1.md`\n- WebSocket: `docs/api/ws-v1.md`\n- Import guide: `docs/api/postman.md`",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "auth": {
    "type": "bearer",
    "bearer": [
      {
        "key": "token",
        "value": "{{apiKey}}",
        "type": "string"
      }
    ]
  },
  "item": [
    {
      "name": "Health",
      "description": "Liveness probe — no API key required.",
      "item": [
        {
          "name": "Health",
          "request": {
            "auth": {
              "type": "noauth"
            },
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/health",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "health"
              ]
            },
            "description": "Liveness probe — `{ status: \"ok\", uptimeSec, env, … }`. Used by uptime monitors. No auth.\n\nNot the admin health detail (that stays internal)."
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/health",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "health"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"status\": \"ok\",\n  \"uptimeSec\": 1149,\n  \"env\": \"production\",\n  \"wsMaxBufferedBytes\": 5242880,\n  \"wsSlowConsumerGraceMs\": 10000\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "Tokens",
      "description": "Token metadata, prices, and trade history. Requires an API key.",
      "item": [
        {
          "name": "Get token (single)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/tokens/{{sampleMint}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "tokens",
                "{{sampleMint}}"
              ]
            },
            "description": "Lean token metadata (`mint`/`name`/`symbol`/`supply`/`socials`). `supply` is a UI decimal string (raw÷10^decimals). Trade-only / incomplete mints resolve on demand via Helius DAS `getAssetBatch` (incl. Token-2022) + optional socials URI fetch on first request; never-observed → `404`; cold full-resolve DAS transport failure → `503`.\n\n`docs/api/rest-v1.md` → GET /v1/tokens/:mint"
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/v1/tokens/{{sampleMint}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "v1",
                    "tokens",
                    "{{sampleMint}}"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"mint\": \"3PFaeFMXiRVYueDCnHHSKndKDDpKZhbhFjQ13JXYpump\",\n  \"name\": \"The Black Bull\",\n  \"symbol\": \"ANSEM\",\n  \"supply\": \"1000000000\",\n  \"socials\": {\n    \"website\": null,\n    \"twitter\": null,\n    \"telegram\": null\n  }\n}"
            }
          ]
        },
        {
          "name": "Get token (batch)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/tokens/batch?mints={{batchMints}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "tokens",
                "batch"
              ],
              "query": [
                {
                  "key": "mints",
                  "value": "{{batchMints}}"
                }
              ]
            },
            "description": "Up to **30** mints, comma-separated in `mints`. Never-observed mints are omitted; missing/incomplete observed mints resolve on demand in a single Helius DAS `getAssetBatch` call (socials fetches concurrency-capped). Same lean shape + UI `supply` as single-mint. No `next`.\n\n`docs/api/rest-v1.md` → GET /v1/tokens/batch"
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/v1/tokens/batch?mints={{batchMints}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "v1",
                    "tokens",
                    "batch"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": [\n    {\n      \"mint\": \"3PFaeFMXiRVYueDCnHHSKndKDDpKZhbhFjQ13JXYpump\",\n      \"name\": \"The Black Bull\",\n      \"symbol\": \"ANSEM\",\n      \"supply\": \"1000000000\",\n      \"socials\": {\n        \"website\": null,\n        \"twitter\": null,\n        \"telegram\": null\n      }\n    }\n  ]\n}"
            }
          ]
        },
        {
          "name": "Get price (single)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/tokens/{{sampleMint}}/price",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "tokens",
                "{{sampleMint}}",
                "price"
              ]
            },
            "description": "Latest execution price from Redis `latest:price:<mint>`. Absent → `404` (normal for a mint with no recent priced trade).\n\n`docs/api/rest-v1.md` → GET /v1/tokens/:mint/price"
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/v1/tokens/{{sampleMint}}/price",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "v1",
                    "tokens",
                    "{{sampleMint}}",
                    "price"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"type\": \"price\",\n  \"source\": \"pump_fun\",\n  \"mint\": \"3PFaeFMXiRVYueDCnHHSKndKDDpKZhbhFjQ13JXYpump\",\n  \"price\": {\n    \"sol\": 2.7961789427701377e-8,\n    \"usd\": 0.0000021828682522916465\n  },\n  \"marketCapUsd\": 2182.8682522916465,\n  \"slot\": 432217264,\n  \"timestamp\": 1783770962000\n}"
            }
          ]
        },
        {
          "name": "Get price (batch)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/tokens/batch/price?mints={{batchMints}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "tokens",
                "batch",
                "price"
              ],
              "query": [
                {
                  "key": "mints",
                  "value": "{{batchMints}}"
                }
              ]
            },
            "description": "Up to **30** mints. Missing prices are omitted (not errored). No `next`.\n\n`docs/api/rest-v1.md` → GET /v1/tokens/batch/price"
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/v1/tokens/batch/price?mints={{batchMints}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "v1",
                    "tokens",
                    "batch",
                    "price"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": [\n    {\n      \"type\": \"price\",\n      \"source\": \"pump_fun\",\n      \"mint\": \"3PFaeFMXiRVYueDCnHHSKndKDDpKZhbhFjQ13JXYpump\",\n      \"price\": {\n        \"sol\": 2.7961789427701377e-8,\n        \"usd\": 0.0000021828682522916465\n      },\n      \"marketCapUsd\": 2182.8682522916465,\n      \"slot\": 432217264,\n      \"timestamp\": 1783770962000\n    }\n  ]\n}"
            }
          ]
        },
        {
          "name": "Get trades",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/tokens/{{sampleMint}}/trades?limit={{limit}}&cursor=&source=&from=&to=&solOnly=",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "tokens",
                "{{sampleMint}}",
                "trades"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "{{limit}}"
                },
                {
                  "key": "cursor",
                  "value": "",
                  "description": "Opaque keyset from previous `next` — enable to paginate",
                  "disabled": true
                },
                {
                  "key": "source",
                  "value": "pump_fun",
                  "disabled": true
                },
                {
                  "key": "from",
                  "value": "",
                  "description": "ISO-8601 or unix ms",
                  "disabled": true
                },
                {
                  "key": "to",
                  "value": "",
                  "description": "ISO-8601 or unix ms",
                  "disabled": true
                },
                {
                  "key": "solOnly",
                  "value": "true",
                  "description": "When true, keep only SOL-paired swaps",
                  "disabled": true
                }
              ]
            },
            "description": "Trade history for a mint (either swap leg), newest first. Pagination via `cursor` (pass the previous response's `next` until `null`). Optional filters: `limit` (default 50, max 200), `source`, `from`/`to` (ISO-8601 or unix ms, retention-clamped), `solOnly=true` (SOL-paired rows only). Quote assets (SOL/USDC/USDT) are rejected as `:mint`.\n\nCursors are endpoint-scoped — don't reuse a `next` from creations here.\n\n`docs/api/rest-v1.md` → GET /v1/tokens/:mint/trades"
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/v1/tokens/{{sampleMint}}/trades?limit={{limit}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "v1",
                    "tokens",
                    "{{sampleMint}}",
                    "trades"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": [\n    {\n      \"type\": \"swap\",\n      \"signature\": \"2SpQzzA2CgLmG2GbQU1JcxTiRNf3KkrMWqNUNtypbARs4ahTRTKJhVLZMbcEJVaxKuFh6HsRumWDgWU58hRgGFDF\",\n      \"slot\": 432217264,\n      \"timestamp\": 1783770962000,\n      \"wallet\": \"8gM4gnxdLdkvifM9TCwkGAxrnNw4NiSiHbAdE1RqY96e\",\n      \"source\": \"pump_fun\",\n      \"volumeUsd\": 0.0008,\n      \"swap\": {\n        \"from\": {\n          \"mint\": \"So11111111111111111111111111111111111111112\",\n          \"amount\": \"10001\",\n          \"uiAmount\": 0.000010001,\n          \"decimals\": 9\n        },\n        \"to\": {\n          \"mint\": \"3PFaeFMXiRVYueDCnHHSKndKDDpKZhbhFjQ13JXYpump\",\n          \"amount\": \"357666666\",\n          \"uiAmount\": 357.666666,\n          \"decimals\": 6\n        }\n      }\n    }\n  ],\n  \"next\": null,\n  \"window\": {\n    \"from\": 1781184210274,\n    \"to\": 1783776210274\n  }\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "Lifecycle",
      "description": "Token launches (creations) and bonding-curve graduations across all launchpads.",
      "item": [
        {
          "name": "Get creations",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/creations?limit={{limit}}&source=&cursor=&from=&to=&excludeMayhem=",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "creations"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "{{limit}}"
                },
                {
                  "key": "source",
                  "value": "pump_fun",
                  "disabled": true
                },
                {
                  "key": "cursor",
                  "value": "",
                  "description": "Opaque keyset from previous `next` — enable to paginate",
                  "disabled": true
                },
                {
                  "key": "from",
                  "value": "",
                  "description": "ISO-8601 or unix ms",
                  "disabled": true
                },
                {
                  "key": "to",
                  "value": "",
                  "description": "ISO-8601 or unix ms",
                  "disabled": true
                },
                {
                  "key": "excludeMayhem",
                  "value": "true",
                  "description": "Optional. true/false/1/0 — when true, drop mayhemMode rows",
                  "disabled": true
                }
              ]
            },
            "description": "New token launches, newest first. Pagination via `cursor` (pass the previous response's `next` until `null`). Optional filters: `source`, `limit`, `from`/`to`, `excludeMayhem`.\n\n`docs/api/rest-v1.md` → GET /v1/creations"
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/v1/creations?limit={{limit}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "v1",
                    "creations"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": [\n    {\n      \"type\": \"created\",\n      \"signature\": \"2SpQzzA2CgLmG2GbQU1JcxTiRNf3KkrMWqNUNtypbARs4ahTRTKJhVLZMbcEJVaxKuFh6HsRumWDgWU58hRgGFDF\",\n      \"slot\": 432217264,\n      \"timestamp\": 1783770962000,\n      \"source\": \"pump_fun\",\n      \"mint\": \"3PFaeFMXiRVYueDCnHHSKndKDDpKZhbhFjQ13JXYpump\",\n      \"creator\": \"8gM4gnxdLdkvifM9TCwkGAxrnNw4NiSiHbAdE1RqY96e\",\n      \"name\": \"The Black Bull\",\n      \"symbol\": \"ANSEM\",\n      \"uri\": \"https://ipfs.io/ipfs/QmExampleMetadataCid\",\n      \"socials\": {\n        \"website\": null,\n        \"twitter\": null,\n        \"telegram\": null\n      },\n      \"mayhemMode\": false\n    }\n  ],\n  \"next\": \"eyJ0IjoxNzgzNzcwOTU3MDAwLCJpIjoiNG1ETmhHbmozZTVqQnNyMUhUMjdmYkNBTXZjekt4ZjhSOGdlSHAyRndmVEhpZ0tqTXgxOFNqUER6OWtOZ2lCcVF6VmZxUkpIc0pYS1NNaktRTFF2WFk1YyJ9\",\n  \"window\": {\n    \"from\": 1781184210197,\n    \"to\": 1783776210197\n  }\n}"
            }
          ]
        },
        {
          "name": "Get graduations",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/graduations?limit={{limit}}&source=&cursor=&from=&to=&excludeMayhem=&minLiquiditySol=",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "graduations"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "{{limit}}"
                },
                {
                  "key": "source",
                  "value": "meteora_dbc",
                  "disabled": true
                },
                {
                  "key": "cursor",
                  "value": "",
                  "description": "Opaque keyset from previous `next` — enable to paginate",
                  "disabled": true
                },
                {
                  "key": "from",
                  "value": "",
                  "description": "ISO-8601 or unix ms",
                  "disabled": true
                },
                {
                  "key": "to",
                  "value": "",
                  "description": "ISO-8601 or unix ms",
                  "disabled": true
                },
                {
                  "key": "excludeMayhem",
                  "value": "true",
                  "description": "Optional. true/false/1/0 — when true, drop mayhemMode rows",
                  "disabled": true
                },
                {
                  "key": "minLiquiditySol",
                  "value": "50",
                  "description": "Optional. SOL floor; null liquidity_sol rows are excluded",
                  "disabled": true
                }
              ]
            },
            "description": "Bonding-curve graduations / migrations, one row per mint (first signal wins). Same query shape as creations; pagination via `cursor`. Optional: `excludeMayhem`, `minLiquiditySol`. `timeToGraduateSeconds` is computed at read time.\n\n`docs/api/rest-v1.md` → GET /v1/graduations"
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/v1/graduations?limit={{limit}}",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "v1",
                    "graduations"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"data\": [\n    {\n      \"type\": \"graduated\",\n      \"source\": \"meteora_dbc\",\n      \"mint\": \"DF23Aqz3Vryzs8ELxy3H1d32YiiuvdFg92Wao68spump\",\n      \"name\": null,\n      \"symbol\": null,\n      \"creator\": \"QfD9wmCiZ9BpD3yJa9rHrnwXbHykvSb1okw82wx8Vdt\",\n      \"uri\": null,\n      \"socials\": {\n        \"website\": null,\n        \"twitter\": null,\n        \"telegram\": null\n      },\n      \"timeToGraduateSeconds\": 17,\n      \"signature\": \"2ru6CtZxnpn9Ha2r3knj4mzdFNEqXJZXm9QtUpLMMeLnzXMw75aoM3SCeWbNmMqLafxni8Dd66g4vKkzFYBnv6FK\",\n      \"slot\": 432217238,\n      \"timestamp\": 1783770951000,\n      \"mayhemMode\": false,\n      \"liquiditySol\": null\n    }\n  ],\n  \"next\": null,\n  \"window\": {\n    \"from\": 1781184210291,\n    \"to\": 1783776210291\n  }\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "Launchpads",
      "description": "Aggregate launchpad activity.",
      "item": [
        {
          "name": "Get launchpad stats",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/launchpads/stats?windowHours=24",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "launchpads",
                "stats"
              ],
              "query": [
                {
                  "key": "windowHours",
                  "value": "24"
                }
              ]
            },
            "description": "Per-launchpad creation/graduation counts + graduation rate over `windowHours` (default 24, clamped to plan retention). Always returns `pump_fun`, `raydium_launchlab`, `bonkfun` (zeros, never null). Meteora DBC is excluded — launchpad signal is pump.fun + Raydium only.\n\n`docs/api/rest-v1.md` → GET /v1/launchpads/stats"
          },
          "response": [
            {
              "name": "200 OK",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/v1/launchpads/stats?windowHours=24",
                  "host": [
                    "{{baseUrl}}"
                  ],
                  "path": [
                    "v1",
                    "launchpads",
                    "stats"
                  ]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "cookie": [],
              "body": "{\n  \"windowHours\": 24,\n  \"window\": {\n    \"from\": 1783689810308,\n    \"to\": 1783776210308\n  },\n  \"sources\": [\n    {\n      \"source\": \"pump_fun\",\n      \"creations\": 738,\n      \"graduations\": 25,\n      \"graduationRate\": 0.03387533875338753\n    },\n    {\n      \"source\": \"raydium_launchlab\",\n      \"creations\": 0,\n      \"graduations\": 0,\n      \"graduationRate\": 0\n    },\n    {\n      \"source\": \"bonkfun\",\n      \"creations\": 0,\n      \"graduations\": 0,\n      \"graduationRate\": 0\n    }\n  ]\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "Stream (WebSocket)",
      "description": "Live streaming over WebSocket (`GET /v1/stream`).\n\n> **Postman note:** native WebSocket requests can't be shipped inside an importable v2.1 collection (Postman stores them in a separate internal format). So this folder is a **copy-paste guide**, not a runnable request. In Postman: **New → WebSocket Request**, paste the Connect URL below, hit **Connect**, then send the message templates.\n\n**Flow:** connect → wait for `{ v:1, type:\"connected\", limits:{ connectionsPerStream, tradesRequiresMints, tradesMintCap } }` → send a `subscribe` → look for `{ type:\"subscribed\" }` → data arrives as `{ v:1, channel, type, sub, ts, data }`.\n\nAuth: the URL carries `?apiKey={{apiKey}}` (Postman's WS client can't always set headers). Server integrations should prefer `Authorization: Bearer <key>` instead.\n\nCanonical contract: `docs/api/ws-v1.md`.",
      "item": [
        {
          "name": "Connect /v1/stream",
          "request": {
            "auth": {
              "type": "noauth"
            },
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{wsUrl}}/v1/stream?apiKey={{apiKey}}",
              "host": [
                "{{wsUrl}}"
              ],
              "path": [
                "v1",
                "stream"
              ],
              "query": [
                {
                  "key": "apiKey",
                  "value": "{{apiKey}}"
                }
              ]
            },
            "description": "**This is a WebSocket endpoint — the HTTP `Send` button will not work here.**\n\nCreate a WebSocket request in Postman (**New → WebSocket Request**) and use this URL:\n\n```\n{{wsUrl}}/v1/stream?apiKey={{apiKey}}\n```\n\nAfter you see `connected`, send any of these (each `id` must be unique on the connection, 1–64 chars of `[A-Za-z0-9_-]`):\n\n**Ping** (→ `pong`):\n```json\n{ \"type\": \"ping\" }\n```\n\n**Subscribe — trades (all):**\n```json\n{ \"type\": \"subscribe\", \"id\": \"trades-1\", \"channel\": \"trades\" }\n```\n\n**Subscribe — trades (filtered):**\n```json\n{ \"type\": \"subscribe\", \"id\": \"trades-2\", \"channel\": \"trades\", \"filters\": { \"sources\": [\"pump_fun\", \"pump_amm\"], \"minVolumeUsd\": 10 } }\n```\n\n**Subscribe — trades (SOL-paired tokens; Starter-shaped):**\n```json\n{ \"type\": \"subscribe\", \"id\": \"trades-sol\", \"channel\": \"trades\", \"filters\": { \"mints\": [\"3PFaeFMXiRVYueDCnHHSKndKDDpKZhbhFjQ13JXYpump\"], \"solOnly\": true } }\n```\n\nNote: quote assets (SOL / USDC / USDT) are rejected in `mints` on `trades` — use `solOnly: true` instead of `mints: [SOL]`.\n\n**Subscribe — creations:**\n```json\n{ \"type\": \"subscribe\", \"id\": \"creations-1\", \"channel\": \"creations\", \"filters\": { \"sources\": [\"pump_fun\"] } }\n```\n\n**Subscribe — creations (enriched):**\n```json\n{ \"type\": \"subscribe\", \"id\": \"creations-enriched\", \"channel\": \"creations\", \"filters\": { \"enriched\": true } }\n```\n\n**Subscribe — creations (exclude Mayhem):**\n```json\n{ \"type\": \"subscribe\", \"id\": \"creations-mayhem\", \"channel\": \"creations\", \"filters\": { \"excludeMayhem\": true } }\n```\n\n**Subscribe — graduations:**\n```json\n{ \"type\": \"subscribe\", \"id\": \"graduations-1\", \"channel\": \"graduations\" }\n```\n\n**Subscribe — graduations (min liquidity + exclude Mayhem):**\n```json\n{ \"type\": \"subscribe\", \"id\": \"grads-1\", \"channel\": \"graduations\", \"filters\": { \"excludeMayhem\": true, \"minLiquiditySol\": 50 } }\n```\n\n**Subscribe — prices** (Starter+):\n```json\n{ \"type\": \"subscribe\", \"id\": \"prices-1\", \"channel\": \"prices\", \"filters\": { \"mints\": [\"3PFaeFMXiRVYueDCnHHSKndKDDpKZhbhFjQ13JXYpump\"] } }\n```\n\n**Unsubscribe:**\n```json\n{ \"type\": \"unsubscribe\", \"id\": \"trades-1\" }\n```\n\nFull contract: `docs/api/ws-v1.md`."
          },
          "response": []
        }
      ]
    }
  ],
  "variable": [
    {
      "key": "sampleMint",
      "value": "3PFaeFMXiRVYueDCnHHSKndKDDpKZhbhFjQ13JXYpump",
      "type": "string"
    },
    {
      "key": "batchMints",
      "value": "3PFaeFMXiRVYueDCnHHSKndKDDpKZhbhFjQ13JXYpump,89XxGhvX3SB8ewRbefuDyiHtBdkfC46tDwHkAcyypump",
      "type": "string"
    },
    {
      "key": "limit",
      "value": "50",
      "type": "string"
    }
  ]
}
