diff --git a/.github/workflows/bump.yml b/.github/workflows/bump.yml index ae0b72b..1dfd7f9 100644 --- a/.github/workflows/bump.yml +++ b/.github/workflows/bump.yml @@ -1,8 +1,13 @@ name: Bump version -# Bumps the patch version, commits, and pushes a v* tag. -# Pushing the tag triggers release.yml, which builds, publishes to npm, -# and cuts a GitHub Release. +# Fetches the latest supergraph schema, diffs it against the committed copy, +# commits the schema update, bumps the version (minor if the schema diff has +# breaking changes, patch otherwise), and pushes a v* tag. Pushing the tag +# triggers release.yml, which builds and publishes to npm. The GitHub Release +# notes lead with the schema diff, followed by auto-generated PR notes. +# +# If the schema is unchanged and there are no commits since the last tag, +# the run skips the release instead of publishing an empty one. on: workflow_dispatch: @@ -21,18 +26,46 @@ jobs: with: node-version: 20 - uses: pnpm/action-setup@v4 + - run: pnpm install --frozen-lockfile - name: Configure git run: | git config user.name "github-actions[bot]" git config user.email "41898282+github-actions[bot]@users.noreply.github.com" - - name: Bump patch version and tag + - name: Fetch latest schema and diff against committed copy + id: diff + run: | + cp src/resources/schema.graphql /tmp/old-schema.graphql + pnpm run fetch:schema + pnpm --silent run schema:diff /tmp/old-schema.graphql src/resources/schema.graphql > /tmp/schema-changes.md + cat /tmp/schema-changes.md >> "$GITHUB_STEP_SUMMARY" + - name: Decide whether to release + id: gate + run: | + LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || true) + if [ "${{ steps.diff.outputs.changed }}" = "true" ] || [ -z "$LAST_TAG" ] || [ -n "$(git log "$LAST_TAG"..HEAD --oneline)" ]; then + echo "release=true" >> "$GITHUB_OUTPUT" + else + echo "release=false" >> "$GITHUB_OUTPUT" + echo "Schema unchanged and no commits since $LAST_TAG — skipping release." >> "$GITHUB_STEP_SUMMARY" + fi + - name: Commit schema update + if: steps.gate.outputs.release == 'true' && steps.diff.outputs.changed == 'true' + run: | + git add src/resources/schema.graphql + git commit -m "chore: update supergraph schema" + - name: Bump version and tag + if: steps.gate.outputs.release == 'true' id: bump run: | - echo "tag=$(pnpm version patch -m 'chore(release): %s')" >> "$GITHUB_OUTPUT" + if [ "${{ steps.diff.outputs.level }}" = "breaking" ]; then BUMP=minor; else BUMP=patch; fi + echo "tag=$(pnpm version $BUMP -m 'chore(release): %s')" >> "$GITHUB_OUTPUT" - name: Push commit and tag + if: steps.gate.outputs.release == 'true' run: git push --follow-tags - name: Create GitHub Release + if: steps.gate.outputs.release == 'true' uses: softprops/action-gh-release@v2 with: tag_name: ${{ steps.bump.outputs.tag }} + body_path: /tmp/schema-changes.md generate_release_notes: true diff --git a/.gitignore b/.gitignore index 0ec10e4..eb2ddb2 100644 --- a/.gitignore +++ b/.gitignore @@ -6,8 +6,11 @@ coverage dist yarn-error.log -# Generated resources (all regenerated at build time) -src/resources/ +# Generated resources (regenerated at build time), except the schema — +# it's tracked so releases record schema changes and builds are reproducible. +# fetch:schema updates it; build reads the committed copy. +src/resources/* +!src/resources/schema.graphql # Published copy of the schema (regenerated by fetch:schema) /schema.graphql diff --git a/package.json b/package.json index 47808ba..4cc93ca 100644 --- a/package.json +++ b/package.json @@ -19,12 +19,14 @@ "scripts": { "prebuild": "pnpm run clean && pnpm run generate:configs", "clean": "rm -rf dist dist-esm", - "build": "pnpm run fetch:schema && pnpm run generate:graphql && pnpm run build:sdk && pnpm run codegen && pnpm run lint ./src/sdk --fix && pnpm run build:types", + "build": "pnpm run copy:schema && pnpm run generate:graphql && pnpm run build:sdk && pnpm run codegen && pnpm run lint ./src/sdk --fix && pnpm run build:types", "build:types": "pnpm run build:cjs && pnpm run build:esm && pnpm run build:rename-esm", "build:cjs": "tsc", "build:esm": "tsc -p tsconfig.esm.json", "build:rename-esm": "find dist-esm -name '*.js' -exec sh -c 'mv \"$1\" \"${1%.js}.mjs\"' _ {} \\; && cp -r dist-esm/* dist/ && rm -rf dist-esm", "fetch:schema": "curl -s https://graph.codex.io/schema/latest.graphql --output src/resources/schema.graphql && cp src/resources/schema.graphql schema.graphql", + "copy:schema": "cp src/resources/schema.graphql schema.graphql", + "schema:diff": "tsx src/scripts/schemaDiff.ts", "generate:configs": "tsx src/scripts/generateNetworkConfigs.ts", "generate:graphql": "tsx src/scripts/generateGraphql.ts", "build:sdk": "tsx src/scripts/buildSdk.ts", @@ -72,6 +74,7 @@ "@graphql-codegen/introspection": "4.0.0", "@graphql-codegen/typescript": "4.0.1", "@graphql-eslint/eslint-plugin": "^3.20.1", + "@graphql-inspector/core": "^7.1.3", "@graphql-tools/wrap": "^10.0.5", "@types/jest": "^29.5.4", "@types/lodash": "^4.17.7", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 02f06b4..71de304 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -39,6 +39,9 @@ importers: '@graphql-eslint/eslint-plugin': specifier: ^3.20.1 version: 3.20.1(@babel/core@7.28.5)(@types/node@20.19.24)(graphql@16.12.0) + '@graphql-inspector/core': + specifier: ^7.1.3 + version: 7.1.3(graphql@16.12.0) '@graphql-tools/wrap': specifier: ^10.0.5 version: 10.1.4(graphql@16.12.0) @@ -751,6 +754,12 @@ packages: resolution: {integrity: sha512-RiwLMc89lTjvyLEivZ/qxAC5nBHoS2CtsWFSOsN35sxG9zoo5Z+JsFHM8MlvmO9yt+MJNIyC5MLE1rsbOphlag==} engines: {node: '>=18.0.0'} + '@graphql-inspector/core@7.1.3': + resolution: {integrity: sha512-KY5UlRVn3Q12mBeGCu0Z2dmKYUl+eiHpLPo5cyQBWmAibjatPe0IO3I9THW/9rPusafbh3cRnGpYHIH/SxyASQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + graphql: ^16.9.0 + '@graphql-tools/apollo-engine-loader@8.0.24': resolution: {integrity: sha512-4xKyJcrUoYh7t2JeLPiYIOrIrizxq8J3A5mDAw4/HzlFp4D40k0uXdCm7LCpYkeKGTWeaCFeQwGh61Uync7MhA==} engines: {node: '>=16.0.0'} @@ -1053,89 +1062,105 @@ packages: resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} cpu: [arm64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-arm@1.2.4': resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} cpu: [arm] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-ppc64@1.2.4': resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} cpu: [ppc64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-riscv64@1.2.4': resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} cpu: [riscv64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-s390x@1.2.4': resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} cpu: [s390x] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-x64@1.2.4': resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} cpu: [x64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linuxmusl-arm64@1.2.4': resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} cpu: [arm64] os: [linux] + libc: [musl] '@img/sharp-libvips-linuxmusl-x64@1.2.4': resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} cpu: [x64] os: [linux] + libc: [musl] '@img/sharp-linux-arm64@0.34.5': resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + libc: [glibc] '@img/sharp-linux-arm@0.34.5': resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] + libc: [glibc] '@img/sharp-linux-ppc64@0.34.5': resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ppc64] os: [linux] + libc: [glibc] '@img/sharp-linux-riscv64@0.34.5': resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [riscv64] os: [linux] + libc: [glibc] '@img/sharp-linux-s390x@0.34.5': resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] + libc: [glibc] '@img/sharp-linux-x64@0.34.5': resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + libc: [glibc] '@img/sharp-linuxmusl-arm64@0.34.5': resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + libc: [musl] '@img/sharp-linuxmusl-x64@0.34.5': resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + libc: [musl] '@img/sharp-wasm32@0.34.5': resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} @@ -1285,24 +1310,28 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [glibc] '@next/swc-linux-arm64-musl@15.3.1': resolution: {integrity: sha512-IIxXEXRti/AulO9lWRHiCpUUR8AR/ZYLPALgiIg/9ENzMzLn3l0NSxVdva7R/VDcuSEBo0eGVCe3evSIHNz0Hg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [musl] '@next/swc-linux-x64-gnu@15.3.1': resolution: {integrity: sha512-bfI4AMhySJbyXQIKH5rmLJ5/BP7bPwuxauTvVEiJ/ADoddaA9fgyNNCcsbu9SlqfHDoZmfI6g2EjzLwbsVTr5A==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [glibc] '@next/swc-linux-x64-musl@15.3.1': resolution: {integrity: sha512-FeAbR7FYMWR+Z+M5iSGytVryKHiAsc0x3Nc3J+FD5NVbD5Mqz7fTSy8CYliXinn7T26nDMbpExRUI/4ekTvoiA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [musl] '@next/swc-win32-arm64-msvc@15.3.1': resolution: {integrity: sha512-yP7FueWjphQEPpJQ2oKmshk/ppOt+0/bB8JC8svPUZNy0Pi3KbPx2Llkzv1p8CoQa+D2wknINlJpHf3vtChVBw==} @@ -1605,24 +1634,28 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [glibc] '@tailwindcss/oxide-linux-arm64-musl@4.1.17': resolution: {integrity: sha512-HvZLfGr42i5anKtIeQzxdkw/wPqIbpeZqe7vd3V9vI3RQxe3xU1fLjss0TjyhxWcBaipk7NYwSrwTwK1hJARMg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [musl] '@tailwindcss/oxide-linux-x64-gnu@4.1.17': resolution: {integrity: sha512-M3XZuORCGB7VPOEDH+nzpJ21XPvK5PyjlkSFkFziNHGLc5d6g3di2McAAblmaSUNl8IOmzYwLx9NsE7bplNkwQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [glibc] '@tailwindcss/oxide-linux-x64-musl@4.1.17': resolution: {integrity: sha512-k7f+pf9eXLEey4pBlw+8dgfJHY4PZ5qOUFDyNf7SI6lHjQ9Zt7+NcscjpwdCEbYi6FI5c2KDTDWyf2iHcCSyyQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [musl] '@tailwindcss/oxide-wasm32-wasi@4.1.17': resolution: {integrity: sha512-cEytGqSSoy7zK4JRWiTCx43FsKP/zGr0CsuMawhH67ONlH+T79VteQeJQRO/X7L0juEUA8ZyuYikcRBf0vsxhg==} @@ -1823,6 +1856,7 @@ packages: '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + deprecated: Potential CWE-502 - Update to 1.3.1 or higher '@unrs/resolver-binding-android-arm-eabi@1.11.1': resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==} @@ -1863,41 +1897,49 @@ packages: resolution: {integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==} cpu: [arm64] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-arm64-musl@1.11.1': resolution: {integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==} cpu: [arm64] os: [linux] + libc: [musl] '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': resolution: {integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==} cpu: [ppc64] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': resolution: {integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==} cpu: [riscv64] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': resolution: {integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==} cpu: [riscv64] os: [linux] + libc: [musl] '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': resolution: {integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==} cpu: [s390x] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-x64-gnu@1.11.1': resolution: {integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==} cpu: [x64] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-x64-musl@1.11.1': resolution: {integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==} cpu: [x64] os: [linux] + libc: [musl] '@unrs/resolver-binding-wasm32-wasi@1.11.1': resolution: {integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==} @@ -2425,6 +2467,10 @@ packages: resolution: {integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==} engines: {node: '>= 0.6.0'} + dependency-graph@1.0.0: + resolution: {integrity: sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg==} + engines: {node: '>=4'} + detect-indent@6.1.0: resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} engines: {node: '>=8'} @@ -2894,7 +2940,7 @@ packages: glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me globals@13.24.0: resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} @@ -3542,24 +3588,28 @@ packages: engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] lightningcss-linux-arm64-musl@1.30.2: resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + libc: [musl] lightningcss-linux-x64-gnu@1.30.2: resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + libc: [glibc] lightningcss-linux-x64-musl@1.30.2: resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + libc: [musl] lightningcss-win32-arm64-msvc@1.30.2: resolution: {integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==} @@ -3734,6 +3784,7 @@ packages: next@15.3.1: resolution: {integrity: sha512-8+dDV0xNLOgHlyBxP1GwHGVaNXsmp+2NhZEYrXr24GWLHtt27YrBPbPuHvzlhi7kZNYjeJNR93IF5zfFu5UL0g==} engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} + deprecated: This version has a security vulnerability. Please upgrade to a patched version. See https://nextjs.org/blog/CVE-2025-66478 for more details. hasBin: true peerDependencies: '@opentelemetry/api': ^1.1.0 @@ -3798,6 +3849,10 @@ packages: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} + object-inspect@1.13.2: + resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + engines: {node: '>= 0.4'} + object-inspect@1.13.4: resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} @@ -4062,6 +4117,7 @@ packages: recharts@2.15.4: resolution: {integrity: sha512-UT/q6fwS3c1dHbXv2uFgYJ9BMFHu3fwnd7AYZaEQhXuYQ4hgsxLvsUXzGdKeZrW5xopzDCvuA2N41WJ88I7zIw==} engines: {node: '>=14'} + deprecated: 1.x and 2.x branches are no longer active. Bump to Recharts v3 to receive latest features and bugfixes. See https://github.com/recharts/recharts/wiki/3.0-migration-guide peerDependencies: react: ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -4462,6 +4518,9 @@ packages: tslib@2.5.3: resolution: {integrity: sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==} + tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + tslib@2.6.3: resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} @@ -5355,6 +5414,13 @@ snapshots: '@graphql-hive/signal@1.0.0': {} + '@graphql-inspector/core@7.1.3(graphql@16.12.0)': + dependencies: + dependency-graph: 1.0.0 + graphql: 16.12.0 + object-inspect: 1.13.2 + tslib: 2.6.2 + '@graphql-tools/apollo-engine-loader@8.0.24(graphql@16.12.0)': dependencies: '@graphql-tools/utils': 10.10.1(graphql@16.12.0) @@ -5430,7 +5496,7 @@ snapshots: dependencies: graphql: 16.12.0 lodash.sortby: 4.7.0 - tslib: 2.6.3 + tslib: 2.8.1 '@graphql-tools/executor-common@0.0.4(graphql@16.12.0)': dependencies: @@ -5683,7 +5749,7 @@ snapshots: '@graphql-tools/optimize@2.0.0(graphql@16.12.0)': dependencies: graphql: 16.12.0 - tslib: 2.6.3 + tslib: 2.8.1 '@graphql-tools/prisma-loader@8.0.17(@types/node@20.19.24)(graphql@16.12.0)': dependencies: @@ -5719,7 +5785,7 @@ snapshots: '@ardatan/relay-compiler': 12.0.3(graphql@16.12.0) '@graphql-tools/utils': 10.10.1(graphql@16.12.0) graphql: 16.12.0 - tslib: 2.6.3 + tslib: 2.8.1 transitivePeerDependencies: - encoding @@ -7367,6 +7433,8 @@ snapshots: dependency-graph@0.11.0: {} + dependency-graph@1.0.0: {} + detect-indent@6.1.0: {} detect-libc@2.1.2: {} @@ -7572,8 +7640,8 @@ snapshots: '@typescript-eslint/parser': 6.21.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) eslint: 9.39.1(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.1(jiti@2.6.1)) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@6.21.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@6.21.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@2.6.1)) eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.1(jiti@2.6.1)) eslint-plugin-react: 7.37.5(eslint@9.39.1(jiti@2.6.1)) eslint-plugin-react-hooks: 5.2.0(eslint@9.39.1(jiti@2.6.1)) @@ -7596,7 +7664,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.1(jiti@2.6.1)): + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.3 @@ -7607,7 +7675,7 @@ snapshots: tinyglobby: 0.2.15 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@6.21.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@6.21.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@2.6.1)) transitivePeerDependencies: - supports-color @@ -7621,13 +7689,14 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@6.21.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.1(jiti@2.6.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@6.21.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 6.21.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) eslint: 9.39.1(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)) transitivePeerDependencies: - supports-color @@ -7660,7 +7729,7 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@2.6.1)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -7671,7 +7740,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.39.1(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@6.21.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.1(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@6.21.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -9135,6 +9204,8 @@ snapshots: object-assign@4.1.1: {} + object-inspect@1.13.2: {} + object-inspect@1.13.4: {} object-keys@1.1.1: {} @@ -9874,6 +9945,8 @@ snapshots: tslib@2.5.3: {} + tslib@2.6.2: {} + tslib@2.6.3: {} tslib@2.8.1: {} diff --git a/src/resources/schema.graphql b/src/resources/schema.graphql new file mode 100644 index 0000000..85dd708 --- /dev/null +++ b/src/resources/schema.graphql @@ -0,0 +1,15907 @@ +type Query { + """Get all active short-lived api tokens for this api key""" + apiTokens: [ApiToken!]! + """Get the active short-lived api token for this api key by the short-lived token""" + apiToken( + token: String! + ): ApiToken! + """Returns an NFT pool.""" + getNftPool( + """The contract address of the NFT pool.""" + address: String! + """The network ID the NFT collection is deployed on.""" + networkId: Int! + ): NftPoolResponse @deprecated(reason: "NFT data coverage will be removed on March 31, 2026") + """Returns transactions for an NFT collection across all NFT pools or within a given pool.""" + getNftPoolEvents( + """The network ID the NFT collection is deployed on.""" + networkId: Int! + """The contract address of the NFT collection.""" + collectionAddress: String + """The NFT pool address to filter by.""" + poolAddress: String + """The NFT AMM marketplace address to filter by.""" + exchangeAddress: String + """The event types to filter by.""" + eventTypes: [NftPoolEventType!] + """The time range to filter by.""" + timestamp: EventQueryTimestampInput + """The cursor to use for pagination.""" + cursor: String + """The maximum number of NFT pool events to return.""" + limit: Int + ): NftPoolEventsResponse @deprecated(reason: "NFT data coverage will be removed on March 31, 2026") + """Returns an NFT pool collection with pool stats for a given AMM NFT marketplace.""" + getNftPoolCollection( + """The contract address of the NFT collection.""" + collectionAddress: String! + """The NFT AMM marketplace address to filter by.""" + exchangeAddress: String! + """The network ID the NFT collection is deployed on.""" + networkId: Int! + ): NftPoolCollectionResponse @deprecated(reason: "NFT data coverage will be removed on March 31, 2026") + """Returns an NFT collection with pool stats for a given AMM NFT marketplace.""" + getNftPoolCollectionsByExchange( + """The NFT AMM marketplace address to filter by.""" + exchangeAddress: String! + """The network ID the NFT collection is deployed on.""" + networkId: Int! + """The cursor to use for pagination.""" + cursor: String + """The maximum number of NFT collections to return.""" + limit: Int + ): GetNftPoolCollectionsResponse @deprecated(reason: "NFT data coverage will be removed on March 31, 2026") + """Returns NFT pools for a given collection and AMM NFT marketplace.""" + getNftPoolsByCollectionAndExchange( + """The contract address of the NFT collection.""" + collectionAddress: String! + """The NFT AMM marketplace address to filter by.""" + exchangeAddress: String! + """The network ID the NFT collection is deployed on.""" + networkId: Int! + """The cursor to use for pagination.""" + cursor: String + """The maximum number of NFT pools to return.""" + limit: Int + ): GetNftPoolsResponse @deprecated(reason: "NFT data coverage will be removed on March 31, 2026") + """Returns a list of NFT pools for a given owner.""" + getNftPoolsByOwner( + """The contract address of the pool owner.""" + ownerAddress: String! + """The network ID the NFT collection is deployed on.""" + networkId: Int! + """The NFT AMM marketplace address to filter by.""" + exchangeAddress: String + """The cursor to use for pagination.""" + cursor: String + """The maximum number of NFT pools to return.""" + limit: Int + ): GetNftPoolsResponse @deprecated(reason: "NFT data coverage will be removed on March 31, 2026") + """Returns aggregated NFT pool/collection stats for a given time frame.""" + getNftPoolStats( + """The contract address of the NFT collection.""" + collectionAddress: String! + """The NFT AMM marketplace address to filter by.""" + exchangeAddress: String! + """The network ID the NFT collection is deployed on.""" + networkId: Int! + """The unix timestamp for the start of the requested range.""" + startTime: Int! + """The unix timestamp for the end of the requested range.""" + endTime: Int! + """The NFT pool address to filter by.""" + poolAddress: String + ): NftPoolStatsResponse @deprecated(reason: "NFT data coverage will be removed on March 31, 2026") + """Returns a list of NFT collection based on a variety of filters.""" + filterNftCollections( + """A set of filters to apply.""" + filters: NftCollectionFilters + """A list of ranking attributes to apply.""" + rankings: [NftCollectionRanking] + """A phrase to search for. Can match a collection contract address or ID (`address`:`networkId`).""" + phrase: String + """A list of collection contract addresses or IDs (`address`:`networkId`) to filter by.""" + collections: [String] + """The maximum number of NFT collections to return.""" + limit: Int + """Where in the list the server should start when returning items. Use `count`+`offset` from the previous query to request the next page of results.""" + offset: Int + ): NftCollectionFilterConnection @deprecated(reason: "NFT data coverage will be removed on March 31, 2026") + """Returns a list of NFT collections based on a variety of filters.""" + filterNftPoolCollections( + """A set of filters to apply.""" + filters: NftPoolCollectionFilters + """A phrase to search for. Can partially match an NFT collection name.""" + phrase: String + """A list of ranking attributes to apply.""" + rankings: [NftPoolCollectionRanking] + """The maximum number of NFT collections to return.""" + limit: Int + """Where in the list the server should start when returning items. Use `count`+`page` from the previous query to request the next page of results.""" + offset: Int + ): NftPoolCollectionFilterConnection @deprecated(reason: "NFT data coverage will be removed on March 31, 2026") + """Returns a list of NFT collections matching a given query string.""" + searchNfts( + """The maximum number of NFTs to return.""" + limit: Int + """The list of network IDs to filter by.""" + networkFilter: [Int!] + """The time frame to use for calculating stats. Can be `1h`, `4h`, `12h`, or `1d` (default).""" + window: String + """The query string to search for. Can match an NFT collection contract address or partially match a collection's name or symbol.""" + search: String + """The level of NFTs to include in the search. Can be `Asset` or `Collection`.""" + include: [NftSearchable!] + """Whether to filter collections that could be linked to wash trading""" + filterWashTrading: Boolean + ): NftSearchResponse @deprecated(reason: "NFT data coverage will be removed on March 31, 2026") + """Returns a list of NFT pools based on a variety of filters.""" + filterNftPools( + """A set of filters to apply.""" + filters: NftPoolFilters + """A list of ranking attributes to apply.""" + rankings: [NftPoolRanking] + phrase: String + """The maximum number of NFT pools to return.""" + limit: Int + """Where in the list the server should start when returning items. Use `count`+`page` from the previous query to request the next page of results.""" + offset: Int + ): NftPoolFilterConnection @deprecated(reason: "NFT data coverage will be removed on March 31, 2026") + """Returns stats for an NFT collection across different time frames.""" + getNftCollectionMetadata( + """The ID of the NFT collection (`address`:`networkId`). For example, `0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d:1`.""" + collectionId: String @deprecated(reason: "Use address & networkId instead.") + """The contract address of the NFT collection.""" + address: String + """The network ID the NFT collection is deployed on.""" + networkId: Int + ): NftCollectionMetadataResponse @deprecated(reason: "NFT data coverage will be removed on March 31, 2026") + """Returns a list of NFT assets in a given collection.""" + getNftAssets( + """The contract address of the NFT collection.""" + address: String! + """The network ID the NFT collection is deployed on.""" + networkId: Int! + """An optional list of token IDs to filter by.""" + tokenIds: [String] + """Whether to trigger fetching onchain metadata for missing assets. Defaults to false. Fetch results are delayed and can be ingested realtime via onNftAssetsCreated subscription. Free tier API users are limited to 1 missing asset fetch per request, and may only retry fetching a missing asset once per week. To remove these limitations, please upgrade your API plan at https://www.dashboard.defined.fi/plan.""" + fetchMissingAssets: Boolean + """The cursor to use for pagination.""" + cursor: String + """The maximum number of NFT assets to return.""" + limit: Int + ): NftAssetsConnection @deprecated(reason: "NFT data coverage will be removed on March 31, 2026") + """Returns bucketed stats for a given NFT collection.""" + getDetailedNftStats( + """The contract address of the NFT collection.""" + collectionAddress: String! + """The network ID the NFT collection is deployed on.""" + networkId: Int! + """The marketplace address to filter by. Can be used to get marketplace-specific metrics, otherwise uses all.""" + grouping: String + """The unix timestamp for the stats. Defaults to current.""" + timestamp: Int + """The list of durations to get detailed pair stats for.""" + durations: [DetailedNftStatsDuration] + """The number of aggregated values to receive. Note: Each duration has predetermined bucket sizes. The first n-1 buckets are historical. The last bucket is a snapshot of current data. duration `day1`: 6 buckets (4 hours each) plus 1 partial bucket duration `hour12`: 12 buckets (1 hour each) plus 1 partial bucket duration `hour4`: 8 buckets (30 min each) plus 1 partial bucket duration `hour1`: 12 buckets (5 min each) plus 1 partial bucket duration `min5`: 5 buckets (1 min each) plus 1 partial bucket For example, requesting 11 buckets for a `min5` duration will return the last 10 minutes worth of data plus a snapshot for the current minute.""" + bucketCount: Int + ): DetailedNftStats @deprecated(reason: "NFT data coverage will be removed on March 31, 2026") + """Returns transactions for an NFT collection across any marketplace(s).""" + getNftEvents( + """The contract address of the NFT collection.""" + address: String + """The NFT marketplace address to filter by.""" + exchangeAddress: String + """The NFT pool address to filter by.""" + poolAddress: String + """The network ID the NFT collection is deployed on.""" + networkId: Int! + """The token ID to filter by.""" + tokenId: String + """The cursor to use for pagination.""" + cursor: String + """The time range to filter by.""" + timestamp: EventQueryTimestampInput + """The maximum number of NFT events to return.""" + limit: Int + includeTransfers: Boolean + ): NftEventsConnection @deprecated(reason: "NFT data coverage will be removed on March 31, 2026") + """Returns a list of NFT collection metadata.""" + getNftContracts( + """A list of NFT contract address and network IDs.""" + contracts: [NftContractInput] + ): [EnhancedNftContract] @deprecated(reason: "NFT data coverage will be removed on March 31, 2026") + """Returns a list of Parallel assets based on a variety of filters.""" + filterNftParallelAssets( + """A set of filters to apply.""" + filters: ParallelAssetFilters + """A phrase to search for. Can match a Parallel asset ID (`address`:`tokenId`) or partially match a name.""" + phrase: String + """A set of parameters to match.""" + match: ParallelAssetMatchers + """A list of ranking attributes to apply.""" + rankings: [ParallelAssetRanking] + """The maximum number of Parallel assets to return.""" + limit: Int + """Where in the list the server should start when returning items. Use `count`+`offset` from the previous query to request the next page of results.""" + offset: Int + ): ParallelAssetFilterConnection @deprecated(reason: "NFT data coverage will be removed on March 31, 2026") + """Returns changes made to Parallel card metadata over time.""" + getParallelCardChanges( + """The token ID for a Parallel asset.""" + tokenId: String + """The time frame to request card changes.""" + timestamp: ParallelCardChangeQueryTimestampInput + """The cursor to use for pagination.""" + cursor: String + """The maximum number of Parallel card changes to return.""" + limit: Int + ): ParallelCardChangesConnection @deprecated(reason: "NFT data coverage will be removed on March 31, 2026") + """Returns a list of Prime pool cached assets.""" + getPrimePoolAssets( + """The network ID the Prime pool is deployed on.""" + networkId: Int! + """The contract address of the Prime pool.""" + poolContractAddress: String + """The pool ID for the Prime pool, within the contract.""" + poolId: String + """The owner wallet address to filter assets by.""" + walletAddress: String + """The maximum number of Prime Pool assets to return.""" + limit: Int + """The cursor to use for pagination.""" + cursor: String + ): PrimePoolAssetConnection @deprecated(reason: "NFT data coverage will be removed on March 31, 2026") + """Returns a list of Prime pool events.""" + getPrimePoolEvents( + """The network ID the Prime pool is deployed on.""" + networkId: Int! + """The contract address of the Prime pool.""" + poolContractAddress: String + """The pool ID for the Prime pool, within the contract.""" + poolId: String + """The calling wallet address to filter events by.""" + walletAddress: String + """The event types to query for.""" + eventTypes: [PrimePoolEventType] + """The maximum number of Prime Pool events to return.""" + limit: Int + """The cursor to use for pagination.""" + cursor: String + ): PrimePoolEventConnection @deprecated(reason: "NFT data coverage will be removed on March 31, 2026") + """Returns a list of Prime pools.""" + getPrimePools( + """The contract address for the prime pool.""" + address: String! + """The network ID the prime pool is deployed on.""" + networkId: Int! + """An optional list of pool IDs to filter by.""" + poolIds: [String] + """The maximum number of Prime pools to return.""" + limit: Int + """The cursor to use for pagination.""" + cursor: String + ): PrimePoolConnection @deprecated(reason: "NFT data coverage will be removed on March 31, 2026") + """Returns list of wallets that hold a given collection, ordered by holdings descending. Also has the unique count of holders for that collection.""" + nftHolders( + input: NftHoldersInput! + ): NftHoldersResponse! @deprecated(reason: "NFT data coverage will be removed on March 31, 2026") + """Returns list of collections and quantity of NFTs held by a given wallet.""" + walletNftCollections( + input: WalletNftCollectionsInput! + ): WalletNftCollectionsResponse! @deprecated(reason: "NFT data coverage will be removed on March 31, 2026") + """Returns list of NFT assets held by a given wallet for a single collection.""" + walletNftCollectionAssets( + input: WalletNftCollectionAssetsInput! + ): WalletNftCollectionAssetsResponse! @deprecated(reason: "NFT data coverage will be removed on March 31, 2026") + """Returns the full vocabulary of wallet label types and their metadata.""" + walletLabelTypes: [WalletLabelType!]! + """Returns community gathered notes.""" + getCommunityNotes( + input: CommunityNotesInput + ): CommunityNotesResponse! + """Returns windowed and all-time stats for a prediction market.""" + detailedPredictionMarketStats( + """Input parameters used to select a market and stat windows.""" + input: DetailedPredictionMarketStatsInput! + ): DetailedPredictionMarketStats + """Returns windowed and all-time stats for a prediction event.""" + detailedPredictionEventStats( + """Input parameters used to select an event and stat windows.""" + input: DetailedPredictionEventStatsInput! + ): DetailedPredictionEventStats + """Returns windowed and all-time stats for a prediction trader.""" + detailedPredictionTraderStats( + """Input parameters used to select a trader and stat windows.""" + input: DetailedPredictionTraderStatsInput! + ): DetailedPredictionTraderStats + """Returns per-market performance stats for a specific trader.""" + predictionTraderMarketsStats( + """Input parameters used to select a trader and optional market constraints.""" + input: PredictionTraderMarketsStatsInput! + ): PredictionTraderMarketsStatsConnection! + """Returns bar data for a prediction trader over a time range.""" + predictionTraderBars( + """Input parameters used to select a trader, range, and resolution.""" + input: PredictionTraderBarsInput! + ): PredictionTraderBarsResponse! + """Returns OHLC-style bar data for a prediction market.""" + predictionMarketBars( + """Input parameters used to select a market, range, and resolution.""" + input: PredictionMarketBarsInput! + ): PredictionMarketBarsResponse + """Returns bar data for a prediction event.""" + predictionEventBars( + """Input parameters used to select an event, range, and resolution.""" + input: PredictionEventBarsInput! + ): PredictionEventBarsResponse + """Returns bar data for top markets inside a prediction event.""" + predictionEventTopMarketsBars( + """Input parameters used to select an event, number of markets, and time settings.""" + input: PredictionEventTopMarketsBarsInput! + ): PredictionEventTopMarketsBarsResponse + """Returns prediction trades with cursor-based pagination.""" + predictionTrades( + """Input parameters used to filter prediction trades.""" + input: PredictionTradesInput! + ): PredictionTradesConnection + """Returns prediction markets by ID.""" + predictionMarkets( + """Input parameters containing market IDs to fetch.""" + input: PredictionMarketsInput! + ): [PredictionMarket!]! + """Returns price data for a prediction market at a specific timestamp or latest.""" + predictionMarketPrice( + """Input parameters specifying the market and optional timestamp.""" + input: PredictionMarketPriceInput! + ): PredictionMarketPrice + """Returns live order books for a set of prediction outcomes, fetched from the venue's CLOB. Polymarket and Kalshi; outcomes from other venues will return null. Cached for up to 10s.""" + predictionOutcomeOrderBooks( + """The composite outcome IDs to fetch order books for. One entry returned per requested ID, in input order; null when the outcome is unknown or the venue is unsupported.""" + outcomeIds: [String!]! + ): [PredictionOutcomeOrderBook]! + """Returns prediction traders by ID.""" + predictionTraders( + """Input parameters containing trader IDs to fetch.""" + input: PredictionTradersInput! + ): [PredictionTrader!]! + """Returns token holder balances for a prediction market.""" + predictionTokenHolders( + """Input parameters used to select the market/token and pagination settings.""" + input: PredictionTokenHoldersInput! + ): PredictionTokenHoldersConnection + """Returns all prediction token holdings for a specific trader.""" + predictionTraderHoldings( + """Input parameters for trader holdings query.""" + input: PredictionTraderHoldingsInput! + ): PredictionTraderHoldingsConnection + """Filters prediction events using optional text, IDs, and ranking criteria.""" + filterPredictionEvents( + """A set of filters to apply.""" + filters: PredictionEventFilters + """A phrase to search for. Can match event question, tags, or description.""" + phrase: String + """A list of event IDs to filter by.""" + eventIds: [String!] + """A list of event IDs to exclude from results.""" + excludeEventIds: [String!] + """A list of ranking attributes to apply.""" + rankings: [PredictionEventRanking!] + """Deprecated. No longer affects market ordering.""" + marketSort: PredictionEventMarketSort @deprecated(reason: "No longer affects market ordering.") + """The maximum number of events to return.""" + limit: Int + """Where in the list the server should start when returning items.""" + offset: Int + ): PredictionEventFilterConnection + """Returns available prediction categories and nested subcategories.""" + predictionCategories: [PredictionCategory!]! + """Filters prediction markets using optional text, IDs, event constraints, and ranking criteria.""" + filterPredictionMarkets( + """A set of filters to apply.""" + filters: PredictionMarketFilters + """A phrase to search for. Can match market label, outcome labels, or event label.""" + phrase: String + """A list of market IDs to filter by.""" + marketIds: [String!] + """A list of market IDs to exclude from results.""" + excludeMarketIds: [String!] + """A list of event IDs to filter markets by (returns markets belonging to these events).""" + eventIds: [String!] + """A list of event IDs to exclude (excludes markets belonging to these events).""" + excludeEventIds: [String!] + """A list of ranking attributes to apply.""" + rankings: [PredictionMarketRanking!] + """The maximum number of markets to return.""" + limit: Int + """Where in the list the server should start when returning items.""" + offset: Int + ): PredictionMarketFilterConnection + """Filters prediction markets within a single event and returns structured classification metadata for each market. Use this instead of `filterPredictionMarkets` when you need entrant/segment/ladder details (country codes, period+stat grouping, parsed numeric/date rungs) without re-parsing labels client-side.""" + eventScopedFilterPredictionMarkets( + """The ID of the prediction event to scope the query to. Required.""" + eventId: String! + """A set of filters to apply.""" + filters: PredictionMarketFilters + """A phrase to search for. Can match market label, outcome labels, or event label.""" + phrase: String + """A list of market IDs to filter by (further restricts within the event).""" + marketIds: [String!] + """A list of market IDs to exclude from results.""" + excludeMarketIds: [String!] + """A list of ranking attributes to apply.""" + rankings: [PredictionMarketRanking!] + """The maximum number of markets to return.""" + limit: Int + """Where in the list the server should start when returning items.""" + offset: Int + ): EventScopedPredictionMarketFilterConnection + """Filters trader-market records using trader, market, event, and ranking criteria.""" + filterPredictionTraderMarkets( + """A set of filters to apply.""" + filters: PredictionTraderMarketFilters + """A phrase to search for. Can match trader alias, market label, or event label.""" + phrase: String + """A list of trader IDs to filter by.""" + traderIds: [String!] + """A list of trader IDs to exclude from results.""" + excludeTraderIds: [String!] + """A list of market IDs to filter by.""" + marketIds: [String!] + """A list of market IDs to exclude from results.""" + excludeMarketIds: [String!] + """A list of event IDs to filter by (returns records for markets in these events).""" + eventIds: [String!] + """A list of event IDs to exclude.""" + excludeEventIds: [String!] + """A list of ranking attributes to apply.""" + rankings: [PredictionTraderMarketRanking!] + """The maximum number of results to return.""" + limit: Int + """Where in the list the server should start when returning items.""" + offset: Int + ): PredictionTraderMarketFilterConnection + """Filters prediction traders using optional text, IDs, and ranking criteria.""" + filterPredictionTraders( + """A set of filters to apply.""" + filters: PredictionTraderFilters + """A phrase to search for. Can match trader alias, address, or venue ID.""" + phrase: String + """A list of trader IDs to filter by.""" + traderIds: [String!] + """A list of trader IDs to exclude from results.""" + excludeTraderIds: [String!] + """A list of ranking attributes to apply.""" + rankings: [PredictionTraderRanking!] + """The maximum number of results to return.""" + limit: Int + """Where in the list the server should start when returning items.""" + offset: Int + ): PredictionTraderFilterConnection + """Returns block data for the input blockNumbers or timestamps, maximum 25 inputs.""" + blocks( + input: BlocksInput! + ): [Block!]! + """Returns a list of all networks supported on Codex.""" + getNetworks: [Network!]! + """Returns the status of a list of networks supported on Codex.""" + getNetworkStatus( + """The list of network IDs.""" + networkIds: [Int!]! + ): [MetadataResponse!] + """Returns a user's list of webhooks.""" + getWebhooks( + """The cursor to use for pagination.""" + cursor: String + """webhookId: The id of the webhook you want to retrieve.""" + webhookId: String + """bucketId: The bucketId of the webhooks you want to retrieve. Note that bucketId and webhookId are mutually exclusive, do not send both.""" + bucketId: String + """bucketSortkey: The bucketSortkey of the webhooks you want to retrieve.""" + bucketSortkey: String + """limit: The maximum number of webhooks to return.""" + limit: Int + ): GetWebhooksResponse + """Returns a list of network configurations.""" + getNetworkConfigs( + networkIds: [Int!] + ): [NetworkConfig!]! + """Discover, screen, and rank tokens across every supported network using 100+ on-chain signals: trading activity, liquidity, holder behavior, fee economics, and launchpad lifecycle.""" + filterTokens( + """A set of filters to apply.""" + filters: TokenFilters + """The type of statistics returned. Can be `FILTERED` or `UNFILTERED`. Default is `UNFILTERED`.""" + statsType: TokenPairStatisticsType + """A phrase to search for. Can match a token or pair contract address or partially match a token's name or symbol.""" + phrase: String + """A list of token IDs (`address:networkId`) or addresses. Can be left blank to discover new tokens.""" + tokens: [String] + """A list of token IDs (`address:networkId`) to exclude from results""" + excludeTokens: [String] + """A list of ranking attributes to apply.""" + rankings: [TokenRanking] + """Flag to use aggregated token stats. Default is `false`.""" + useAggregatedStats: Boolean + """The maximum number of tokens to return.""" + limit: Int + """Where in the list the server should start when returning items. Use `count`+`page` from the previous query to request the next page of results.""" + offset: Int + ): TokenFilterConnection + categories( + """Filter by category kind.""" + type: CategoryType + """Filter by lifecycle status. Defaults to `ACTIVE`.""" + status: CategoryStatus + ): [Category!]! + category( + """The category slug.""" + slug: String! + ): Category + categoryTokens( + """The category slug.""" + slug: String! + """A set of additional filters to apply.""" + filters: TokenFilters + """A list of ranking attributes to apply.""" + rankings: [TokenRanking] + """The maximum number of tokens to return.""" + limit: Int + """Where in the list the server should start when returning items. Use `count`+`page` from the previous query to request the next page of results.""" + offset: Int + ): CategoryTokenConnection + """Returns a list of pairs based on a variety of filters.""" + filterPairs( + """A set of filters to apply.""" + filters: PairFilters + """The type of statistics returned. Can be `FILTERED` or `UNFILTERED`. Default is `UNFILTERED`.""" + statsType: TokenPairStatisticsType + """A phrase to search for. Can match a token or pair contract address or ID (`address:networkId`), or partially match a token name or symbol.""" + phrase: String + """A list of pair or token contract addresses or IDs (`address:networkId`) to filter by.""" + pairs: [String] + """A set of token contract addresses that make up a pair. Can be used in place of a pair contract address.""" + matchTokens: PairFilterMatchTokens + """A list of ranking attributes to apply.""" + rankings: [PairRanking] + """The maximum number of pairs to return.""" + limit: Int + """Where in the list the server should start when returning items. Use `count`+`offset` from the previous query to request the next page of results.""" + offset: Int + ): PairFilterConnection + """Returns a list of exchanges based on a variety of filters.""" + filterExchanges( + """A set of filters to apply.""" + filters: ExchangeFilters + """A phrase to search for. Can match an exchange address or ID (`address:networkId`), or partially match an exchange name.""" + phrase: String + """A list of ranking attributes to apply.""" + rankings: [ExchangeRanking] + """The maximum number of exchanges to return.""" + limit: Int + """Where in the list the server should start when returning items. Use `count`+`offset` from the previous query to request the next page of results.""" + offset: Int + ): ExchangeFilterConnection + """Returns a list of networks based on a variety of filters.""" + filterNetworks( + """A set of filters to apply.""" + filters: NetworkFilters + """A list of network IDs to include. If not provided, all networks are considered.""" + networks: [Int!] + """A list of network IDs to exclude.""" + excludeNetworks: [Int!] + """A list of ranking attributes to apply.""" + rankings: [NetworkRanking] + """The maximum number of networks to return.""" + limit: Int + """Where in the list the server should start when returning items. Use `count`+`offset` from the previous query to request the next page of results.""" + offset: Int + ): NetworkFilterConnection + """Returns bucketed stats for a given token within a pair.""" + getDetailedStats( + """The ID of the pair (`address:networkId`).""" + pairId: String! + """The token of interest used to calculate token-specific stats for the pair. Can be `token0` or `token1`.""" + tokenOfInterest: TokenOfInterest + """The unix timestamp for the stats. Defaults to current.""" + timestamp: Int + """The list of window sizes to get detailed stats for.""" + windowSizes: [DetailedStatsWindowSize] + """The number of aggregated values to receive. Note: Each duration has predetermined bucket sizes. The first n-1 buckets are historical. The last bucket is a snapshot of current data. duration `day1`: 6 buckets (4 hours each) plus 1 partial bucket duration `hour12`: 12 buckets (1 hour each) plus 1 partial bucket duration `hour4`: 8 buckets (30 min each) plus 1 partial bucket duration `hour1`: 12 buckets (5 min each) plus 1 partial bucket duration `min5`: 5 buckets (1 min each) plus 1 partial bucket For example, requesting 11 buckets for a `min5` duration will return the last 10 minutes worth of data plus a snapshot for the current minute.""" + bucketCount: Int + """The type of statistics returned. Can be `FILTERED` or `UNFILTERED`. Default is `UNFILTERED`.""" + statsType: TokenPairStatisticsType + ): DetailedStats @deprecated(reason: "Use `getDetailedPairStats` instead, it has more resolutions and better support") + """Returns bucketed stats for a given token within a pair.""" + getDetailedPairStats( + """The contract address of the pair.""" + pairAddress: String! + """The network ID the pair is deployed on.""" + networkId: Int! + """The token of interest used to calculate token-specific stats for the pair. Can be `token0` or `token1`.""" + tokenOfInterest: TokenOfInterest + """The unix timestamp for the stats. Defaults to current.""" + timestamp: Int + """The list of durations to get detailed pair stats for.""" + durations: [DetailedPairStatsDuration] + """The number of aggregated values to receive. Note: Each duration has predetermined bucket sizes. The first n-1 buckets are historical. The last bucket is a snapshot of current data. duration `day1`: 6 buckets (4 hours each) plus 1 partial bucket duration `hour12`: 12 buckets (1 hour each) plus 1 partial bucket duration `hour4`: 8 buckets (30 min each) plus 1 partial bucket duration `hour1`: 12 buckets (5 min each) plus 1 partial bucket duration `min5`: 5 buckets (1 min each) plus 1 partial bucket For example, requesting 11 buckets for a `min5` duration will return the last 10 minutes worth of data plus a snapshot for the current minute.""" + bucketCount: Int + """The type of statistics returned. Can be `FILTERED` or `UNFILTERED`. Default is `UNFILTERED`.""" + statsType: TokenPairStatisticsType + ): DetailedPairStats + """Returns bucketed stats for a given token.""" + getDetailedTokenStats( + """The contract address of the token.""" + tokenAddress: String! + """The network ID the token is deployed on.""" + networkId: Int! + """The unix timestamp for the stats. Defaults to current.""" + timestamp: Int + """The list of durations to get detailed token stats for.""" + durations: [DetailedTokenStatsDuration] + """The number of aggregated values to receive. Note: Each duration has predetermined bucket sizes. The first n-1 buckets are historical. The last bucket is a snapshot of current data. duration `day1`: 6 buckets (4 hours each) plus 1 partial bucket duration `hour12`: 12 buckets (1 hour each) plus 1 partial bucket duration `hour4`: 8 buckets (30 min each) plus 1 partial bucket duration `hour1`: 12 buckets (5 min each) plus 1 partial bucket duration `min5`: 5 buckets (1 min each) plus 1 partial bucket For example, requesting 11 buckets for a `min5` duration will return the last 10 minutes worth of data plus a snapshot for the current minute.""" + bucketCount: Int + """The type of statistics returned. Can be `FILTERED` or `UNFILTERED`. Default is `UNFILTERED`.""" + statsType: TokenPairStatisticsType + ): DetailedTokenStats + """Returns bucketed stats for a given token within a list of pairs.""" + getDetailedPairsStats( + input: [GetDetailedPairsStatsInput!]! + ): [DetailedPairStats] + """Returns a list of trending tokens across any given network(s).""" + listTopTokens( + """The maximum number of tokens to return. Max is `50`.""" + limit: Int + """The list of network IDs to filter by.""" + networkFilter: [Int!] + """The time frame for trending results. Can be `1`, `5`, `15`, `30`, `60`, `240`, `720`, or `1D`.""" + resolution: String + ): [TokenWithMetadata!] @deprecated(reason: "This query is no longer supported and will not return up to date data. Use `filterTokens` instead.") + """Returns charting metadata for a given pair. Used for implementing a Trading View datafeed.""" + getSymbol( + """The ID of the pair (`address:networkId`).""" + symbol: String! + """The currency to use for the response. Can be `USD` (default) or `TOKEN`.""" + currencyCode: String + ): SymbolResponse + """Returns metadata for a given network supported on Codex.""" + getNetworkStats( + """The network Id to filter by.""" + networkId: Int! + """The exchange address to filter by (optional).""" + exchangeAddress: String + ): GetNetworkStatsResponse + """Returns transactions for a pair.""" + getTokenEvents( + """The maximum number of transactions to return.""" + limit: Int + """The query filters to apply to the results.""" + query: EventsQueryInput! + """The cursor to use for pagination.""" + cursor: String + """The order to receive the token events. Can be `DESC` (default) or `ASC`.""" + direction: RankingDirection + ): EventConnection + """Returns a list of token events for a given maker (wallet address).""" + getTokenEventsForMaker( + """The maximum number of events to return.""" + limit: Int + """The query filters to apply to the results.""" + query: MakerEventsQueryInput! + """The cursor to use for pagination.""" + cursor: String + """The order to receive the token events. Can be `DESC` (default) or `ASC`.""" + direction: RankingDirection + ): MakerEventConnection + """Returns real-time or historical prices for a list of tokens, fetched in batches.""" + getTokenPrices( + """A list of `GetPriceInput`s. Accepts a maximum of 25 inputs (anything over will be truncated).""" + inputs: [GetPriceInput] + ): [Price] + """Returns aggregated bar chart data to track price changes over time.""" + getTokenBars( + """The ID of the token (`tokenAddress:networkId`). For example, `0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2:1` returns aggregated bar data for WETH pairs on Ethereum.""" + symbol: String! + """The unix timestamp for the start of the requested range.""" + from: Int! + """The unix timestamp for the end of the requested range.""" + to: Int! + """The time frame for each candle. Available options are `1S`, `5S`, `15S`, `30S`, `1`, `5`, `15`, `30`, `60`, `240`, `720`, `1D`, `7D`. Resolutions lower than 1 minute are only updated for the last 24 hours due to the volume of data produced.""" + resolution: String! + """The currency to use for the response. Can be `USD` or `TOKEN`. Default is `USD`. Use `currencyCode: TOKEN` for native token pricing.""" + currencyCode: QuoteCurrency + """Whether to remove leading null values from the response. Default is `false`. To fetch a token's entire history, set resolution to `1D`, `from` value to `0` and `removeLeadingNullValues` to `true`.""" + removeLeadingNullValues: Boolean + """Whether to remove empty bars from the response. This is useful for eliminating gaps in low-activity tokens. Default is `false`.""" + removeEmptyBars: Boolean + """The type of statistics returned. Can be `FILTERED` or `UNFILTERED`. Default is `UNFILTERED`.""" + statsType: TokenPairStatisticsType + """Guarantees number of bars returned is at most this number. Use `countback: 1500` with `from: 0` for maximum results.""" + countback: Int + ): TokenBarsResponse + """Returns bar chart data to track price changes over time.""" + getBars( + """The ID of the pair or token (`pairAddress:networkId` or `tokenAddress:networkId`). If a token contract address is provided, the token's top pair is used. For example, `0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2:1` returns WETH's top pair on Ethereum.""" + symbol: String! + """The unix timestamp for the start of the requested range.""" + from: Int! + """The unix timestamp for the end of the requested range.""" + to: Int! + """The time frame for each candle. Available options are `1S`, `5S`, `15S`, `30S`, `1`, `5`, `15`, `30`, `60`, `240`, `720`, `1D`, `7D`. Resolutions lower than 1 minute are only updated for the last 24 hours due to the volume of data produced.""" + resolution: String! + """The currency to use for the response. Can be `USD` or `TOKEN`. Default is `USD`. Use `currencyCode: TOKEN` for native token pricing.""" + currencyCode: String + """Whether to remove leading null values from the response. Default is `false`. To fetch a token's entire history, set resolution to `1D`, `from` value to `0` and `removeLeadingNullValues` to `true`.""" + removeLeadingNullValues: Boolean + """Whether to remove empty bars from the response. This is useful for eliminating gaps in low-activity tokens. Default is `false`.""" + removeEmptyBars: Boolean + """The token of interest within the token's top pair. Can be `token0` or `token1`. If omitted, the base token is inferred automatically. You can invert the pair by quoting the other token.""" + quoteToken: QuoteToken + """The type of statistics returned. Can be `FILTERED` or `UNFILTERED`. Default is `UNFILTERED`.""" + statsType: TokenPairStatisticsType + """Guarantees number of bars returned is at most this number. Use `countback: 1500` with `from: 0` for maximum results.""" + countback: Int + """Specify the type of symbol you want to fetch values for. Can be `TOKEN` or `POOL`.""" + symbolType: SymbolType + ): BarsResponse + """Returns the percentage of a token's total supply held collectively by its top 10 holders.""" + top10HoldersPercent( + tokenId: String! + ): Float + """Returns a list of decentralized exchange metadata.""" + getExchanges( + """Get exchanges with missing fields. Default is `false`.""" + showNameless: Boolean + ): [Exchange!]! + """Returns a URL for a pair chart.""" + chartUrls( + """Input required to fetch a pair chart.""" + input: ChartInput! + ): ChartUrlsResponse + """Returns a list of event labels for a pair.""" + getEventLabels( + """The ID of the pair (`address:networkId`).""" + id: String! + """The maximum number of event labels to return.""" + limit: Int + """The cursor to use for pagination.""" + cursor: String + """The order to receive the token event labels. Can be `DESC` (default) or `ASC`.""" + direction: RankingDirection + ): EventLabelConnection + """Returns a list of token lifecycle events.""" + tokenLifecycleEvents( + """The maximum number of events to return.""" + limit: Int + """The query filters to apply to the results.""" + query: TokenLifecycleEventsQueryInput! + """The cursor to use for pagination.""" + cursor: String + ): TokenLifecycleEventConnection @deprecated(reason: "Token lifecycle events are deprecated and support will be removed on July 15, 2026.") + """Returns a single token by its address & network id.""" + token( + """Input for a token ID.""" + input: TokenInput! + ): EnhancedToken! + """Returns a list of tokens by their addresses & network id, with pagination.""" + tokens( + """A list of token ID input.""" + ids: [TokenInput!] + ): [EnhancedToken]! + """Returns metadata for a pair of tokens.""" + pairMetadata( + """The ID of the pair (`address:networkId`).""" + pairId: String! + """The token of interest within the pair. Can be `token0` or `token1`.""" + quoteToken: QuoteToken + """The type of statistics returned. Can be `FILTERED` or `UNFILTERED`. Default is `UNFILTERED`.""" + statsType: TokenPairStatisticsType + ): PairMetadata! + """Returns a list of pairs containing a given token.""" + listPairsForToken( + """The maximum number of pairs to return.""" + limit: Int + """The network ID the token is deployed on.""" + networkId: Int! + """The contract address of the token.""" + tokenAddress: String! + ): [Pair]! + """Returns a list of pair metadata for a token.""" + listPairsWithMetadataForToken( + """The maximum number of pairs to return.""" + limit: Int + """The network ID the token is deployed on.""" + networkId: Int! + """The contract address of the token.""" + tokenAddress: String! + ): ListPairsForTokenResponse! + """Returns a list of token simple chart data (sparklines) for the given tokens.""" + tokenSparklines( + input: TokenSparklineInput! + ): [TokenSparkline!]! + """Returns list of token balances that a wallet has.""" + balances( + input: BalancesInput! + ): BalancesResponse! + """Returns list of wallets that hold a given token, ordered by holdings descending. Also has the unique count of holders for that token.""" + holders( + input: HoldersInput! + ): HoldersResponse! + """Returns a list of latest tokens.""" + getLatestTokens( + """The maximum number of tokens to return. Maximum number of tokens is 50.""" + limit: Int + """The list of network IDs to filter by.""" + networkFilter: [Int!] + """The offset to use for pagination.""" + offset: Int + ): LatestTokenConnection @deprecated(reason: "This query is no longer supported. Use `filterTokens` with a createdAt: DESC filter instead.") + """Returns liquidity locks for a given pair.""" + liquidityLocks( + """The address of the pair.""" + pairAddress: String + """The address of the token.""" + tokenAddress: String + """The network id of the pair.""" + networkId: Int! + """A cursor for use in pagination.""" + cursor: String + ): LiquidityLockConnection + """Returns liquidity metadata for a given pair. Includes liquidity lock data.""" + liquidityMetadata( + """The address of the pair.""" + pairAddress: String! + """The network id of the pair.""" + networkId: Int! + ): LiquidityMetadata + """Returns liquidity metadata for a given token. Includes liquidity lock data for up to 100 pairs that the token is in.""" + liquidityMetadataByToken( + """The address of the token.""" + tokenAddress: String! + """The network id of the token.""" + networkId: Int! + ): LiquidityMetadataByToken! + """Once a wallet backfill has been triggered, this query can be used to check the status of the backfill.""" + walletAggregateBackfillState( + input: WalletAggregateBackfillStateInput! + ): WalletAggregateBackfillStateResponse! + """Returns a list of top traders for a given token.""" + tokenTopTraders( + input: TokenTopTradersInput! + ): TokenTopTradersConnection! + """Returns a list of wallets based on a variety of filters.""" + filterWallets( + input: FilterWalletsInput! + ): WalletFilterConnection! + """Returns a list of wallets with stats narrowed down to a specific network.""" + filterNetworkWallets( + input: FilterNetworkWalletsInput! + ): NetworkWalletFilterConnection! @deprecated(reason: "Use filterWallets instead") + """Returns a list of wallets with stats narrowed down to a specific token.""" + filterTokenWallets( + input: FilterTokenWalletsInput! + ): TokenWalletFilterConnection! + """Returns detailed stats for a wallet.""" + detailedWalletStats( + input: DetailedWalletStatsInput! + ): DetailedWalletStats + """Returns a chart of a wallet's activity.""" + walletChart( + input: WalletChartInput! + ): WalletChartResponse +} + +type Mutation { + """Create a new set of short-lived api access tokens""" + createApiTokens( + input: CreateApiTokensInput! + ): [ApiToken!]! + """Delete a single short-lived api access token by id""" + deleteApiToken( + id: String! + ): String! + """Create event webhooks for price, token/pair, transfer, market cap, and prediction market trades.""" + createWebhooks( + """input: Input for creating webhooks.""" + input: CreateWebhooksInput! + ): CreateWebhooksOutput! + """Delete multiple webhooks.""" + deleteWebhooks( + """input: Input for deleting webhooks.""" + input: DeleteWebhooksInput! + ): DeleteWebhooksOutput + """Force refreshes the balance for a token in a wallet. EVM only.""" + refreshBalances( + input: [RefreshBalancesInput!]! + ): [Balance!]! + """Backfill wallet aggregates (trading stats) for a given wallet. This is the data used in the filterWallet/filterTokenWallets and detailedWalletStats queries.""" + backfillWalletAggregates( + input: WalletAggregateBackfillInput! + ): WalletAggregateBackfillStateResponse! +} + +"""Live-streamed prediction data subscriptions for trades, stats, and bar updates.""" +type Subscription { + """Live-streamed transactions for an NFT collection.""" + onNftEventsCreated( + """The contract address for the NFT collection.""" + address: String + """The network ID the NFT collection is deployed on.""" + networkId: Int + ): AddNftEventsOutput @deprecated(reason: "NFT data coverage will be removed on March 31, 2026") + """Live-streamed transactions for an NFT asset.""" + onNftAssetsCreated( + """The contract address for the NFT collection""" + address: String + """The network ID the NFT collection is deployed on.""" + networkId: Int + """The token ID of the NFT asset.""" + tokenId: String + ): NftAsset @deprecated(reason: "NFT data coverage will be removed on March 31, 2026") + """Live streamed NFT pool events for a given pool address or collection address.""" + onNftPoolEventsCreated( + """The NFT pool address to filter by.""" + poolAddress: String + """The network ID to filter by.""" + networkId: Int + """The contract address of the NFT collection to filter by.""" + collectionAddress: String + """The contract address of the NFT AMM marketplace to filter by.""" + exchangeAddress: String + ): AddNftPoolEventsOutput @deprecated(reason: "NFT data coverage will be removed on March 31, 2026") + """Streams new prediction trades as they are ingested.""" + onPredictionTradesCreated( + """Optional subscription filters for narrowing by market, event, or trader. Omit to receive the firehose of all trades.""" + input: OnPredictionTradesCreatedInput + ): AddPredictionTradeOutput + """Streams updated detailed stats for a specific prediction market.""" + onDetailedPredictionMarketStatsUpdated( + """The ID of the prediction market.""" + marketId: String! + ): DetailedSubscriptionPredictionMarketStats + """Streams updated detailed stats for a specific prediction event.""" + onDetailedPredictionEventStatsUpdated( + """The ID of the prediction event.""" + eventId: String! + ): DetailedSubscriptionPredictionEventStats + """Live-streamed bar chart data to track price changes over time for a prediction market.""" + onPredictionMarketBarsUpdated( + """The ID of the prediction market.""" + marketId: String! + ): OnPredictionMarketBarsUpdatedResponse + """Live-streamed bar chart data to track price changes over time for a prediction event.""" + onPredictionEventBarsUpdated( + """The ID of the prediction event.""" + eventId: String! + ): OnPredictionEventBarsUpdatedResponse + """Live-streamed bar chart data to track price changes over time. Processed updates are projected into `aggregates` using the confirmed bar shape.""" + onBarsUpdated( + """The ID of the pair (`address`:`networkId`).""" + pairId: String + """The commitment levels to subscribe to.""" + commitmentLevel: [BarCommitmentLevel!] + """The token of interest within the pair. Can be `token0` or `token1`.""" + quoteToken: QuoteToken + ): OnBarsUpdatedResponse + """Deprecated unconfirmed live-streamed bar chart data to track price changes over time. Use `onBarsUpdated` instead. (Solana only)""" + onUnconfirmedBarsUpdated( + """The ID of the pair (`address`:`networkId`).""" + pairId: String + """The token of interest within the pair. Can be `token0` or `token1`.""" + quoteToken: QuoteToken + ): OnUnconfirmedBarsUpdated @deprecated(reason: "Use onBarsUpdated instead") + """Live-streamed aggregate bar chart data to track price changes over time for a token.""" + onTokenBarsUpdated( + """The ID of the token (`address`:`networkId`). Required unless you are on an enterprise plan including BarFeed features.""" + tokenId: String + """The commitment levels to subscribe to.""" + commitmentLevel: [BarCommitmentLevel!] + """The networkId to use when getting all bars per network.""" + networkId: Int + ): OnTokenBarsUpdatedResponse + """Live-streamed transactions for a pair.""" + onEventsCreated( + """The pair contract address.""" + address: String + """The ID of the pair (`address`:`networkId`). Required unless you are on an enterprise plan including EventFeed features.""" + id: String + """The commitment levels to subscribe to. When multiple commitment levels are subscribed to, events are emitted at most once per increasing commitment stage per subscriber. If a stronger commitment level is observed first, later weaker updates for the same event are suppressed for a short in-memory window. Preprocessed is supported only for Solana event subscriptions. Preprocessed evaluates pre-execution events and can differ significantly from processed or confirmed output. In particular, preprocessed swaps may use aggregator swaps before it is known how execution will route the underlying swaps, and many preprocessed events may error and never be processed.""" + commitmentLevel: [EventCommitmentLevel!] + """The token of interest within the pair. Can be `token0` or `token1`.""" + quoteToken: QuoteToken + """The networkId to use when getting all events per network""" + networkId: Int + ): AddEventsOutput + """Live-streamed transactions for a maker.""" + onEventsCreatedByMaker( + input: OnEventsCreatedByMakerInput! + """The commitment levels to subscribe to. When multiple commitment levels are subscribed to, events are emitted at most once per increasing commitment stage per subscriber. If a stronger commitment level is observed first, later weaker updates for the same event are suppressed for a short in-memory window. Preprocessed is supported only for Solana event subscriptions. Preprocessed evaluates pre-execution events and can differ significantly from processed or confirmed output. In particular, preprocessed swaps may use aggregator swaps before it is known how execution will route the underlying swaps, and many preprocessed events may error and never be processed.""" + commitmentLevel: [EventCommitmentLevel!] + ): AddEventsByMakerOutput + """Deprecated unconfirmed live-streamed transactions for a token. Use `onEventsCreated` instead. (Solana only)""" + onUnconfirmedEventsCreated( + """The pair contract address.""" + address: String @deprecated(reason: "Unused") + """The ID of the pair (`address`:`networkId`).""" + id: String + """The token of interest within the pair. Can be `token0` or `token1`.""" + quoteToken: QuoteToken + ): AddUnconfirmedEventsOutput @deprecated(reason: "Use onEventsCreated instead") + """Deprecated unconfirmed live-streamed transactions for a maker. Use `onEventsCreatedByMaker` instead. (Solana only)""" + onUnconfirmedEventsCreatedByMaker( + input: OnUnconfirmedEventsCreatedByMakerInput! + ): AddUnconfirmedEventsByMakerOutput @deprecated(reason: "Use onEventsCreatedByMaker instead") + """Live-streamed price updates for a token.""" + onPriceUpdated( + """The token contract address. Required unless you are on an enterprise plan including PriceFeed features.""" + address: String + """The network ID the token is deployed on.""" + networkId: Int + """The pair contract address from which to get pricing. Defaults to the top pair for the token.""" + sourcePairAddress: String + """Whether to subscribe to weighted token prices instead of pair-derived prices. Not supported when `sourcePairAddress` is provided.""" + useWeightedPrices: Boolean + ): Price + """Live-streamed price updates for multiple tokens.""" + onPricesUpdated( + input: [OnPricesUpdatedInput!]! + """Whether to subscribe to weighted token prices instead of pair-derived prices. Not supported when any input provides `sourcePairAddress`.""" + useWeightedPrices: Boolean + ): Price! + """Live-streamed stat updates for a given token within a pair.""" + onPairMetadataUpdated( + """The ID of the pair (`address`:`networkId`).""" + id: String + """The token of interest within the pair. Can be `token0` or `token1`. If not specified, returns data for both tokens.""" + quoteToken: QuoteToken + """If true, automatically selects the non-liquidity token as the quoteToken. Ignored if quoteToken is explicitly specified.""" + useNonLiquidityTokenAsQuoteToken: Boolean + ): PairMetadata + """Live-streamed bucketed stats for a given token within a pair.""" + onDetailedStatsUpdated( + """The ID of the pair (`address`:`networkId`).""" + pairId: String + """The token of interest within the pair. Can be `token0` or `token1`.""" + tokenOfInterest: TokenOfInterest + ): DetailedStats + """Live-streamed bucketed stats for a given token.""" + onDetailedTokenStatsUpdated( + """The ID of the token (`address`:`networkId`).""" + tokenId: String + ): DetailedTokenStats + """Live-streamed filter token updates for the current `filterTokens` result set.""" + onFilterTokensUpdated( + """A set of filters to apply.""" + filters: TokenFilters + """The type of statistics returned. Can be `FILTERED` or `UNFILTERED`. Default is `UNFILTERED`.""" + statsType: TokenPairStatisticsType + """A phrase to search for. Can match a token or pair contract address or partially match a token's name or symbol.""" + phrase: String + """A list of token IDs (`address:networkId`) or addresses. Can be left blank to discover new tokens.""" + tokens: [String] + """A list of token IDs (`address:networkId`) to exclude from results""" + excludeTokens: [String] + """A list of ranking attributes to apply.""" + rankings: [TokenRanking] + """Flag to use aggregated token stats.""" + useAggregatedStats: Boolean + """How long, in milliseconds, to batch token updates before emitting them. Defaults to 500ms and must be between 0 and 60000.""" + updatePeriod: Int + """The maximum number of tokens to return.""" + limit: Int + """Where in the list the server should start when returning items. Use `count`+`page` from the previous query to request the next page of results.""" + offset: Int + ): FilterTokenUpdates + """Live-streamed updates for newly listed tokens.""" + onLatestTokens( + """The ID of the token (`tokenAddress`:`networkId`).""" + id: String + """The network ID the token is deployed on.""" + networkId: Int + """The address of the token contract.""" + tokenAddress: String + ): LatestToken @deprecated(reason: "No longer supported") + """Live-streamed event labels for a token.""" + onEventLabelCreated( + """The ID of the pair (`address`:`networkId`).""" + id: String + ): EventLabel + """Live-streamed events for a given token across all it's pools""" + onTokenEventsCreated( + input: OnTokenEventsCreatedInput! + """The commitment levels to subscribe to. When multiple commitment levels are subscribed to, events are emitted at most once per increasing commitment stage per subscriber. If a stronger commitment level is observed first, later weaker updates for the same event are suppressed for a short in-memory window. Preprocessed is supported only for Solana event subscriptions. Preprocessed evaluates pre-execution events and can differ significantly from processed or confirmed output. In particular, preprocessed swaps may use aggregator swaps before it is known how execution will route the underlying swaps, and many preprocessed events may error and never be processed.""" + commitmentLevel: [EventCommitmentLevel!] + ): AddTokenEventsOutput! + """Live-streamed list of wallets that hold a given token. Also has the unique count of holders for that token.""" + onHoldersUpdated( + tokenId: String! + ): HoldersUpdate + """Live-streamed balance updates for a given wallet.""" + onBalanceUpdated( + walletAddress: String! + ): Balance! + """Live-streamed token lifecycle events (mints and burns).""" + onTokenLifecycleEventsCreated( + """The token contract address.""" + address: String + """The network ID the token is deployed on.""" + networkId: Int + ): AddTokenLifecycleEventsOutput! @deprecated(reason: "Token lifecycle events are deprecated and support will be removed on July 15, 2026.") + """Live-streamed launchpad token events batched (more efficient).""" + onLaunchpadTokenEventBatch( + input: OnLaunchpadTokenEventBatchInput + ): [LaunchpadTokenEventOutput!]! + """Live-streamed launchpad token event.""" + onLaunchpadTokenEvent( + input: OnLaunchpadTokenEventInput + ): LaunchpadTokenEventOutput! +} + +scalar JSON + +type ApiToken { + """Unique identifier for the token""" + id: String! + """JWT to be passed into the Authorization header for API requests""" + token: String! + """ISO time string for the expiry of the token""" + expiresTimeString: String! + """Number of root fields this api token is allowed to resolve before it's rate limited""" + requestLimit: String! + """Approximate number of remaining resolutions before this token is rate limited""" + remaining: String +} + +input CreateApiTokensInput { + """Number of tokens to create, default is 1""" + count: Int + """Number of requests allowed per token, represented as a string, default is 5000""" + requestLimit: String + """Number of milliseconds until the token expires, defaults to 1 hour (3600000)""" + expiresIn: Int +} + +"""The display type for the NFT asset attribute.""" +enum NftAssetAttributeDisplayType { + Trait + Stat + Ranking + BoostNumber + BoostPercentage + Date +} + +"""The duration used to request detailed NFT stats.""" +enum DetailedNftStatsDuration { + day30 + week1 + day1 + hour12 + hour4 + hour1 +} + +"""The order of ranking.""" +enum RankingDirection { + ASC + DESC +} + +"""The level of NFTs to search.""" +enum NftSearchable { + Asset + Collection +} + +"""The pool type selected by the pool creator.""" +enum NftPoolType { + BUY + SELL + BUY_AND_SELL +} + +"""The type of NFT in the pool.""" +enum PoolNftType { + ERC721ETH + ERC721ERC20 + ERC1155ETH + ERC1155ERC20 +} + +"""The pool variant.""" +enum GraphQlNftPoolVariant { + ERC20 + NATIVE +} + +"""The mathematical formula that defines how the prices of NFTs change after each buy or sell within a pool.""" +enum BondingCurveType { + EXPONENTIAL + LINEAR + XYK + GDA +} + +"""The type for the NFT asset attribute `value` field.""" +enum NftAssetAttributeType { + String + Number + Array +} + +"""The NFT pool contract version.""" +enum NftPoolContractVersion { + SUDOSWAP_V1 + SUDOSWAP_V2 +} + +"""Token standards.""" +enum NftContractErcType { + ERC721 + ERC721Metadata + ERC721Enumerable + ERC1155 + ERC1155Metadata + Unsupported +} + +"""The attribute used to rank NFT collections.""" +enum NftCollectionRankingAttribute { + totalSupply + lastEventTimestamp + stats1hUsdVolumeCurrent + stats1hUsdVolumePrevious + stats1hUsdVolumeChange + stats1hUsdVolumeByFillsourceOpenseaCurrent + stats1hUsdVolumeByFillsourceOpenseaChange + stats1hUsdVolumeByFillsourceOpenseaPrevious + stats1hUsdVolumeByFillsourceOpenseaProCurrent + stats1hUsdVolumeByFillsourceOpenseaProChange + stats1hUsdVolumeByFillsourceOpenseaProPrevious + stats1hUsdVolumeByFillsourceSeaportCurrent + stats1hUsdVolumeByFillsourceSeaportChange + stats1hUsdVolumeByFillsourceSeaportPrevious + stats1hUsdVolumeByFillsourceX2Y2Current + stats1hUsdVolumeByFillsourceX2Y2Change + stats1hUsdVolumeByFillsourceX2Y2Previous + stats1hUsdVolumeByFillsourceLooksrareCurrent + stats1hUsdVolumeByFillsourceLooksrareChange + stats1hUsdVolumeByFillsourceLooksrarePrevious + stats1hUsdVolumeByFillsourceLooksrareV2Current + stats1hUsdVolumeByFillsourceLooksrareV2Change + stats1hUsdVolumeByFillsourceLooksrareV2Previous + stats1hUsdVolumeByFillsourceBlurCurrent + stats1hUsdVolumeByFillsourceBlurChange + stats1hUsdVolumeByFillsourceBlurPrevious + stats1hUsdVolumeByFillsourceBlurV2Current + stats1hUsdVolumeByFillsourceBlurV2Change + stats1hUsdVolumeByFillsourceBlurV2Previous + stats1hUsdVolumeByFillsourceBlendCurrent + stats1hUsdVolumeByFillsourceBlendChange + stats1hUsdVolumeByFillsourceBlendPrevious + stats1hUsdVolumeByFillsourceGemCurrent + stats1hUsdVolumeByFillsourceGemChange + stats1hUsdVolumeByFillsourceGemPrevious + stats1hUsdVolumeByFillsourceSudoswapCurrent + stats1hUsdVolumeByFillsourceSudoswapChange + stats1hUsdVolumeByFillsourceSudoswapPrevious + stats1hUsdVolumeByFillsourceSudoswapV2Current + stats1hUsdVolumeByFillsourceSudoswapV2Change + stats1hUsdVolumeByFillsourceSudoswapV2Previous + stats1hUsdVolumeByFillsourceCryptopunksCurrent + stats1hUsdVolumeByFillsourceCryptopunksChange + stats1hUsdVolumeByFillsourceCryptopunksPrevious + stats1hUsdAverageCurrent + stats1hUsdAveragePrevious + stats1hUsdAverageChange + stats1hUsdOpenCurrent + stats1hUsdOpenPrevious + stats1hUsdOpenChange + stats1hUsdCloseCurrent + stats1hUsdClosePrevious + stats1hUsdCloseChange + stats1hUsdLowestSaleCurrent + stats1hUsdLowestSalePrevious + stats1hUsdLowestSaleChange + stats1hUsdHighestSaleCurrent + stats1hUsdHighestSalePrevious + stats1hUsdHighestSaleChange + stats1hNetworkBaseTokenVolumeCurrent + stats1hNetworkBaseTokenVolumePrevious + stats1hNetworkBaseTokenVolumeChange + stats1hNetworkBaseTokenVolumeByFillsourceOpenseaCurrent + stats1hNetworkBaseTokenVolumeByFillsourceOpenseaChange + stats1hNetworkBaseTokenVolumeByFillsourceOpenseaPrevious + stats1hNetworkBaseTokenVolumeByFillsourceOpenseaProCurrent + stats1hNetworkBaseTokenVolumeByFillsourceOpenseaProChange + stats1hNetworkBaseTokenVolumeByFillsourceOpenseaProPrevious + stats1hNetworkBaseTokenVolumeByFillsourceSeaportCurrent + stats1hNetworkBaseTokenVolumeByFillsourceSeaportChange + stats1hNetworkBaseTokenVolumeByFillsourceSeaportPrevious + stats1hNetworkBaseTokenVolumeByFillsourceX2Y2Current + stats1hNetworkBaseTokenVolumeByFillsourceX2Y2Change + stats1hNetworkBaseTokenVolumeByFillsourceX2Y2Previous + stats1hNetworkBaseTokenVolumeByFillsourceLooksrareCurrent + stats1hNetworkBaseTokenVolumeByFillsourceLooksrareChange + stats1hNetworkBaseTokenVolumeByFillsourceLooksrarePrevious + stats1hNetworkBaseTokenVolumeByFillsourceLooksrareV2Current + stats1hNetworkBaseTokenVolumeByFillsourceLooksrareV2Change + stats1hNetworkBaseTokenVolumeByFillsourceLooksrareV2Previous + stats1hNetworkBaseTokenVolumeByFillsourceBlurCurrent + stats1hNetworkBaseTokenVolumeByFillsourceBlurChange + stats1hNetworkBaseTokenVolumeByFillsourceBlurPrevious + stats1hNetworkBaseTokenVolumeByFillsourceBlurV2Current + stats1hNetworkBaseTokenVolumeByFillsourceBlurV2Change + stats1hNetworkBaseTokenVolumeByFillsourceBlurV2Previous + stats1hNetworkBaseTokenVolumeByFillsourceBlendCurrent + stats1hNetworkBaseTokenVolumeByFillsourceBlendChange + stats1hNetworkBaseTokenVolumeByFillsourceBlendPrevious + stats1hNetworkBaseTokenVolumeByFillsourceGemCurrent + stats1hNetworkBaseTokenVolumeByFillsourceGemChange + stats1hNetworkBaseTokenVolumeByFillsourceGemPrevious + stats1hNetworkBaseTokenVolumeByFillsourceSudoswapCurrent + stats1hNetworkBaseTokenVolumeByFillsourceSudoswapChange + stats1hNetworkBaseTokenVolumeByFillsourceSudoswapPrevious + stats1hNetworkBaseTokenVolumeByFillsourceSudoswapV2Current + stats1hNetworkBaseTokenVolumeByFillsourceSudoswapV2Change + stats1hNetworkBaseTokenVolumeByFillsourceSudoswapV2Previous + stats1hNetworkBaseTokenVolumeByFillsourceCryptopunksCurrent + stats1hNetworkBaseTokenVolumeByFillsourceCryptopunksChange + stats1hNetworkBaseTokenVolumeByFillsourceCryptopunksPrevious + stats1hNetworkBaseTokenAverageCurrent + stats1hNetworkBaseTokenAveragePrevious + stats1hNetworkBaseTokenAverageChange + stats1hNetworkBaseTokenOpenCurrent + stats1hNetworkBaseTokenOpenPrevious + stats1hNetworkBaseTokenOpenChange + stats1hNetworkBaseTokenCloseCurrent + stats1hNetworkBaseTokenClosePrevious + stats1hNetworkBaseTokenCloseChange + stats1hNetworkBaseTokenLowestSaleCurrent + stats1hNetworkBaseTokenLowestSalePrevious + stats1hNetworkBaseTokenLowestSaleChange + stats1hNetworkBaseTokenHighestSaleCurrent + stats1hNetworkBaseTokenHighestSalePrevious + stats1hNetworkBaseTokenHighestSaleChange + stats1hNonCurrencyMintsCurrent + stats1hNonCurrencyMintsPrevious + stats1hNonCurrencyMintsChange + stats1hNonCurrencySalesCurrent + stats1hNonCurrencySalesPrevious + stats1hNonCurrencySalesChange + stats1hNonCurrencyTokensSoldCurrent + stats1hNonCurrencyTokensSoldPrevious + stats1hNonCurrencyTokensSoldChange + stats1hNonCurrencyTransfersCurrent + stats1hNonCurrencyTransfersPrevious + stats1hNonCurrencyTransfersChange + stats1hNonCurrencyUniqueBuyersCurrent + stats1hNonCurrencyUniqueBuyersPrevious + stats1hNonCurrencyUniqueBuyersChange + stats1hNonCurrencyUniqueSellersCurrent + stats1hNonCurrencyUniqueSellersPrevious + stats1hNonCurrencyUniqueSellersChange + stats1hNonCurrencyUniqueSalesWalletsCurrent + stats1hNonCurrencyUniqueSalesWalletsPrevious + stats1hNonCurrencyUniqueSalesWalletsChange + stats1hNonCurrencyUniqueMintersCurrent + stats1hNonCurrencyUniqueMintersPrevious + stats1hNonCurrencyUniqueMintersChange + stats4hUsdVolumeCurrent + stats4hUsdVolumePrevious + stats4hUsdVolumeChange + stats4hUsdVolumeByFillsourceOpenseaCurrent + stats4hUsdVolumeByFillsourceOpenseaChange + stats4hUsdVolumeByFillsourceOpenseaPrevious + stats4hUsdVolumeByFillsourceOpenseaProCurrent + stats4hUsdVolumeByFillsourceOpenseaProChange + stats4hUsdVolumeByFillsourceOpenseaProPrevious + stats4hUsdVolumeByFillsourceSeaportCurrent + stats4hUsdVolumeByFillsourceSeaportChange + stats4hUsdVolumeByFillsourceSeaportPrevious + stats4hUsdVolumeByFillsourceX2Y2Current + stats4hUsdVolumeByFillsourceX2Y2Change + stats4hUsdVolumeByFillsourceX2Y2Previous + stats4hUsdVolumeByFillsourceLooksrareCurrent + stats4hUsdVolumeByFillsourceLooksrareChange + stats4hUsdVolumeByFillsourceLooksrarePrevious + stats4hUsdVolumeByFillsourceLooksrareV2Current + stats4hUsdVolumeByFillsourceLooksrareV2Change + stats4hUsdVolumeByFillsourceLooksrareV2Previous + stats4hUsdVolumeByFillsourceBlurCurrent + stats4hUsdVolumeByFillsourceBlurChange + stats4hUsdVolumeByFillsourceBlurPrevious + stats4hUsdVolumeByFillsourceBlurV2Current + stats4hUsdVolumeByFillsourceBlurV2Change + stats4hUsdVolumeByFillsourceBlurV2Previous + stats4hUsdVolumeByFillsourceBlendCurrent + stats4hUsdVolumeByFillsourceBlendChange + stats4hUsdVolumeByFillsourceBlendPrevious + stats4hUsdVolumeByFillsourceGemCurrent + stats4hUsdVolumeByFillsourceGemChange + stats4hUsdVolumeByFillsourceGemPrevious + stats4hUsdVolumeByFillsourceSudoswapCurrent + stats4hUsdVolumeByFillsourceSudoswapChange + stats4hUsdVolumeByFillsourceSudoswapPrevious + stats4hUsdVolumeByFillsourceSudoswapV2Current + stats4hUsdVolumeByFillsourceSudoswapV2Change + stats4hUsdVolumeByFillsourceSudoswapV2Previous + stats4hUsdVolumeByFillsourceCryptopunksCurrent + stats4hUsdVolumeByFillsourceCryptopunksChange + stats4hUsdVolumeByFillsourceCryptopunksPrevious + stats4hUsdAverageCurrent + stats4hUsdAveragePrevious + stats4hUsdAverageChange + stats4hUsdOpenCurrent + stats4hUsdOpenPrevious + stats4hUsdOpenChange + stats4hUsdCloseCurrent + stats4hUsdClosePrevious + stats4hUsdCloseChange + stats4hUsdLowestSaleCurrent + stats4hUsdLowestSalePrevious + stats4hUsdLowestSaleChange + stats4hUsdHighestSaleCurrent + stats4hUsdHighestSalePrevious + stats4hUsdHighestSaleChange + stats4hNetworkBaseTokenVolumeCurrent + stats4hNetworkBaseTokenVolumePrevious + stats4hNetworkBaseTokenVolumeChange + stats4hNetworkBaseTokenVolumeByFillsourceOpenseaCurrent + stats4hNetworkBaseTokenVolumeByFillsourceOpenseaChange + stats4hNetworkBaseTokenVolumeByFillsourceOpenseaPrevious + stats4hNetworkBaseTokenVolumeByFillsourceOpenseaProCurrent + stats4hNetworkBaseTokenVolumeByFillsourceOpenseaProChange + stats4hNetworkBaseTokenVolumeByFillsourceOpenseaProPrevious + stats4hNetworkBaseTokenVolumeByFillsourceSeaportCurrent + stats4hNetworkBaseTokenVolumeByFillsourceSeaportChange + stats4hNetworkBaseTokenVolumeByFillsourceSeaportPrevious + stats4hNetworkBaseTokenVolumeByFillsourceX2Y2Current + stats4hNetworkBaseTokenVolumeByFillsourceX2Y2Change + stats4hNetworkBaseTokenVolumeByFillsourceX2Y2Previous + stats4hNetworkBaseTokenVolumeByFillsourceLooksrareCurrent + stats4hNetworkBaseTokenVolumeByFillsourceLooksrareChange + stats4hNetworkBaseTokenVolumeByFillsourceLooksrarePrevious + stats4hNetworkBaseTokenVolumeByFillsourceLooksrareV2Current + stats4hNetworkBaseTokenVolumeByFillsourceLooksrareV2Change + stats4hNetworkBaseTokenVolumeByFillsourceLooksrareV2Previous + stats4hNetworkBaseTokenVolumeByFillsourceBlurCurrent + stats4hNetworkBaseTokenVolumeByFillsourceBlurChange + stats4hNetworkBaseTokenVolumeByFillsourceBlurPrevious + stats4hNetworkBaseTokenVolumeByFillsourceBlurV2Current + stats4hNetworkBaseTokenVolumeByFillsourceBlurV2Change + stats4hNetworkBaseTokenVolumeByFillsourceBlurV2Previous + stats4hNetworkBaseTokenVolumeByFillsourceBlendCurrent + stats4hNetworkBaseTokenVolumeByFillsourceBlendChange + stats4hNetworkBaseTokenVolumeByFillsourceBlendPrevious + stats4hNetworkBaseTokenVolumeByFillsourceGemCurrent + stats4hNetworkBaseTokenVolumeByFillsourceGemChange + stats4hNetworkBaseTokenVolumeByFillsourceGemPrevious + stats4hNetworkBaseTokenVolumeByFillsourceSudoswapCurrent + stats4hNetworkBaseTokenVolumeByFillsourceSudoswapChange + stats4hNetworkBaseTokenVolumeByFillsourceSudoswapPrevious + stats4hNetworkBaseTokenVolumeByFillsourceSudoswapV2Current + stats4hNetworkBaseTokenVolumeByFillsourceSudoswapV2Change + stats4hNetworkBaseTokenVolumeByFillsourceSudoswapV2Previous + stats4hNetworkBaseTokenVolumeByFillsourceCryptopunksCurrent + stats4hNetworkBaseTokenVolumeByFillsourceCryptopunksChange + stats4hNetworkBaseTokenVolumeByFillsourceCryptopunksPrevious + stats4hNetworkBaseTokenAverageCurrent + stats4hNetworkBaseTokenAveragePrevious + stats4hNetworkBaseTokenAverageChange + stats4hNetworkBaseTokenOpenCurrent + stats4hNetworkBaseTokenOpenPrevious + stats4hNetworkBaseTokenOpenChange + stats4hNetworkBaseTokenCloseCurrent + stats4hNetworkBaseTokenClosePrevious + stats4hNetworkBaseTokenCloseChange + stats4hNetworkBaseTokenLowestSaleCurrent + stats4hNetworkBaseTokenLowestSalePrevious + stats4hNetworkBaseTokenLowestSaleChange + stats4hNetworkBaseTokenHighestSaleCurrent + stats4hNetworkBaseTokenHighestSalePrevious + stats4hNetworkBaseTokenHighestSaleChange + stats4hNonCurrencyMintsCurrent + stats4hNonCurrencyMintsPrevious + stats4hNonCurrencyMintsChange + stats4hNonCurrencySalesCurrent + stats4hNonCurrencySalesPrevious + stats4hNonCurrencySalesChange + stats4hNonCurrencyTokensSoldCurrent + stats4hNonCurrencyTokensSoldPrevious + stats4hNonCurrencyTokensSoldChange + stats4hNonCurrencyTransfersCurrent + stats4hNonCurrencyTransfersPrevious + stats4hNonCurrencyTransfersChange + stats4hNonCurrencyUniqueBuyersCurrent + stats4hNonCurrencyUniqueBuyersPrevious + stats4hNonCurrencyUniqueBuyersChange + stats4hNonCurrencyUniqueSellersCurrent + stats4hNonCurrencyUniqueSellersPrevious + stats4hNonCurrencyUniqueSellersChange + stats4hNonCurrencyUniqueSalesWalletsCurrent + stats4hNonCurrencyUniqueSalesWalletsPrevious + stats4hNonCurrencyUniqueSalesWalletsChange + stats4hNonCurrencyUniqueMintersCurrent + stats4hNonCurrencyUniqueMintersPrevious + stats4hNonCurrencyUniqueMintersChange + stats12hUsdVolumeCurrent + stats12hUsdVolumePrevious + stats12hUsdVolumeChange + stats12hUsdVolumeByFillsourceOpenseaCurrent + stats12hUsdVolumeByFillsourceOpenseaChange + stats12hUsdVolumeByFillsourceOpenseaPrevious + stats12hUsdVolumeByFillsourceOpenseaProCurrent + stats12hUsdVolumeByFillsourceOpenseaProChange + stats12hUsdVolumeByFillsourceOpenseaProPrevious + stats12hUsdVolumeByFillsourceSeaportCurrent + stats12hUsdVolumeByFillsourceSeaportChange + stats12hUsdVolumeByFillsourceSeaportPrevious + stats12hUsdVolumeByFillsourceX2Y2Current + stats12hUsdVolumeByFillsourceX2Y2Change + stats12hUsdVolumeByFillsourceX2Y2Previous + stats12hUsdVolumeByFillsourceLooksrareCurrent + stats12hUsdVolumeByFillsourceLooksrareChange + stats12hUsdVolumeByFillsourceLooksrarePrevious + stats12hUsdVolumeByFillsourceLooksrareV2Current + stats12hUsdVolumeByFillsourceLooksrareV2Change + stats12hUsdVolumeByFillsourceLooksrareV2Previous + stats12hUsdVolumeByFillsourceBlurCurrent + stats12hUsdVolumeByFillsourceBlurChange + stats12hUsdVolumeByFillsourceBlurPrevious + stats12hUsdVolumeByFillsourceBlurV2Current + stats12hUsdVolumeByFillsourceBlurV2Change + stats12hUsdVolumeByFillsourceBlurV2Previous + stats12hUsdVolumeByFillsourceBlendCurrent + stats12hUsdVolumeByFillsourceBlendChange + stats12hUsdVolumeByFillsourceBlendPrevious + stats12hUsdVolumeByFillsourceGemCurrent + stats12hUsdVolumeByFillsourceGemChange + stats12hUsdVolumeByFillsourceGemPrevious + stats12hUsdVolumeByFillsourceSudoswapCurrent + stats12hUsdVolumeByFillsourceSudoswapChange + stats12hUsdVolumeByFillsourceSudoswapPrevious + stats12hUsdVolumeByFillsourceSudoswapV2Current + stats12hUsdVolumeByFillsourceSudoswapV2Change + stats12hUsdVolumeByFillsourceSudoswapV2Previous + stats12hUsdVolumeByFillsourceCryptopunksCurrent + stats12hUsdVolumeByFillsourceCryptopunksChange + stats12hUsdVolumeByFillsourceCryptopunksPrevious + stats12hUsdAverageCurrent + stats12hUsdAveragePrevious + stats12hUsdAverageChange + stats12hUsdOpenCurrent + stats12hUsdOpenPrevious + stats12hUsdOpenChange + stats12hUsdCloseCurrent + stats12hUsdClosePrevious + stats12hUsdCloseChange + stats12hUsdLowestSaleCurrent + stats12hUsdLowestSalePrevious + stats12hUsdLowestSaleChange + stats12hUsdHighestSaleCurrent + stats12hUsdHighestSalePrevious + stats12hUsdHighestSaleChange + stats12hNetworkBaseTokenVolumeCurrent + stats12hNetworkBaseTokenVolumePrevious + stats12hNetworkBaseTokenVolumeChange + stats12hNetworkBaseTokenVolumeByFillsourceOpenseaCurrent + stats12hNetworkBaseTokenVolumeByFillsourceOpenseaChange + stats12hNetworkBaseTokenVolumeByFillsourceOpenseaPrevious + stats12hNetworkBaseTokenVolumeByFillsourceOpenseaProCurrent + stats12hNetworkBaseTokenVolumeByFillsourceOpenseaProChange + stats12hNetworkBaseTokenVolumeByFillsourceOpenseaProPrevious + stats12hNetworkBaseTokenVolumeByFillsourceSeaportCurrent + stats12hNetworkBaseTokenVolumeByFillsourceSeaportChange + stats12hNetworkBaseTokenVolumeByFillsourceSeaportPrevious + stats12hNetworkBaseTokenVolumeByFillsourceX2Y2Current + stats12hNetworkBaseTokenVolumeByFillsourceX2Y2Change + stats12hNetworkBaseTokenVolumeByFillsourceX2Y2Previous + stats12hNetworkBaseTokenVolumeByFillsourceLooksrareCurrent + stats12hNetworkBaseTokenVolumeByFillsourceLooksrareChange + stats12hNetworkBaseTokenVolumeByFillsourceLooksrarePrevious + stats12hNetworkBaseTokenVolumeByFillsourceLooksrareV2Current + stats12hNetworkBaseTokenVolumeByFillsourceLooksrareV2Change + stats12hNetworkBaseTokenVolumeByFillsourceLooksrareV2Previous + stats12hNetworkBaseTokenVolumeByFillsourceBlurCurrent + stats12hNetworkBaseTokenVolumeByFillsourceBlurChange + stats12hNetworkBaseTokenVolumeByFillsourceBlurPrevious + stats12hNetworkBaseTokenVolumeByFillsourceBlurV2Current + stats12hNetworkBaseTokenVolumeByFillsourceBlurV2Change + stats12hNetworkBaseTokenVolumeByFillsourceBlurV2Previous + stats12hNetworkBaseTokenVolumeByFillsourceBlendCurrent + stats12hNetworkBaseTokenVolumeByFillsourceBlendChange + stats12hNetworkBaseTokenVolumeByFillsourceBlendPrevious + stats12hNetworkBaseTokenVolumeByFillsourceGemCurrent + stats12hNetworkBaseTokenVolumeByFillsourceGemChange + stats12hNetworkBaseTokenVolumeByFillsourceGemPrevious + stats12hNetworkBaseTokenVolumeByFillsourceSudoswapCurrent + stats12hNetworkBaseTokenVolumeByFillsourceSudoswapChange + stats12hNetworkBaseTokenVolumeByFillsourceSudoswapPrevious + stats12hNetworkBaseTokenVolumeByFillsourceSudoswapV2Current + stats12hNetworkBaseTokenVolumeByFillsourceSudoswapV2Change + stats12hNetworkBaseTokenVolumeByFillsourceSudoswapV2Previous + stats12hNetworkBaseTokenVolumeByFillsourceCryptopunksCurrent + stats12hNetworkBaseTokenVolumeByFillsourceCryptopunksChange + stats12hNetworkBaseTokenVolumeByFillsourceCryptopunksPrevious + stats12hNetworkBaseTokenAverageCurrent + stats12hNetworkBaseTokenAveragePrevious + stats12hNetworkBaseTokenAverageChange + stats12hNetworkBaseTokenOpenCurrent + stats12hNetworkBaseTokenOpenPrevious + stats12hNetworkBaseTokenOpenChange + stats12hNetworkBaseTokenCloseCurrent + stats12hNetworkBaseTokenClosePrevious + stats12hNetworkBaseTokenCloseChange + stats12hNetworkBaseTokenLowestSaleCurrent + stats12hNetworkBaseTokenLowestSalePrevious + stats12hNetworkBaseTokenLowestSaleChange + stats12hNetworkBaseTokenHighestSaleCurrent + stats12hNetworkBaseTokenHighestSalePrevious + stats12hNetworkBaseTokenHighestSaleChange + stats12hNonCurrencyMintsCurrent + stats12hNonCurrencyMintsPrevious + stats12hNonCurrencyMintsChange + stats12hNonCurrencySalesCurrent + stats12hNonCurrencySalesPrevious + stats12hNonCurrencySalesChange + stats12hNonCurrencyTokensSoldCurrent + stats12hNonCurrencyTokensSoldPrevious + stats12hNonCurrencyTokensSoldChange + stats12hNonCurrencyTransfersCurrent + stats12hNonCurrencyTransfersPrevious + stats12hNonCurrencyTransfersChange + stats12hNonCurrencyUniqueBuyersCurrent + stats12hNonCurrencyUniqueBuyersPrevious + stats12hNonCurrencyUniqueBuyersChange + stats12hNonCurrencyUniqueSellersCurrent + stats12hNonCurrencyUniqueSellersPrevious + stats12hNonCurrencyUniqueSellersChange + stats12hNonCurrencyUniqueSalesWalletsCurrent + stats12hNonCurrencyUniqueSalesWalletsPrevious + stats12hNonCurrencyUniqueSalesWalletsChange + stats12hNonCurrencyUniqueMintersCurrent + stats12hNonCurrencyUniqueMintersPrevious + stats12hNonCurrencyUniqueMintersChange + stats24hUsdVolumeCurrent + stats24hUsdVolumePrevious + stats24hUsdVolumeChange + stats24hUsdVolumeByFillsourceOpenseaCurrent + stats24hUsdVolumeByFillsourceOpenseaChange + stats24hUsdVolumeByFillsourceOpenseaPrevious + stats24hUsdVolumeByFillsourceOpenseaProCurrent + stats24hUsdVolumeByFillsourceOpenseaProChange + stats24hUsdVolumeByFillsourceOpenseaProPrevious + stats24hUsdVolumeByFillsourceSeaportCurrent + stats24hUsdVolumeByFillsourceSeaportChange + stats24hUsdVolumeByFillsourceSeaportPrevious + stats24hUsdVolumeByFillsourceX2Y2Current + stats24hUsdVolumeByFillsourceX2Y2Change + stats24hUsdVolumeByFillsourceX2Y2Previous + stats24hUsdVolumeByFillsourceLooksrareCurrent + stats24hUsdVolumeByFillsourceLooksrareChange + stats24hUsdVolumeByFillsourceLooksrarePrevious + stats24hUsdVolumeByFillsourceLooksrareV2Current + stats24hUsdVolumeByFillsourceLooksrareV2Change + stats24hUsdVolumeByFillsourceLooksrareV2Previous + stats24hUsdVolumeByFillsourceBlurCurrent + stats24hUsdVolumeByFillsourceBlurChange + stats24hUsdVolumeByFillsourceBlurPrevious + stats24hUsdVolumeByFillsourceBlurV2Current + stats24hUsdVolumeByFillsourceBlurV2Change + stats24hUsdVolumeByFillsourceBlurV2Previous + stats24hUsdVolumeByFillsourceBlendCurrent + stats24hUsdVolumeByFillsourceBlendChange + stats24hUsdVolumeByFillsourceBlendPrevious + stats24hUsdVolumeByFillsourceGemCurrent + stats24hUsdVolumeByFillsourceGemChange + stats24hUsdVolumeByFillsourceGemPrevious + stats24hUsdVolumeByFillsourceSudoswapCurrent + stats24hUsdVolumeByFillsourceSudoswapChange + stats24hUsdVolumeByFillsourceSudoswapPrevious + stats24hUsdVolumeByFillsourceSudoswapV2Current + stats24hUsdVolumeByFillsourceSudoswapV2Change + stats24hUsdVolumeByFillsourceSudoswapV2Previous + stats24hUsdVolumeByFillsourceCryptopunksCurrent + stats24hUsdVolumeByFillsourceCryptopunksChange + stats24hUsdVolumeByFillsourceCryptopunksPrevious + stats24hUsdAverageCurrent + stats24hUsdAveragePrevious + stats24hUsdAverageChange + stats24hUsdOpenCurrent + stats24hUsdOpenPrevious + stats24hUsdOpenChange + stats24hUsdCloseCurrent + stats24hUsdClosePrevious + stats24hUsdCloseChange + stats24hUsdLowestSaleCurrent + stats24hUsdLowestSalePrevious + stats24hUsdLowestSaleChange + stats24hUsdHighestSaleCurrent + stats24hUsdHighestSalePrevious + stats24hUsdHighestSaleChange + stats24hNetworkBaseTokenVolumeCurrent + stats24hNetworkBaseTokenVolumePrevious + stats24hNetworkBaseTokenVolumeChange + stats24hNetworkBaseTokenVolumeByFillsourceOpenseaCurrent + stats24hNetworkBaseTokenVolumeByFillsourceOpenseaChange + stats24hNetworkBaseTokenVolumeByFillsourceOpenseaPrevious + stats24hNetworkBaseTokenVolumeByFillsourceOpenseaProCurrent + stats24hNetworkBaseTokenVolumeByFillsourceOpenseaProChange + stats24hNetworkBaseTokenVolumeByFillsourceOpenseaProPrevious + stats24hNetworkBaseTokenVolumeByFillsourceSeaportCurrent + stats24hNetworkBaseTokenVolumeByFillsourceSeaportChange + stats24hNetworkBaseTokenVolumeByFillsourceSeaportPrevious + stats24hNetworkBaseTokenVolumeByFillsourceX2Y2Current + stats24hNetworkBaseTokenVolumeByFillsourceX2Y2Change + stats24hNetworkBaseTokenVolumeByFillsourceX2Y2Previous + stats24hNetworkBaseTokenVolumeByFillsourceLooksrareCurrent + stats24hNetworkBaseTokenVolumeByFillsourceLooksrareChange + stats24hNetworkBaseTokenVolumeByFillsourceLooksrarePrevious + stats24hNetworkBaseTokenVolumeByFillsourceLooksrareV2Current + stats24hNetworkBaseTokenVolumeByFillsourceLooksrareV2Change + stats24hNetworkBaseTokenVolumeByFillsourceLooksrareV2Previous + stats24hNetworkBaseTokenVolumeByFillsourceBlurCurrent + stats24hNetworkBaseTokenVolumeByFillsourceBlurChange + stats24hNetworkBaseTokenVolumeByFillsourceBlurPrevious + stats24hNetworkBaseTokenVolumeByFillsourceBlurV2Current + stats24hNetworkBaseTokenVolumeByFillsourceBlurV2Change + stats24hNetworkBaseTokenVolumeByFillsourceBlurV2Previous + stats24hNetworkBaseTokenVolumeByFillsourceBlendCurrent + stats24hNetworkBaseTokenVolumeByFillsourceBlendChange + stats24hNetworkBaseTokenVolumeByFillsourceBlendPrevious + stats24hNetworkBaseTokenVolumeByFillsourceGemCurrent + stats24hNetworkBaseTokenVolumeByFillsourceGemChange + stats24hNetworkBaseTokenVolumeByFillsourceGemPrevious + stats24hNetworkBaseTokenVolumeByFillsourceSudoswapCurrent + stats24hNetworkBaseTokenVolumeByFillsourceSudoswapChange + stats24hNetworkBaseTokenVolumeByFillsourceSudoswapPrevious + stats24hNetworkBaseTokenVolumeByFillsourceSudoswapV2Current + stats24hNetworkBaseTokenVolumeByFillsourceSudoswapV2Change + stats24hNetworkBaseTokenVolumeByFillsourceSudoswapV2Previous + stats24hNetworkBaseTokenVolumeByFillsourceCryptopunksCurrent + stats24hNetworkBaseTokenVolumeByFillsourceCryptopunksChange + stats24hNetworkBaseTokenVolumeByFillsourceCryptopunksPrevious + stats24hNetworkBaseTokenAverageCurrent + stats24hNetworkBaseTokenAveragePrevious + stats24hNetworkBaseTokenAverageChange + stats24hNetworkBaseTokenOpenCurrent + stats24hNetworkBaseTokenOpenPrevious + stats24hNetworkBaseTokenOpenChange + stats24hNetworkBaseTokenCloseCurrent + stats24hNetworkBaseTokenClosePrevious + stats24hNetworkBaseTokenCloseChange + stats24hNetworkBaseTokenLowestSaleCurrent + stats24hNetworkBaseTokenLowestSalePrevious + stats24hNetworkBaseTokenLowestSaleChange + stats24hNetworkBaseTokenHighestSaleCurrent + stats24hNetworkBaseTokenHighestSalePrevious + stats24hNetworkBaseTokenHighestSaleChange + stats24hNonCurrencyMintsCurrent + stats24hNonCurrencyMintsPrevious + stats24hNonCurrencyMintsChange + stats24hNonCurrencySalesCurrent + stats24hNonCurrencySalesPrevious + stats24hNonCurrencySalesChange + stats24hNonCurrencyTokensSoldCurrent + stats24hNonCurrencyTokensSoldPrevious + stats24hNonCurrencyTokensSoldChange + stats24hNonCurrencyTransfersCurrent + stats24hNonCurrencyTransfersPrevious + stats24hNonCurrencyTransfersChange + stats24hNonCurrencyUniqueBuyersCurrent + stats24hNonCurrencyUniqueBuyersPrevious + stats24hNonCurrencyUniqueBuyersChange + stats24hNonCurrencyUniqueSellersCurrent + stats24hNonCurrencyUniqueSellersPrevious + stats24hNonCurrencyUniqueSellersChange + stats24hNonCurrencyUniqueSalesWalletsCurrent + stats24hNonCurrencyUniqueSalesWalletsPrevious + stats24hNonCurrencyUniqueSalesWalletsChange + stats24hNonCurrencyUniqueMintersCurrent + stats24hNonCurrencyUniqueMintersPrevious + stats24hNonCurrencyUniqueMintersChange +} + +"""The attribute used to rank NFT pools.""" +enum NftPoolRankingAttribute { + balanceNBT + balanceUSD + expenseNBT24 + expenseNBTAll + expenseUSD24 + expenseUSDAll + nftBalance + nftsBought24 + nftsBoughtAll + nftsSold24 + nftsSoldAll + nftVolume24 + nftVolumeAll + offerNBT + offerUSD + poolFeesNBT24 + poolFeesNBTAll + poolFeesUSD24 + poolFeesUSDAll + protocolFeesNBT24 + protocolFeesNBTAll + protocolFeesUSD24 + protocolFeesUSDAll + revenueNBT24 + revenueNBTAll + revenueUSD24 + revenueUSDAll + sellNBT + sellUSD + volumeNBT24 + volumeNBTAll + volumeUSD24 + volumeUSDAll +} + +"""The attribute used to rank NFT collections.""" +enum NftPoolCollectionRankingAttribute { + balanceNBT + balanceUSD + expenseNBT24 + expenseNBTAll + expenseUSD24 + expenseUSDAll + floorNBT + floorUSD + highPriceNBT24 + highPriceNBTAll + highPriceUSD24 + highPriceUSDAll + lowPriceNBT24 + lowPriceNBTAll + lowPriceUSD24 + lowPriceUSDAll + nftBalance + nftsBought24 + nftsBoughtAll + nftsSold24 + nftsSoldAll + nftVolume24 + nftVolumeAll + offerNBT + offerUSD + poolFeesNBT24 + poolFeesNBTAll + poolFeesUSD24 + poolFeesUSDAll + protocolFeesNBT24 + protocolFeesNBTAll + protocolFeesUSD24 + protocolFeesUSDAll + revenueNBT24 + revenueNBTAll + revenueUSD24 + revenueUSDAll + totalSupply + volumeNBT24 + volumeNBTAll + volumeUSD24 + volumeUSDAll +} + +"""The type of an NFT pool event.""" +enum NftPoolEventType { + NEW_POOL + SWAP_NFT_IN_POOL + SWAP_NFT_OUT_POOL + NFT_DEPOSIT + NFT_WITHDRAWAL + TOKEN_DEPOSIT + TOKEN_WITHDRAWAL + SPOT_PRICE_UPDATE + DELTA_UPDATE + FEE_UPDATE + ASSET_RECIPIENT_CHANGE + NEW_POOL_V2 + SWAP_NFT_IN_POOL_V2 + SWAP_NFT_OUT_POOL_V2 + NFT_DEPOSIT_V2 + NFT_WITHDRAWAL_V2 + TOKEN_DEPOSIT_V2 + TOKEN_WITHDRAWAL_V2 + SPOT_PRICE_UPDATE_V2 + OWNERSHIP_TRANSFERRED +} + +"""The attribute used to rank NFT collections.""" +enum NftCollectionsLeaderboardMetric { + volumeUsd + volumeUsdGain + sales + salesGain + tokensSold + tokensSoldGain + volumeBase + volumeBaseGain + mints + mintsGain + buyers + buyersGain + sellers + sellersGain +} + +"""The duration used to rank NFTs.""" +enum NftCollectionsLeaderboardDuration { + day30 + week1 + day1 + hour12 + hour4 + hour1 + min15 +} + +"""NFT marketplaces.""" +enum NftExchange { + OPENSEA + SEAPORT + X2Y2 + SUDOSWAPV2 + LOOKSRARE + LOOKSRAREV2 + TOFUNFT + TREASURE + ZEROEXV3 + ZEROEXV4 + QUIXOTIC + JOEPEGS + STRATOS + PLAYDAPP + BLUR + CRYPTOPUNKS + BITKEEP + MINTED + ALTO + PROVENANT + BLURV2 + BLEND + SUDOSWAPAMMV2 +} + +"""Event-specific data for an NFT pool transaction.""" +union NftPoolEventData = NewPoolEventData | SwapNftOutPoolEventData | SwapNftInPoolEventData | NftPoolNftDepositEventData | NftPoolNftWithdrawalEventData | NftPoolTokenDepositEventData | NftPoolTokenWithdrawalEventData | NftPoolSpotPriceUpdateEventData | NftPoolDeltaUpdateEventData | NftPoolFeeUpdateEventData | NftPoolAssetRecipientUpdateEventData | NewPoolEventDataV2 | SwapNftOutPoolEventDataV2 | SwapNftInPoolEventDataV2 | NftPoolNftDepositEventDataV2 | NftPoolNftWithdrawalEventDataV2 | NftPoolTokenDepositEventDataV2 | NftPoolTokenWithdrawalEventDataV2 | NftPoolSpotPriceUpdateEventDataV2 | NftPoolOwnershipTransferredEventDataV2 + +"""Input type of `NftPoolNumberFilter`.""" +input NftPoolNumberFilter { + """Greater than or equal to.""" + gte: String + """Greater than.""" + gt: String + """Less than or equal to.""" + lte: String + """Less than.""" + lt: String +} + +"""Input type of `NftPoolRanking`.""" +input NftPoolRanking { + """The attribute to rank NFT pools by.""" + attribute: NftPoolRankingAttribute + """The direction to apply to the ranking attribute.""" + direction: RankingDirection +} + +"""Event data for creating a new NFT pool.""" +type NewPoolEventData { + """The type of NFT pool event, `NEW_POOL`.""" + type: NftPoolEventType! + """The network ID the NFT collection is deployed on.""" + networkId: Int! + """The contract address of the NFT pool.""" + poolAddress: String! + """The contract address of the NFT collection.""" + collectionAddress: String! + """The contract address of the liquidity token of the pool (usually WETH).""" + tokenAddress: String! + """The wallet address of the pool owner.""" + ownerAddress: String! + """The wallet address that will receive the tokens or NFT sent to the pair during swaps.""" + assetRecipientAddress: String! + """The contract address of the bonding curve.""" + bondingCurveAddress: String! + """The bonding curve type that defines how the prices of NFTs change after each buy or sell within a pool.""" + bondingCurveType: BondingCurveType! + """The initial delta used in the bonding curve.""" + delta: String! + """The pool fee amount in the pool's liquidity token.""" + feeAmountT: String! + """The initial spot price in the pool's liquidity token.""" + startPriceT: String! + """The initial price at which the pool is willing to buy an NFT in the pool's liquidity token.""" + buyPriceT: String! + """The initial price at which the pool is willing to sell an NFT in the pool's liquidity token.""" + sellPriceT: String! + """The unix timestamp for the time the pool was created.""" + createdAt: Int! + """The number of NFTs in the contract after the block has processed.""" + nftTokenBalance: String! + """The amount of token in the contract after the block has processed in the pool's liquidity token.""" + tokenBalanceT: String! + """The ratio of the transaction token to the network's base token.""" + nbtRatio: String! + """The ratio of the transaction token to USD.""" + usdRatio: String! +} + +"""Event data for swapping an NFT out of a pool.""" +type SwapNftOutPoolEventData { + """The type of NFT pool event, `SWAP_NFT_OUT_POOL`.""" + type: NftPoolEventType! + """The ID of the token involved in the swap (`address`:`networkId`).""" + tokenId: String! + """The updated delta used in the bonding curve.""" + newDelta: String! + """The fee for the pool in the pool's liquidity token.""" + poolFeeT: String! + """The protocol fee in the pool's liquidity token.""" + protocolFeeT: String! + """Metadata for each of the NFTs involved in the swap.""" + nftsTransfered: [NftPoolEventNftTransfer] + """The updated spot price in the pool's liquidity token.""" + newSpotPriceT: String! + """The updated price at which the pool is willing to sell an NFT in the pool's liquidity token.""" + newSellPriceT: String! + """The updated price at which the pool is willing to buy an NFT in the pool's liquidity token.""" + newBuyPriceT: String! + """The total value of all NFTs involved in the swap in the pool's liquidity token.""" + amountT: String! + """The number of NFTs in the contract after the block has processed.""" + nftTokenBalance: String! + """The amount of token in the contract after the block has processed in the pool's liquidity token.""" + tokenBalanceT: String! + """The ratio of the transaction token to the network's base token.""" + nbtRatio: String! + """The ratio of the transaction token to USD.""" + usdRatio: String! +} + +"""Event data for swapping an NFT out of a pool.""" +type SwapNftOutPoolEventDataV2 { + """The type of NFT pool event, `SWAP_NFT_OUT_POOL`.""" + type: NftPoolEventType! + """The ID of the token involved in the swap (`address`:`networkId`).""" + tokenId: String! + """The updated delta used in the bonding curve.""" + newDelta: String! + """The fee for the pool in the pool's liquidity token.""" + poolFeeT: String! + """The protocol fee in the pool's liquidity token.""" + protocolFeeT: String! + """Metadata for each of the NFTs involved in the swap.""" + nftsTransfered: [NftPoolEventNftTransferV2] + """*New Param*: The list of NFT assets withdrawn. More extensive info than nftTokenIds.""" + nftAssets: [NftAsset] + """The updated spot price in the pool's liquidity token.""" + newSpotPriceT: String! + """The updated price at which the pool is willing to sell an NFT in the pool's liquidity token.""" + newSellPriceT: String! + """The updated price at which the pool is willing to buy an NFT in the pool's liquidity token.""" + newBuyPriceT: String! + """The total value of all NFTs involved in the swap in the pool's liquidity token.""" + amountT: String! + """The amount of token in the contract after the block has processed in the pool's liquidity token.""" + tokenBalanceT: String! + """The ratio of the transaction token to the network's base token.""" + nbtRatio: String! + """The ratio of the transaction token to USD.""" + usdRatio: String! +} + +"""Metadata for an NFT transfer.""" +type NftPoolEventNftTransferV2 { + """The NFT token ID involved in the transfer.""" + nftTokenId: String! + """The number of tokens involved in the transfer.""" + nftQuantity: String! + """The number of tokens involved in the transfer.""" + nftTokenQuantity: String! @deprecated(reason: "nftTokenQuantity is no longer supported - use nftQuantity instead.") + """The value of the token at the time of transfer.""" + amountT: String! +} + +"""Event data for swapping an NFT into a pool.""" +type SwapNftInPoolEventData { + """The type of NFT pool event, `SWAP_NFT_IN_POOL`.""" + type: NftPoolEventType! + """The ID of the token involved in the swap (`address`:`networkId`).""" + tokenId: String! + """The updated delta used in the bonding curve.""" + newDelta: String! + """The fee for the pool in the pool's liquidity token.""" + poolFeeT: String! + """The protocol fee in the pool's liquidity token.""" + protocolFeeT: String! + """Metadata for each of the NFTs involved in the swap.""" + nftsTransfered: [NftPoolEventNftTransfer] + """The updated spot price in the pool's liquidity token.""" + newSpotPriceT: String! + """The updated price at which the pool is willing to sell an NFT in the pool's liquidity token.""" + newSellPriceT: String! + """The updated price at which the pool is willing to buy an NFT in the pool's liquidity token.""" + newBuyPriceT: String! + """The total value of all NFTs involved in the swap in the pool's liquidity token.""" + amountT: String! + """The number of NFTs in the contract after the block has processed.""" + nftTokenBalance: String! + """The amount of token in the contract after the block has processed in the pool's liquidity token.""" + tokenBalanceT: String! + """The ratio of the transaction token to the network's base token.""" + nbtRatio: String! + """The ratio of the transaction token to USD.""" + usdRatio: String! +} + +"""Event data for swapping an NFT into a pool.""" +type SwapNftInPoolEventDataV2 { + """The type of NFT pool event, `SWAP_NFT_IN_POOL`.""" + type: NftPoolEventType! + """The ID of the token involved in the swap (`address`:`networkId`).""" + tokenId: String! + """The updated delta used in the bonding curve.""" + newDelta: String! + """The fee for the pool in the pool's liquidity token.""" + poolFeeT: String! + """The protocol fee in the pool's liquidity token.""" + protocolFeeT: String! + """Metadata for each of the NFTs involved in the swap.""" + nftsTransfered: [NftPoolEventNftTransferV2] + """*New Param*: The list of NFT assets withdrawn. More extensive info than nftTokenIds.""" + nftAssets: [NftAsset] + """The updated spot price in the pool's liquidity token.""" + newSpotPriceT: String! + """The updated price at which the pool is willing to sell an NFT in the pool's liquidity token.""" + newSellPriceT: String! + """The updated price at which the pool is willing to buy an NFT in the pool's liquidity token.""" + newBuyPriceT: String! + """The total value of all NFTs involved in the swap in the pool's liquidity token.""" + amountT: String! + """The amount of token in the contract after the block has processed in the pool's liquidity token.""" + tokenBalanceT: String! + """The ratio of the transaction token to the network's base token.""" + nbtRatio: String! + """The ratio of the transaction token to USD.""" + usdRatio: String! +} + +"""Metadata for an NFT transfer.""" +type NftPoolEventNftTransfer { + """The NFT token ID involved in the transfer.""" + nftTokenId: String! + """The value of the NFT at the time of transfer.""" + amountT: String! +} + +"""Event data for depositing an NFT into a pool.""" +type NftPoolNftDepositEventData { + """The type of NFT pool event, `NFT_DEPOSIT`.""" + type: NftPoolEventType! + """The list of NFT token IDs deposited.""" + nftTokenIds: [String!]! + """The number of NFTs in the contract after the block has processed.""" + nftTokenBalance: String! + """The amount of token in the contract after the block has processed in the pool's liquidity token.""" + tokenBalanceT: String! +} + +"""Event data for depositing an NFT into a pool.""" +type NftPoolNftDepositEventDataV2 { + """The type of NFT pool event, `NFT_DEPOSIT`.""" + type: NftPoolEventType! + """The list of NFT token IDs deposited.""" + nftTokenIds: [String!]! + """The amount of each NFT token deposited.""" + nftTokenAmounts: [String!]! + """*New Param*: The list of NFT assets withdrawn. More extensive info than nftTokenIds.""" + nftAssets: [NftAsset] + """The amount of token in the contract after the block has processed in the pool's liquidity token.""" + tokenBalanceT: String! +} + +"""Event data for withdrawing an NFT from a pool.""" +type NftPoolNftWithdrawalEventData { + """The type of NFT pool event, `NFT_WITHDRAWAL`.""" + type: NftPoolEventType! + """The NFT token IDs withdrawn.""" + nftTokenIds: [String!]! + """The number of NFTs in the contract after the block has processed.""" + nftTokenBalance: String! + """The amount of token in the contract after the block has processed in the pool's liquidity token.""" + tokenBalanceT: String! +} + +"""Event data for withdrawing an NFT from a pool.""" +type NftPoolNftWithdrawalEventDataV2 { + """The type of NFT pool event, `NFT_WITHDRAWAL`.""" + type: NftPoolEventType! + """The list of NFT token IDs withdrawn.""" + nftTokenIds: [String!]! + """The amount of each NFT token withdrawn.""" + nftTokenAmounts: [String!]! + """The amount of token in the contract after the block has processed in the pool's liquidity token.""" + tokenBalanceT: String! + """*New Param*: The list of NFT assets withdrawn. More extensive info than nftTokenIds.""" + nftAssets: [NftAsset] +} + +"""Event data for depositing a token into a pool.""" +type NftPoolTokenDepositEventData { + """The type of NFT pool event, `TOKEN_DEPOSIT`.""" + type: NftPoolEventType! + """The total value of token deposited in the pool's liquidity token.""" + amountT: String! + """The number of NFTs in the contract after the block has processed.""" + nftTokenBalance: String! + """The amount of token in the contract after the block has processed in the pool's liquidity token.""" + tokenBalanceT: String! + """The ratio of the transaction token to the network's base token.""" + nbtRatio: String! + """The ratio of the transaction token to USD.""" + usdRatio: String! +} + +"""Event data for depositing a token into a pool.""" +type NftPoolTokenDepositEventDataV2 { + """The type of NFT pool event, `TOKEN_DEPOSIT`.""" + type: NftPoolEventType! + """The total value of token deposited in the pool's liquidity token.""" + amountT: String! + """The amount of token in the contract after the block has processed in the pool's liquidity token.""" + tokenBalanceT: String! + """The ratio of the transaction token to the network's base token.""" + nbtRatio: String! + """The ratio of the transaction token to USD.""" + usdRatio: String! +} + +"""Event data for withdrawing a token from a pool.""" +type NftPoolTokenWithdrawalEventData { + """The type of NFT pool event, `TOKEN_WITHDRAWAL`.""" + type: NftPoolEventType! + """The total value of token withdrawn in the pool's liquidity token.""" + amountT: String! + """The number of NFTs in the contract after the block has processed.""" + nftTokenBalance: String! + """The amount of token in the contract after the block has processed in the pool's liquidity token.""" + tokenBalanceT: String! + """The ratio of the transaction token to the network's base token.""" + nbtRatio: String! + """The ratio of the transaction token to USD.""" + usdRatio: String! +} + +"""Event data for withdrawing a token from a pool.""" +type NftPoolTokenWithdrawalEventDataV2 { + """The type of NFT pool event, `TOKEN_WITHDRAWAL`.""" + type: NftPoolEventType! + """The total value of token withdrawn in the pool's liquidity token.""" + amountT: String! + """The amount of token in the contract after the block has processed in the pool's liquidity token.""" + tokenBalanceT: String! + """The ratio of the transaction token to the network's base token.""" + nbtRatio: String! + """The ratio of the transaction token to USD.""" + usdRatio: String! +} + +"""Event data for updating the spot price of a pool.""" +type NftPoolSpotPriceUpdateEventData { + """The type of NFT pool event, `SPOT_PRICE_UPDATE`.""" + type: NftPoolEventType! + """The updated spot price in the pool's liquidity token.""" + newSpotPriceT: String! + """The updated price at which the pool is willing to sell an NFT in the pool's liquidity token.""" + newSellPriceT: String! + """The updated price at which the pool is willing to buy an NFT in the pool's liquidity token.""" + newBuyPriceT: String! + """The ratio of the transaction token to the network's base token.""" + nbtRatio: String! + """The ratio of the transaction token to USD.""" + usdRatio: String! +} + +"""Event data for updating the spot price of a pool.""" +type NftPoolSpotPriceUpdateEventDataV2 { + """The type of NFT pool event, `SPOT_PRICE_UPDATE`.""" + type: NftPoolEventType! + """The updated spot price in the pool's liquidity token.""" + newSpotPriceT: String! + """The updated price at which the pool is willing to sell an NFT in the pool's liquidity token.""" + newSellPriceT: String! + """The updated price at which the pool is willing to buy an NFT in the pool's liquidity token.""" + newBuyPriceT: String! + """The ratio of the transaction token to the network's base token.""" + nbtRatio: String! + """The ratio of the transaction token to USD.""" + usdRatio: String! +} + +"""Event data for transferring ownership of a pool.""" +type NftPoolOwnershipTransferredEventDataV2 { + """The type of NFT pool event, `OWNERSHIP_TRANSFERRED`.""" + type: NftPoolEventType! + """The new owner of the pool.""" + newOwner: String! +} + +"""Event data for updating the delta of a pool.""" +type NftPoolDeltaUpdateEventData { + """The type of NFT pool event, `DELTA_UPDATE`.""" + type: NftPoolEventType! + """The updated delta used in the bonding curve.""" + newDelta: String! +} + +"""Event data for updating the fee of a pool.""" +type NftPoolFeeUpdateEventData { + """The type of NFT pool event, `FEE_UPDATE`.""" + type: NftPoolEventType! + """The updated pool fee in the pool's liquidity token.""" + newFeeT: String! + """The ratio of the transaction token to the network's base token.""" + nbtRatio: String! + """The ratio of the transaction token to USD.""" + usdRatio: String! +} + +"""Event data for updating the asset recipient of a pool.""" +type NftPoolAssetRecipientUpdateEventData { + """The type of NFT pool event, `ASSET_RECIPIENT_CHANGE`.""" + type: NftPoolEventType! + """The updated wallet address that will receive the tokens or NFT sent to the pair during swaps.""" + newAssetRecipient: String! +} + +"""Event data for creating a new NFT pool.""" +type NewPoolEventDataV2 { + """The type of NFT pool event, `NEW_POOL`.""" + type: NftPoolEventType! + """The network ID the NFT collection is deployed on.""" + networkId: Int! + """The contract address of the NFT pool.""" + poolAddress: String! + """The contract address of the NFT collection.""" + collectionAddress: String! + """The contract address of the liquidity token of the pool (usually WETH).""" + tokenAddress: String! + """The wallet address of the pool owner.""" + ownerAddress: String! + """The wallet address that will receive the tokens or NFT sent to the pair during swaps.""" + assetRecipientAddress: String! + """The contract address of the bonding curve.""" + bondingCurveAddress: String! + """The bonding curve type that defines how the prices of NFTs change after each buy or sell within a pool.""" + bondingCurveType: BondingCurveType! + """The initial delta used in the bonding curve.""" + delta: String! + """The pool fee amount in the pool's liquidity token.""" + feeAmountT: String! + """The initial spot price in the pool's liquidity token.""" + startPriceT: String! + """The initial price at which the pool is willing to buy an NFT in the pool's liquidity token.""" + buyPriceT: String! + """The initial price at which the pool is willing to sell an NFT in the pool's liquidity token.""" + sellPriceT: String! + """The unix timestamp for the time the pool was created.""" + createdAt: Int! + """The amount of token in the contract after the block has processed in the pool's liquidity token.""" + tokenBalanceT: String! + """The ratio of the transaction token to the network's base token.""" + nbtRatio: String! + """The ratio of the transaction token to USD.""" + usdRatio: String! + """The list of NFT token IDs initially deposited.""" + nftTokenIds: [String!]! + """The amount of each NFT token initially deposited.""" + nftTokenQuantities: [String]! + """*New Param*: The list of NFT assets withdrawn. More extensive info than nftTokenIds.""" + nftAssets: [NftAsset] + """The type of NFT in the pool.""" + poolNftType: PoolNftType! + """The list of royalties for the pool. Only applicable for `SUDOSWAP_V2` pools.""" + royalties: [NftPoolRoyalty] + """The property checker contract address for the pool.""" + propertyChecker: String +} + +"""The royalty for a SUDOSWAP_V2 pool.""" +type NftPoolRoyalty { + """The wallet address of recipient.""" + recipient: String + """The royalty percent.""" + percent: String +} + +"""NFT asset media.""" +type NftAssetMedia { + """The URL for a full size image of the NFT asset.""" + image: String! + """The URL for small generated thumbnail of the NFT asset.""" + thumbSm: String! + """The URL for large generated thumbnail of the NFT asset.""" + thumbLg: String! + """Whether the NFT asset media has finished processing.""" + processed: Boolean +} + +"""Attributes for an NFT asset.""" +type NftAssetAttribute { + """Suggested class name to use for css styling. An optional attribute of ERC-1155 assets.""" + class: String + """Suggested CSS styling. An optional attribute of ERC-1155 assets.""" + css: String + """The attribute display type. Can be `Trait`, `Stat`, `Ranking`, `BoostNumber`, `BoostPercentage` or `Date`.""" + displayType: NftAssetAttributeDisplayType! + """The max value, if applicable.""" + maxValue: String + """The name of the attribute.""" + name: String! + """The value of the attribute.""" + value: String! + """The type for the `value` field. Can be `String`, `Number` or `Array`.""" + valueType: NftAssetAttributeType! +} + +"""The status of an NFT asset error.""" +enum NftAssetErrorStatus { + NOT_FOUND + INDEXING_IN_PROGRESS +} + +"""An NFT asset.""" +type NftAsset { + """The ID of the NFT asset (`address`:`networkId`).""" + id: String! + """The contract address of the NFT collection.""" + address: String! + """The token ID of the NFT asset.""" + tokenId: String! + """The network ID the NFT collection is deployed on.""" + networkId: Int! + """The NFT asset media.""" + media: NftAssetMedia + """The name of the NFT asset.""" + name: String + """The description of the NFT asset.""" + description: String + """The source image URI linked by smart contract metadata.""" + originalImage: String + """The URI provided by the smart contract. Typically JSON that contains metadata.""" + uri: String + """The attributes for the NFT asset.""" + attributes: [NftAssetAttribute!] + """The number of NFT assets with the same NFT token ID. Only applicable for ERC1155 tokens.""" + quantity: String + """Raw NFT metadata from the smart contract.""" + rawAssetData: RawNftAssetData +} + +"""Raw NFT asset data.""" +type RawNftAssetData { + """An optional image field that may or may not be present on the requested NFT asset smart contract.""" + imageUrl: String + """An optional image field that may or may not be present on the requested NFT asset smart contract.""" + imageData: String + """An optional image field that may or may not be present on the requested NFT asset smart contract.""" + animationUrl: String + """An optional field that may or may not be present on the requested NFT asset smart contract.""" + externalUrl: String +} + +"""An NFT asset error.""" +type NftAssetError { + """The ID of the NFT asset (`address`:`networkId`).""" + id: String! + """The contract address of the NFT collection.""" + address: String! + """The token ID of the NFT asset.""" + tokenId: String! + """The network ID the NFT collection is deployed on.""" + networkId: Int! + """The status of the asset error.""" + status: NftAssetErrorStatus! + """The message of the asset error.""" + message: String! +} + +"""An NFT pool.""" +type NftPoolResponse { + """The ID of the NFT pool (`poolAddress`:`networkId`). For example, `0xdbea289dcc10eed8431e78753414a3d81b8e7201:1`.""" + poolId: String! + """The contract address of the liquidity token of the pool (usually WETH).""" + tokenAddress: String! + """The contract address of the NFT collection.""" + collectionAddress: String! + """The contract name of the NFT collection.""" + collectionName: String! + """The symbol of the NFT collection.""" + collectionSymbol: String + """The contract address of the NFT AMM marketplace.""" + exchangeAddress: String! + """The contract address of the NFT pool.""" + poolAddress: String! + """The network ID the NFT collection is deployed on.""" + networkId: Int! + """The type of liquidity pool.""" + poolType: NftPoolType! + """The pool variant. Can be `ERC20` or `NATIVE`.""" + poolVariant: GraphQlNftPoolVariant! + """The bonding curve type that defines how the prices of NFTs change after each buy or sell within a pool.""" + bondingCurveType: BondingCurveType! + """The contract address of the bonding curve.""" + bondingCurveAddress: String! + """The wallet address that will receive the tokens or NFT sent to the pair during swaps.""" + assetRecipientAddress: String! + """The current delta used in the bonding curve.""" + delta: String! + """The wallet address of the pool owner.""" + owner: String! + """The current fee for pool.""" + fee: String! + poolFeesAllTimeT: String + poolFeesAllTimeNBT: String + """The current price at which the pool is willing to sell an NFT in the network's base token. Only applicable for `SELL` and `BUY_AND_SELL` pool types.""" + floorNBT: String + """The current price at which the pool is willing to buy an NFT in the network's base token. Only applicable for `BUY` and `BUY_AND_SELL` pool types.""" + offerNBT: String + """The spot price in the network's base token.""" + spotPriceNBT: String! + """The current pool liquidity in the network's base token.""" + balanceNBT: String! + """The current number of NFTs in the pool.""" + nftBalance: Int @deprecated(reason: "nftBalance is changing from Int to String - use nftBalanceV2 instead.") + """The current number of NFTs in the pool.""" + nftBalanceV2: String! + """The total volume of the pool in the network's base token over the pool's lifetime.""" + volumeAllTimeNBT: String! + """The current price at which the pool is willing to sell an NFT in the pool's liquidity token. Only applicable for `SELL` and `BUY_AND_SELL` pool types.""" + floorT: String + """The current price at which the pool is willing to buy an NFT in the pool's liquidity token. Only applicable for `BUY` and `BUY_AND_SELL` pool types.""" + offerT: String + """The instantaneous price for selling 1 NFT to the pool in the pool's liquidity token.""" + spotPriceT: String! + """The current pool liquidity in the pool's liquidity token.""" + balanceT: String! + """The total volume of the pool in the pool's liquidity token over the pool's lifetime.""" + volumeAllTimeT: String! + """The total number of NFTs bought and sold over the pool's lifetime.""" + nftVolumeAllTime: Int! @deprecated(reason: "nftVolumeAllTime is changing from Int to String - use nftVolumeAllTimeV2 instead.") + """The total number of NFTs bought and sold over the pool's lifetime.""" + nftVolumeAllTimeV2: String! + """The list of NFT assets in the pool.""" + nftAssets: [NftAsset] + """The type of NFT in the pool.""" + poolNftType: PoolNftType + """The list of royalties for the pool. Only applicable for `SUDOSWAP_V2` pools.""" + royalties: [NftPoolRoyalty] + """The property checker contract address for the pool.""" + propertyChecker: String + """The NFT pool contract version. Can be `SUDOSWAP_V1` or `SUDOSWAP_V2`.""" + version: NftPoolContractVersion + """For ERC1155 pools, the list of NFT token IDs that are accepted by the pool.""" + acceptedNftTokenIds: [String] +} + +"""Response returned by `getNftPoolEvents`.""" +type NftPoolEventsResponse { + """A list of transactions for an NFT pool.""" + items: [NftPoolEvent] + """A cursor for use in pagination.""" + cursor: String +} + +"""Response returned by `getNftPoolCollectionsByExchange`.""" +type GetNftPoolCollectionsResponse { + """A list of NFT collections.""" + items: [NftPoolCollectionResponse] + """A cursor for use in pagination.""" + cursor: String +} + +"""Response returned by `getNftPoolsByCollectionAndExchange` and `getNftPoolsByOwner`.""" +type GetNftPoolsResponse { + """A list of NFT pools.""" + items: [NftPoolResponse]! + """A cursor for use in pagination.""" + cursor: String +} + +"""Stats for an NFT pool.""" +type NftPoolStatsResponse { + """The contract address of the NFT AMM marketplace.""" + exchangeAddress: String! + """The network ID the NFT collection is deployed on.""" + networkId: Int! + """The contract address of the NFT collection.""" + collectionAddress: String! + """The unix timestamp for the start of the time frame.""" + startTime: Int! + """The unix timestamp for the end of the time frame.""" + endTime: Int! + """The contract address of the NFT pool.""" + poolAddress: String + """The total number of NFTs bought and sold over the time frame.""" + nftVolumeV2: String + """The total number of NFTs bought over the time frame.""" + nftsBoughtV2: String + """The total number of NFTs sold over the time frame.""" + nftsSoldV2: String + """The number of NFTs in the pool at the start of the time frame.""" + openNftBalanceV2: String + """The number of NFTs in the pool at the end of the time frame.""" + closeNftBalanceV2: String + """The total volume of the pool in the network's base token over the time frame.""" + volumeNBT: String + """The total buy volume of the pool in the network's base token over the time frame.""" + revenueNBT: String + """The total sell volume of the pool in the network's base token over the time frame.""" + expenseNBT: String + """The sum of pool fees generated by the pool in the network's base token over the time frame.""" + poolFeesNBT: String + """The sum of protocol fees generated by the pool in the network's base token over the time frame.""" + protocolFeesNBT: String + """The lowest price at which the pool was willing to sell an NFT in the network's base token over the time frame.""" + lowFloorNBT: String + """The highest price at which the pool was willing to sell an NFT in the network's base token over the time frame.""" + highFloorNBT: String + """The lowest price at which the pool was willing to buy an NFT in the network's base token over the time frame.""" + lowOfferNBT: String + """The highest price at which the pool was willing to buy an NFT in the network's base token over the time frame.""" + highOfferNBT: String + """The pool liquidity in the network's base token at the start of the time frame.""" + openBalanceNBT: String + """The pool liquidity in the network's base token at the end of the time frame.""" + closeBalanceNBT: String +} + +"""Response returned by `getNftEvents`.""" +type NftEventsConnection { + """A list of transactions for an NFT collection.""" + items: [NftEvent] + """A cursor for use in pagination.""" + cursor: String +} + +"""An item that was either offered or received as part of an NFT trade.""" +union NftEventTradeItem = NftEventNftTradeItem | NftEventTokenTradeItem + +"""The type of item involved in the trade.""" +enum NftEventTradeItemType { + NFT + TOKEN +} + +"""The direction of the nft sale event.""" +enum NftEventOrderDirection { + BUY + SELL + OFFER_ACCEPTED +} + +"""Fields that are common in all items offered or received as part of an nft trade.""" +interface NftEventTradeItemBase { + """The contract address for the item.""" + address: String! + """The number of items transferred.""" + amount: String + """The recipient of the items.""" + recipient: String + """The type of item involved in the trade. (NFT or TOKEN)""" + type: NftEventTradeItemType! +} + +"""Stat and change for a string based fillsource amount.""" +type NftCollectionFillsourceStringStat { + """The marketplace that filled the NFT order volume. (ex. OPENSEA, BLUR, etc.)""" + fillsource: String! + """The amount of the stat traded in the current time frame.""" + amount: String! + """The change in fillsource volume between the previous and current time frame.""" + change: Float +} + +"""Stat and change for a string based fillsource amount.""" +type NftCollectionFillsourceNumberStat { + """The marketplace that filled the NFT order volume. (ex. OPENSEA, BLUR, etc.)""" + fillsource: String! + """The amount of the stat traded in the current time frame.""" + amount: Float! + """The change in fillsource volume between the previous and current time frame.""" + change: Float +} + +"""Response returned by `filterNftCollections`.""" +type NftCollectionFilterConnection { + """The list of NFT collections matching the filter parameters.""" + results: [NftCollectionFilterResult] + """The number of NFT collections returned.""" + count: Int + """Where in the list the server started when returning items.""" + offset: Int +} + +"""Response returned by `filterNftPoolCollections`.""" +type NftPoolCollectionFilterConnection { + """The list of NFT collections matching the filter parameters.""" + results: [NftPoolCollectionFilterResult] + """The number of NFT collections returned.""" + count: Int + """Where in the list the server started when returning items.""" + page: Int +} + +"""Response returned by `filterNftPools`.""" +type NftPoolFilterConnection { + """The list of NFT pools matching the filter parameters.""" + results: [NftPoolFilterResult] + """The number of NFT pools returned.""" + count: Int + """Where in the list the server started when returning items.""" + page: Int +} + +"""An NFT collection matching a set of filter parameters.""" +type NftCollectionFilterResult { + """The ID of the NFT collection (`address`:`networkId`).""" + id: String + """The contract address of the NFT collection.""" + address: String + """The marketplace address or `all`. Can be used to get marketplace-specific metrics.""" + grouping: String + """The network ID the NFT collection is deployed on.""" + networkId: Int + """The name of the NFT collection.""" + name: String + """The symbol of the NFT collection.""" + symbol: String + """The unix timestamp for the last event.""" + lastEventTimestamp: Int + """The token standard. Can be a variation of `ERC-721` or `ERC-1155`.""" + ercType: String + """The image URL for the collection or one of the assets within the collection.""" + imageUrl: String + """The total supply of the NFT collection.""" + totalSupply: String + """The unix timestamp indicating the last time the data was updated. Updates daily.""" + timestamp: Int + """Stats for the past hour.""" + stats1h: NftStatsWindowWithChange + """Stats for the past 4 hours.""" + stats4h: NftStatsWindowWithChange + """Stats for the past 12 hours.""" + stats12h: NftStatsWindowWithChange + """Stats for the past 24 hours.""" + stats24h: NftStatsWindowWithChange +} + +"""An NFT pool collection.""" +type NftPoolCollectionFilterResult { + """The ID of the NFT collection (`collectionAddress`:`exchangeAddress`:`networkId`).""" + id: String! + """The unix timestamp indicating the last time the data was updated. Updates every 2 hours.""" + timestamp: Int + """The name of the NFT collection.""" + name: String + """The symbol for the NFT collection.""" + symbol: String + """The contract address of the NFT AMM marketplace.""" + exchangeAddress: String + """The contract address of the NFT collection.""" + collectionAddress: String + """The network ID the NFT collection is deployed on.""" + networkId: Int + """The token standard. Can be a variation of `ERC-721` or `ERC-1155`.""" + ercType: String + """The image URL for the collection or one of the assets within the collection.""" + imageUrl: String + """The number of NFTs in all of the collection's pools.""" + nftBalance: Int @deprecated(reason: "nftBalance is changing from Int to String - use nftBalanceV2 instead.") + """The number of NFTs in all of the collection's pools.""" + nftBalanceV2: String + """The total liquidity of the collection in the network's base token.""" + balanceNBT: String + """The lowest price at which any of the collection's pools are willing to sell an NFT in the network's base token.""" + floorNBT: String + """The highest price at which any of the collection's pools are willing to buy an NFT in the network's base token.""" + offerNBT: String + """The total liquidity of the collection in USD.""" + balanceUSD: String + """The lowest price at which any of the collection's pools are willing to sell an NFT in USD.""" + floorUSD: String + """The highest price at which any of the collection's pools are willing to buy an NFT in USD.""" + offerUSD: String + """The total supply of the collection.""" + totalSupply: Int @deprecated(reason: "totalSupply is changing from Int to String - use totalSupplyV2 instead.") + totalSupplyV2: String + """The number of NFTs sold in any of the collection's pools over the collection's lifetime.""" + nftsSoldAll: Int @deprecated(reason: "nftsSoldAll is changing from Int to String - use nftsSoldAllV2 instead.") + """The number of NFTs sold in any of the collection's pools over the collection's lifetime.""" + nftsSoldAllV2: String + """The number of NFTs bought in any of the collection's pools over the collection's lifetime.""" + nftsBoughtAll: Int @deprecated(reason: "nftsBoughtAll is changing from Int to String - use nftsBoughtAllV2 instead.") + """The number of NFTs bought in any of the collection's pools over the collection's lifetime.""" + nftsBoughtAllV2: String + """The number of NFTs bought or sold in any of the collection's pools over the collection's lifetime.""" + nftVolumeAll: Int @deprecated(reason: "nftVolumeAll is changing from Int to String - use nftVolumeAllV2 instead.") + """The number of NFTs bought or sold in any of the collection's pools over the collection's lifetime.""" + nftVolumeAllV2: String + """The total volume of the collection in the network's base token over the collection's lifetime.""" + volumeNBTAll: String + """The total buy volume of the collection in the network's base token over the collection's lifetime.""" + revenueNBTAll: String + """The total sell volume of the collection in the network's base token over the collection's lifetime.""" + expenseNBTAll: String + """The highest sale price within the collection in the network's base token in the collection's lifetime.""" + highPriceNBTAll: String + """The lowest sale price within the collection in the network's base token in the collection's lifetime.""" + lowPriceNBTAll: String + """The sum of pool fees generated by the collection in the network's base token over the collection's lifetime.""" + poolFeesNBTAll: String + """The sum of protocol fees generated by the collection in the network's base token over the collection's lifetime.""" + protocolFeesNBTAll: String + """The total volume of the collection in USD over the collection's lifetime.""" + volumeUSDAll: String + """The total buy volume of the collection in USD over the collection's lifetime.""" + revenueUSDAll: String + """The total sell volume of the collection in USD over the collection's lifetime.""" + expenseUSDAll: String + """The highest sale price within the collection in USD in the collection's lifetime.""" + highPriceUSDAll: String + """The lowest sale price within the collection in USD in the collection's lifetime.""" + lowPriceUSDAll: String + """The sum of pool fees generated by the collection in USD over the collection's lifetime.""" + poolFeesUSDAll: String + """The sum of protocol fees generated by the collection in USD over the collection's lifetime.""" + protocolFeesUSDAll: String + """The number of NFTs sold in any of the collection's pools over the past 24 hours.""" + nftsSold24: Int @deprecated(reason: "nftsSold24 is changing from Int to String - use nftsSold24V2 instead.") + """The number of NFTs sold in any of the collection's pools over the past 24 hours.""" + nftsSold24V2: String + """The number of NFTs bought in any of the collection's pools over the past 24 hours.""" + nftsBought24: Int @deprecated(reason: "nftsBought24 is changing from Int to String - use nftsBought24V2 instead.") + """The number of NFTs bought in any of the collection's pools over the past 24 hours.""" + nftsBought24V2: String + """The number of NFTs bought and sold in any of the collection's pools over the past 24 hours.""" + nftVolume24: Int @deprecated(reason: "nftVolume24 is changing from Int to String - use nftVolume24V2 instead.") + """The number of NFTs bought and sold in any of the collection's pools over the past 24 hours.""" + nftVolume24V2: String + """The total volume of the collection in the network's base token over the past 24 hours.""" + volumeNBT24: String + """The total buy volume of the collection in the network's base token over the past 24 hours.""" + revenueNBT24: String + """The total sell volume of the collection in the network's base token over the past 24 hours.""" + expenseNBT24: String + """The highest sale price within the collection in the network's base token in the past 24 hours.""" + highPriceNBT24: String + """The lowest sale price within the collection in the network's base token in the past 24 hours.""" + lowPriceNBT24: String + """The sum of pool fees generated by the collection in the network's base token over the past 24 hours.""" + poolFeesNBT24: String + """The sum of protocol fees generated by the collection in the network's base token over the past 24 hours.""" + protocolFeesNBT24: String + """The total volume of the collection in USD over the past 24 hours.""" + volumeUSD24: String + """The total buy volume of the collection in USD over the past 24 hours.""" + revenueUSD24: String + """The total sell volume of the collection in USD over the past 24 hours.""" + expenseUSD24: String + """The highest sale price within the collection in USD in the past 24 hours.""" + highPriceUSD24: String + """The lowest sale price within the collection in USD in the past 24 hours.""" + lowPriceUSD24: String + """The sum of pool fees generated by the collection in USD over the past 24 hours.""" + poolFeesUSD24: String + """The sum of protocol fees generated by the collection in USD over the past 24 hours.""" + protocolFeesUSD24: String +} + +"""An NFT collection in an NFT pool.""" +type NftPoolCollectionResponse { + """The ID of the NFT collection (`collectionAddress`:`networkId`).""" + collectionId: String! + """The contract address of the NFT collection.""" + collectionAddress: String! + """The symbol of the NFT collection.""" + collectionSymbol: String! + """The ID of the exchange (`exchangeAddress`:`networkId`).""" + exchangeId: String! + """The contract address of the NFT AMM marketplace.""" + exchangeAddress: String! + """The name of the NFT collection.""" + name: String + """An image associated with the NFT collection.""" + image: String + """The network ID the NFT collection is deployed on.""" + networkId: Int! + """The lowest price at which any of the NFT collection's pools are willing to sell an NFT in the network's base token.""" + floorNBT: String + """The highest price at which any of the NFT collection's pools are willing to buy an NFT in the network's base token.""" + offerNBT: String + """The total liquidity of the collection in the network's base token.""" + balanceNBT: String! + """The current number of NFTs in all the NFT collection's pools.""" + nftBalance: Int! @deprecated(reason: "nftBalance is changing from Int to String - use nftBalanceV2 instead.") + """The current number of NFTs in all the NFT collection's pools.""" + nftBalanceV2: String! + """The total volume of the collection in the network's base token over the collection's lifetime.""" + volumeAllTimeNBT: String + """The total volume of the collection in USD over the collection's lifetime.""" + volumeAllTimeUSD: String + """The total number of NFTs bought and sold over the collection's lifetime.""" + nftVolumeAllTime: Int @deprecated(reason: "nftVolumeAllTime is changing from Int to String - use nftVolumeAllTimeV2 instead.") + """The total number of NFTs bought and sold over the collection's lifetime.""" + nftVolumeAllTimeV2: String + """The media for one of the assets within the NFT collection.""" + media: NftAssetMedia @deprecated(reason: "Use `image` from `NftContract` instead.") + """The sum of protocol fees generated by the collection in the network's base token over the collection's lifetime.""" + protocolFeesNBTAll: String + """The sum of protocol fees generated by the collection in USD over the collection's lifetime.""" + protocolFeesUSDAll: String + """The sum of pool fees generated by the collection in the network's base token over the collection's lifetime.""" + poolFeesNBTAll: String + """The sum of pool fees generated by the collection in USD over the collection's lifetime.""" + poolFeesUSDAll: String + """As estimated sum in the network's base token of the collection's royalties paid to creators by pool swaps over the collection's lifetime.""" + royaltiesNBTAllEstimate: String + """An estimated sum in USD of the collection's royalties paid to creators by pool swaps over the collection's lifetime.""" + royaltiesUSDAllEstimate: String +} + +"""An NFT pool matching a set of filter parameters.""" +type NftPoolFilterResult { + """The ID of the NFT pool (`poolAddress`:`networkId`).""" + id: String! + """The contract address of the NFT pool.""" + poolAddress: String! + """The unix timestamp indicating the last time the data was updated. Updates every 2 hours.""" + timestamp: Int! + """The contract address of the NFT collection.""" + collectionAddress: String! + """The contract address of the NFT AMM marketplace.""" + exchangeAddress: String! + """The name of the NFT collection.""" + collectionName: String! + """The symbol of the NFT collection.""" + collectionSymbol: String! + """The network ID the NFT collection is deployed on.""" + networkId: Int! + """The wallet address that will receive the tokens or NFT sent to the pair during swaps.""" + assetRecipientAddress: String + """The contract address of the bonding curve.""" + bondingCurveAddress: String! + """The delta used in the pool's bonding curve.""" + delta: String! + """The fee amount for the pool.""" + feeAmount: String! + """The type of liquidity pool.""" + poolType: NftPoolType! + """The contract address of the liquidity token of the pool.""" + tokenAddress: String! + """The wallet address of the pool owner.""" + ownerAddress: String! + """The pool variant. Can be `ERC20` or `NATIVE`.""" + poolVariant: GraphQlNftPoolVariant! + """The list of royalties for the pool. Only applicable for `SUDOSWAP_V2` pools.""" + royalties: [NftPoolRoyalty] + """The property checker contract address for the pool.""" + propertyChecker: String + """The NFT pool contract version. Can be `SUDOSWAP_V1` or `SUDOSWAP_V2`.""" + version: NftPoolContractVersion + """The type of NFT in the pool.""" + poolNftType: PoolNftType + """For ERC1155 pools, the list of NFT token IDs that are accepted by the pool.""" + acceptedNftTokenIds: [String] + """The current number of NFTs in the pool.""" + nftBalance: Int @deprecated(reason: "nftBalance is changing from Int to String - use nftBalanceV2 instead.") + """The current number of NFTs in the pool.""" + nftBalanceV2: String + """The current pool liquidity in the network's base token.""" + balanceNBT: String + """The current price at which the pool is willing to sell an NFT.""" + sellNBT: String + """The current price at which the pool is willing to buy an NFT in the network's base token.""" + offerNBT: String + """The current spot price for the pool in the network's base token.""" + spotNBT: String + """The current value of the collection in the pool's liquidity token.""" + balanceT: String + """The current price at which the pool is willing to sell an NFT in the network's base token.""" + sellT: String + """The current price at which the pool is willing to buy an NFT in the pool's liquidity token.""" + offerT: String + """The current spot price for the pool in the pool's liquidity token.""" + spotT: String + """The current pool liquidity in USD.""" + balanceUSD: String + """The current price at which the pool is willing to sell an NFT in USD.""" + sellUSD: String + """The current price at which the pool is willing to buy an NFT in USD.""" + offerUSD: String + """The total number of NFTs sold over the pool's lifetime.""" + nftsSoldAll: Int @deprecated(reason: "nftsSoldAll is changing from Int to String - use nftsSoldAllV2 instead.") + """The total number of NFTs sold over the pool's lifetime.""" + nftsSoldAllV2: String + """The total number of NFTs bought over the pool's lifetime.""" + nftsBoughtAll: Int @deprecated(reason: "nftsBoughtAll is changing from Int to String - use nftsBoughtAllV2 instead.") + """The total number of NFTs bought over the pool's lifetime.""" + nftsBoughtAllV2: String + """The total number of NFTs bought and sold over the pool's lifetime.""" + nftVolumeAll: Int @deprecated(reason: "nftVolumeAll is changing from Int to String - use nftVolumeAllV2 instead.") + """The total number of NFTs bought and sold over the pool's lifetime.""" + nftVolumeAllV2: String + """The total volume of the pool in the network's base token over the pool's lifetime.""" + volumeNBTAll: String + """The total buy volume of the pool in the network's base token over the pool's lifetime.""" + revenueNBTAll: String + """The total sell volume of the pool in the network's base token over the pool's lifetime.""" + expenseNBTAll: String + """The sum of pool fees generated by the pool in the network's base token over the pool's lifetime.""" + poolFeesNBTAll: String + """The sum of protocol fees generated by the pool in the network's base token over the pool's lifetime.""" + protocolFeesNBTAll: String + """The total volume of the pool in the pool's liquidity token over the pool's lifetime.""" + volumeTAll: String + """The total buy volume of the pool in the pool's liquidity token over the pool's lifetime.""" + revenueTAll: String + """The total sell volume of the pool in the pool's liquidity token over the pool's lifetime.""" + expenseTAll: String + """The sum of pool fees generated by the pool in the pool's liquidity token over the pool's lifetime.""" + poolFeesTAll: String + """The sum of protocol fees generated by the pool in the pool's liquidity token over the pool's lifetime.""" + protocolFeesTAll: String + """The total volume of the pool in USD over the pool's lifetime.""" + volumeUSDAll: String + """The total buy volume of the pool in USD over the pool's lifetime.""" + revenueUSDAll: String + """The total sell volume of the pool in USD over the pool's lifetime.""" + expenseUSDAll: String + """The sum of pool fees generated by the pool in USD over the pool's lifetime.""" + poolFeesUSDAll: String + """The sum of protocol fees generated by the pool in USD over the pool's lifetime.""" + protocolFeesUSDAll: String + """The total number of NFTs sold by the pool over the past 24 hours.""" + nftsSold24: Int @deprecated(reason: "nftsSold24 is changing from Int to String - use nftsSold24V2 instead.") + """The total number of NFTs sold by the pool over the past 24 hours.""" + nftsSold24V2: String + """The total number of NFTs bought by the pool over the past 24 hours.""" + nftsBought24: Int @deprecated(reason: "nftsBought24 is changing from Int to String - use nftsBought24V2 instead.") + """The total number of NFTs bought by the pool over the past 24 hours.""" + nftsBought24V2: String + """The total number of NFTs bought and sold over the past 24 hours.""" + nftVolume24: Int @deprecated(reason: "nftVolume24 is changing from Int to String - use nftVolume24V2 instead.") + """The total number of NFTs bought and sold over the past 24 hours.""" + nftVolume24V2: String + """The total volume of the pool in the network's base token over the past 24 hours.""" + volumeNBT24: String + """The total buy volume of the pool in the network's base token over the past 24 hours.""" + revenueNBT24: String + """The total sell volume of the pool in the network's base token over the past 24 hours.""" + expenseNBT24: String + """The sum of pool fees generated by the pool in the network's base token over the past 24 hours.""" + poolFeesNBT24: String + """The sum of protocol fees generated by the pool in the network's base token over the past 24 hours.""" + protocolFeesNBT24: String + """The total volume of the pool in the pool's liquidity token over the past 24 hours.""" + volumeT24: String + """The total buy volume of the pool in the pool's liquidity token over the past 24 hours.""" + revenueT24: String + """The total sell volume of the pool in the pool's liquidity token over the past 24 hours.""" + expenseT24: String + """The sum of pool fees generated by the pool in the pool's liquidity token over the past 24 hours.""" + poolFeesT24: String + """The sum of protocol fees generated by the pool in the pool's liquidity token over the past 24 hours.""" + protocolFeesT24: String + """The total volume of the pool in USD over the past 24 hours.""" + volumeUSD24: String + """The total buy volume of the pool in USD over the past 24 hours.""" + revenueUSD24: String + """The total sell volume of the pool in USD over the past 24 hours.""" + expenseUSD24: String + """The sum of pool fees generated by the pool in USD over the past 24 hours.""" + poolFeesUSD24: String + """The sum of protocol fees generated by the pool in USD over the past 24 hours.""" + protocolFeesUSD24: String + """The list of NFT assets in the pool.""" + nftAssets: [NftAsset] +} + +"""An NFT pool transaction.""" +type NftPoolEvent { + """The ID of the NFT pool (`poolAddress`:`networkId`). For example, `0xdbea289dcc10eed8431e78753414a3d81b8e7201:1`.""" + id: String! + """The contract address of the NFT pool.""" + poolAddress: String! + """The network ID the NFT collection is deployed on.""" + networkId: Int! + """The contract address of the NFT collection.""" + collectionAddress: String! + """The ID of the NFT collection (`collectionAddress`:`networkId`).""" + collectionId: String! + """The contract address of the NFT AMM marketplace.""" + exchangeAddress: String! + """The contract address of the liquidity token of the pool (usually WETH).""" + tokenAddress: String! + """The block number for the transaction.""" + blockNumber: Int! + """The index of the log in the block.""" + logIndex: Int! + """The index of the transaction within the block.""" + transactionIndex: Int! + """The hash of the block where the transaction occurred.""" + blockHash: String! + """The unique hash for the transaction.""" + transactionHash: String! + """The unix timestamp for the transaction.""" + timestamp: Int! + """The wallet address that transacted.""" + maker: String! + """The type of liquidity pool.""" + poolType: NftPoolType! + """The event type of the transaction.""" + eventType: NftPoolEventType! + """The event-specific data for the transaction.""" + data: NftPoolEventData! +} + +"""NFT stats over a time frame.""" +type NftStatsWindowWithChange { + """The unix timestamp for the start of the window.""" + startTime: Int + """The unix timestamp for the end of the window.""" + endTime: Int + """The currency stats in USD, such as volume.""" + usd: NftCollectionCurrencyStats + """The currency stats in the network's base token, such as volume.""" + networkBaseToken: NftCollectionCurrencyStats + """The numerical stats, such as number of sales.""" + nonCurrency: NftCollectionNonCurrencyStats +} + +"""Number metrics for NFT fillsource stats.""" +type NftFillsourceStatsNumberMetrics { + """Marketplace that filled the NFT order volume. (ex. OPENSEA, BLUR, etc.)""" + fillsource: String + """The total value for the current window.""" + current: Float + """The total value for the previous window.""" + previous: Float + """The percent change between the `current` and `previous`.""" + change: Float +} + +"""String metrics for NFT stats.""" +type NftFillsourceStatsStringMetrics { + """Marketplace that filled the NFT order volume. (ex. OPENSEA, BLUR, etc.)""" + fillsource: String + """The total value for the current window.""" + current: String + """The total value for the previous window.""" + previous: String + """The percent change between the `current` and `previous`.""" + change: Float +} + +"""Price stats for an NFT collection over a time frame. Either in USD or the network's base token.""" +type NftCollectionCurrencyStats { + """The volume over the time frame.""" + volume: NftStatsStringMetrics + """The volume partitioned by fillsource over the time frame""" + volumeByFillsource: [NftFillsourceStatsStringMetrics] + """The percentages of total volume partitioned by fillsource over the time frame""" + volumePercentByFillsource: [NftFillsourceStatsNumberMetrics] + """The average sale price in the time frame.""" + average: NftStatsStringMetrics + """The opening price for the time frame.""" + open: NftStatsStringMetrics + """The closing price for the time frame.""" + close: NftStatsStringMetrics + """The lowest sale price in the time frame.""" + lowestSale: NftStatsStringMetrics + """The highest sale price in the time frame.""" + highestSale: NftStatsStringMetrics +} + +"""Numerical stats for an NFT collection over a time frame.""" +type NftCollectionNonCurrencyStats { + """The number of mints over the time frame.""" + mints: NftStatsNumberMetrics + """The number of sales over the time frame.""" + sales: NftStatsNumberMetrics + """The number of tokens sold over the time frame.""" + tokensSold: NftStatsStringMetrics + """The number of transfers over the time frame.""" + transfers: NftStatsNumberMetrics + """The number of unique buyers over the time frame.""" + uniqueBuyers: NftStatsNumberMetrics + """The number of unique sellers over the time frame.""" + uniqueSellers: NftStatsNumberMetrics + """The number of unique wallets (buyers or sellers) over the time frame.""" + uniqueSalesWallets: NftStatsNumberMetrics + """The number of unique minters over the time frame.""" + uniqueMinters: NftStatsNumberMetrics +} + +"""String metrics for NFT stats.""" +type NftStatsStringMetrics { + """The total value for the current window.""" + current: String + """The total value for the previous window.""" + previous: String + """The percent change between the `current` and `previous`.""" + change: Float +} + +"""Number metrics for NFT stats.""" +type NftStatsNumberMetrics { + """The total value for the current window.""" + current: Float + """The total value for the previous window.""" + previous: Float + """The percent change between the `current` and `previous`.""" + change: Float +} + +"""A numeric range filter with optional upper and lower bounds.""" +input NumberFilter { + """Greater than or equal to.""" + gte: Float + """Greater than.""" + gt: Float + """Less than or equal to.""" + lte: Float + """Less than.""" + lt: Float +} + +"""Filter for NFT stats.""" +input StatsFilter { + """The total value for the current window.""" + current: NumberFilter + """The total value for the previous window.""" + previous: NumberFilter + """The percent change between the `current` and `previous`.""" + change: NumberFilter +} + +"""Filter for fillsource based NFT stats.""" +input FillsourceStatsFilter { + """The fillsource to target for the current window.""" + fillsource: String! + """The total value for the current window.""" + current: NumberFilter + """The total value for the previous window.""" + previous: NumberFilter + """The percent change between the `current` and `previous`.""" + change: NumberFilter +} + +"""Currency stats.""" +input statsCurrency { + """The volume over the time frame.""" + volume: StatsFilter + """The volume by fillsource over the time frame.""" + volumeByFillsource: [FillsourceStatsFilter] + """The volume percentage by fillsource over the time frame.""" + volumePercentByFillsource: [FillsourceStatsFilter] + """The average sale price in the time frame.""" + average: StatsFilter + """The opening price for the time frame.""" + open: StatsFilter + """The closing price for the time frame.""" + close: StatsFilter + """The lowest sale price in the time frame.""" + lowestSale: StatsFilter + """The highest sale price in the time frame.""" + highestSale: StatsFilter +} + +"""Numerical stats for an NFT collection over a time frame.""" +input statsNonCurrency { + """The number of mints over the time frame.""" + mints: StatsFilter + """The number of sales over the time frame.""" + sales: StatsFilter + """The number of tokens sold over the time frame.""" + tokensSold: StatsFilter + """The number of transfers over the time frame.""" + transfers: StatsFilter + """The number of unique buyers over the time frame.""" + uniqueBuyers: StatsFilter + """The number of unique sellers over the time frame.""" + uniqueSellers: StatsFilter + """The number of unique wallets (buyers or sellers) over the time frame.""" + uniqueSalesWallets: StatsFilter + """The number of unique minters over the time frame.""" + uniqueMinters: StatsFilter +} + +"""NFT stats for a given time frame.""" +input NftStatsWindowFilter { + """The currency stats in USD, such as volume.""" + usd: statsCurrency + """The currency stats in the network's base token, such as volume.""" + networkBaseToken: statsCurrency + """The numerical stats, such as number of sales.""" + nonCurrency: statsNonCurrency +} + +"""Input filters for `filterNftCollections`.""" +input NftCollectionFilters { + """The total supply of the NFT collection.""" + totalSupply: NumberFilter + """The unix timestamp for the last event.""" + lastEventTimestamp: NumberFilter + """The list of token standards to filter by.""" + ercType: [NftContractErcType] + """The list of network IDs to filter by.""" + network: [Int] + """Stats for the past hour.""" + stats1h: NftStatsWindowFilter + """Stats for the past 4 hours.""" + stats4h: NftStatsWindowFilter + """Stats for the past 12 hours.""" + stats12h: NftStatsWindowFilter + """Stats for the past 24 hours.""" + stats24h: NftStatsWindowFilter +} + +"""Input type of `NftCollectionRanking`.""" +input NftCollectionRanking { + """The attribute to rank NFT collections by.""" + attribute: NftCollectionRankingAttribute + """The direction to apply to the ranking attribute.""" + direction: RankingDirection +} + +"""Input type of `NftPoolCollectionRanking`.""" +input NftPoolCollectionRanking { + """The attribute to rank NFT collections by.""" + attribute: NftPoolCollectionRankingAttribute + """The direction to apply to the ranking attribute.""" + direction: RankingDirection +} + +"""Input type of `NftPoolCollectionFilters`.""" +input NftPoolCollectionFilters { + """The number of NFTs in all of the collection's pools.""" + nftBalance: NumberFilter + """The total liquidity of the collection in the network's base token.""" + balanceNBT: NumberFilter + """The lowest price at which any of the collection's pools are willing to sell an NFT in the network's base token.""" + floorNBT: NumberFilter + """The highest price at which any of the collection's pools are willing to buy an NFT in the network's base token.""" + offerNBT: NumberFilter + """The total liquidity of the collection in USD.""" + balanceUSD: NumberFilter + """The lowest price at which any of the collection's pools are willing to sell an NFT in USD.""" + floorUSD: NumberFilter + """The highest price at which any of the collection's pools are willing to buy an NFT in USD.""" + offerUSD: NumberFilter + """The total supply of the collection.""" + totalSupply: NumberFilter + """The number of NFTs sold in any of the collection's pools over the collection's lifetime.""" + nftsSoldAll: NumberFilter + """The number of NFTs bought in any of the collection's pools over the collection's lifetime.""" + nftsBoughtAll: NumberFilter + """The number of NFTs bought or sold in any of the collection's pools over the collection's lifetime.""" + nftVolumeAll: NumberFilter + """The total volume of the collection in the network's base token over the collection's lifetime.""" + volumeNBTAll: NumberFilter + """The total buy volume of the collection in the network's base token over the collection's lifetime.""" + revenueNBTAll: NumberFilter + """The total sell volume of the collection in the network's base token over the collection's lifetime.""" + expenseNBTAll: NumberFilter + """The highest sale price within the collection in the network's base token in the collection's lifetime.""" + highPriceNBTAll: NumberFilter + """The lowest sale price within the collection in the network's base token in the collection's lifetime.""" + lowPriceNBTAll: NumberFilter + """The sum of pool fees generated by the collection in the network's base token over the collection's lifetime.""" + poolFeesNBTAll: NumberFilter + """The sum of protocol fees generated by the collection in the network's base token over the collection's lifetime.""" + protocolFeesNBTAll: NumberFilter + """The total volume of the collection in USD over the collection's lifetime.""" + volumeUSDAll: NumberFilter + """The total buy volume of the collection in USD over the collection's lifetime.""" + revenueUSDAll: NumberFilter + """The total sell volume of the collection in USD over the collection's lifetime.""" + expenseUSDAll: NumberFilter + """The highest sale price within the collection in USD in the collection's lifetime.""" + highPriceUSDAll: NumberFilter + """The lowest sale price within the collection in USD in the collection's lifetime.""" + lowPriceUSDAll: NumberFilter + """The sum of pool fees generated by the collection in USD over the collection's lifetime.""" + poolFeesUSDAll: NumberFilter + """The sum of protocol fees generated by the collection in USD over the collection's lifetime.""" + protocolFeesUSDAll: NumberFilter + """The number of NFTs sold in any of the collection's pools over the past 24 hours.""" + nftsSold24: NumberFilter + """The number of NFTs bought in any of the collection's pools over the past 24 hours.""" + nftsBought24: NumberFilter + """The number of NFTs bought in any of the collection's pools over the past 24 hours.""" + nftVolume24: NumberFilter + """The total volume of the collection in the network's base token over the past 24 hours.""" + volumeNBT24: NumberFilter + """The total buy volume of the collection in the network's base token over the past 24 hours.""" + revenueNBT24: NumberFilter + """The total sell volume of the collection in the network's base token over the past 24 hours.""" + expenseNBT24: NumberFilter + """The highest sale price within the collection in the network's base token in the past 24 hours.""" + highPriceNBT24: NumberFilter + """The lowest sale price within the collection in the network's base token in the past 24 hours.""" + lowPriceNBT24: NumberFilter + """The sum of pool fees generated by the collection in the network's base token over the past 24 hours.""" + poolFeesNBT24: NumberFilter + """The sum of protocol fees generated by the collection in the network's base token over the past 24 hours.""" + protocolFeesNBT24: NumberFilter + """The total volume of the collection in USD over the past 24 hours.""" + volumeUSD24: NumberFilter + """The total buy volume of the collection in USD over the past 24 hours.""" + revenueUSD24: NumberFilter + """The total sell volume of the collection in USD over the past 24 hours.""" + expenseUSD24: NumberFilter + """The highest sale price within the collection in USD in the past 24 hours.""" + highPriceUSD24: NumberFilter + """The lowest sale price within the collection in USD in the past 24 hours.""" + lowPriceUSD24: NumberFilter + """The sum of pool fees generated by the collection in USD over the past 24 hours.""" + poolFeesUSD24: NumberFilter + """The sum of protocol fees generated by the collection in USD over the past 24 hours.""" + protocolFeesUSD24: NumberFilter + """The list of network IDs to filter by.""" + network: [Int] + """The list of NFT AMM marketplace addresses to filter by.""" + exchange: [String] + """The list of token standards to filter by. Can be a variation of `ERC-721` or `ERC-1155`.""" + ercType: [String] +} + +"""Response returned by `searchNfts`.""" +type NftSearchResponse { + """A list of NFT collections matching a given query string.""" + items: [NftSearchResponseCollection] + """The number of additional results found.""" + hasMore: Int! +} + +"""An NFT collection matching a given query string.""" +type NftSearchResponseCollection { + """The ID of the NFT collection (`address`:`networkId`).""" + id: String! + """The contract address of the NFT collection.""" + address: String! + """The network ID the NFT collection is deployed on.""" + networkId: Int! + """The name of the NFT collection. For example, `Bored Ape Yacht Club`.""" + name: String + """The symbol of the NFT collection. For example, `BAYC`.""" + symbol: String + """The image URL for the collection or one of the assets within the collection.""" + imageUrl: String + """The trade volume in USD over the `window`.""" + volume: String! + """The change in volume between the previous and current `window`.""" + volumeChange: Float! + """The trade count over the `window`.""" + tradeCount: String! + """The change in trade count between the previous and current `window`.""" + tradeCountChange: Float! + """The lowest sale price over the `window`.""" + floor: String! + """The average sale price over the `window`.""" + average: String! + """The highest sale price over the `window`.""" + ceiling: String! + """The time frame used for calculating stats.""" + window: String! +} + +"""Input type of `NftPoolFilters`.""" +input NftPoolFilters { + """The number of NFTs in the pool.""" + nftBalance: NftPoolNumberFilter + """The pool liquidity in the network's base token.""" + balanceNBT: NftPoolNumberFilter + """The current sell price of the pool in the network's base token.""" + sellNBT: NftPoolNumberFilter + """The price at which the pool is willing to buy an NFT in the network's base token.""" + offerNBT: NftPoolNumberFilter + """The pool liquidity in USD.""" + balanceUSD: NftPoolNumberFilter + """The current sell price of the pool in USD.""" + sellUSD: NftPoolNumberFilter + """The price at which the pool is willing to buy an NFT in USD.""" + offerUSD: NftPoolNumberFilter + """The number of NFTs sold over the pool's lifetime.""" + nftsSoldAll: NftPoolNumberFilter + """The number of NFTs bought over the pool's lifetime.""" + nftsBoughtAll: NftPoolNumberFilter + """The number of NFTs bought or sold over the pool's lifetime.""" + nftVolumeAll: NftPoolNumberFilter + """The total volume of the pool in the network's base token over the pool's lifetime.""" + volumeNBTAll: NftPoolNumberFilter + """The total buy volume of the pool in the network's base token over the pool's lifetime.""" + revenueNBTAll: NftPoolNumberFilter + """The total sell volume of the pool in the network's base token over the pool's lifetime.""" + expenseNBTAll: NftPoolNumberFilter + """The sum of fees generated by the pool in the network's base token over the pool's lifetime.""" + poolFeesNBTAll: NftPoolNumberFilter + """The sum of protocol fees generated by the pool in the network's base token over the pool's lifetime.""" + protocolFeesNBTAll: NftPoolNumberFilter + """The total volume of the pool in USD over the pool's lifetime.""" + volumeUSDAll: NftPoolNumberFilter + """The total buy volume of the pool in USD over the pool's lifetime.""" + revenueUSDAll: NftPoolNumberFilter + """The total sell volume of the pool in USD over the pool's lifetime.""" + expenseUSDAll: NftPoolNumberFilter + """The sum of fees generated by the pool in USD over the pool's lifetime.""" + poolFeesUSDAll: NftPoolNumberFilter + """The sum of protocol fees generated by the pool in USD over the pool's lifetime.""" + protocolFeesUSDAll: NftPoolNumberFilter + """The number of NFTs sold over the past 24 hours.""" + nftsSold24: NftPoolNumberFilter + """The number of NFTs bought over the past 24 hours.""" + nftsBought24: NftPoolNumberFilter + """The number of NFTs bought or sold over the past 24 hours.""" + nftVolume24: NftPoolNumberFilter + """The total volume of the pool in the network's base token over the past 24 hours.""" + volumeNBT24: NftPoolNumberFilter + """The total buy volume of the pool in the network's base token over the past 24 hours.""" + revenueNBT24: NftPoolNumberFilter + """The total sell volume of the pool in the network's base token over the past 24 hours.""" + expenseNBT24: NftPoolNumberFilter + """The sum of fees generated by the pool in the network's base token in the past 24 hours.""" + poolFeesNBT24: NftPoolNumberFilter + """The sum of protocol fees generated by the pool in the network's base token over the past 24 hours.""" + protocolFeesNBT24: NftPoolNumberFilter + """The total volume of the pool in USD over the past 24 hours.""" + volumeUSD24: NftPoolNumberFilter + """The total buy volume of the pool in USD over the past 24 hours.""" + revenueUSD24: NftPoolNumberFilter + """The total sell volume of the pool in USD over the past 24 hours.""" + expenseUSD24: NftPoolNumberFilter + """The sum of fees generated by the pool in USD in the past 24 hours.""" + poolFeesUSD24: NftPoolNumberFilter + """The sum of protocol fees generated by the pool in USD over the past 24 hours.""" + protocolFeesUSD24: NftPoolNumberFilter + """The list of network IDs to filter by.""" + network: [Int] + """The list of NFT AMM marketplace addresses to filter by.""" + exchangeAddress: [String] + """The contract address of the NFT collection.""" + collectionAddress: [String] + """For ERC1155 pools, the list of NFT token IDs that are accepted by the pool.""" + acceptedNftTokenIds: [String] + """The wallet address of the pool owner.""" + ownerAddress: [String] +} + +"""Response returned by `getNftCollectionMetadata`.""" +type NftCollectionMetadataResponse { + """The ID of the NFT collection (`address`:`networkId`).""" + id: String! + """Metadata for the NFT collection.""" + contract: NftContract! + """A list of stats for the NFT collection across different time frames.""" + stats: [NftCollectionWindowStats] + """The media for one of the assets within the NFT collection.""" + media: NftAssetMedia +} + +"""Stats for an NFT collection for a time frame.""" +type NftCollectionWindowStats { + """The time frame used to calculate the stats.""" + window: String! + """The price stats for the NFT collection in USD.""" + usdPriceStats: NftCollectionPriceStats! + """The price stats for the NFT collection in the network's base token.""" + networkBaseTokenPriceStats: NftCollectionPriceStats! + """The trade count over the `window`.""" + tradeCount: String! + """The change in trade count between the previous and current `window`.""" + tradeCountChange: Float! +} + +"""Price stats for an NFT collection over a time frame. Either in USD or the network's base token.""" +type NftCollectionPriceStats { + """The trade volume.""" + volume: String! + """The lowest sale price.""" + floor: String! + """The average sale price.""" + average: String! + """The highest sale price.""" + ceiling: String! + """The change in volume between the previous and current time frame.""" + volumeChange: Float + """The change in floor price between the previous and current time frame.""" + floorChange: Float + """The change in average price between the previous and current time frame.""" + averageChange: Float + """The change in ceiling price between the previous and current time frame.""" + ceilingChange: Float + """The volume partitioned by fillsource over the time frame""" + volumeByFillsource: [NftCollectionFillsourceStringStat] + """The percentages of total volume partitioned by fillsource over the time frame""" + volumePercentByFillsource: [NftCollectionFillsourceNumberStat] +} + +"""Metadata for an NFT collection.""" +type NftContract { + """The ID of the NFT collection (`address`:`networkId`).""" + id: String! + """The contract address of the NFT collection.""" + address: String! + """The network ID the NFT collection is deployed on.""" + networkId: Int! + """The token standard. Can be a variation of `ERC-721` or `ERC-1155`.""" + ercType: String! + """The name of the NFT collection.""" + name: String + """The description of the NFT collection.""" + description: String + """The symbol for the NFT collection.""" + symbol: String + """The total supply of the NFT collection.""" + totalSupply: String + """The URL for an image of the NFT collection.""" + image: String +} + +"""The contract label type.""" +enum ContractLabelType { + Scam + Verified +} + +"""The contract label sub-type.""" +enum ContractLabelSubType { + Generic + HighTax + HoneyPot + Imitator +} + +"""Metadata for a contract label.""" +type ContractLabel { + """The unix timestamp for when the contract label was created.""" + createdAt: Int! + """The contract label sub-type. Can be `Generic`, `HighTax`, `HoneyPot` or `Imitator`.""" + subType: ContractLabelSubType! + """The contract label type. Can be `Scam`.""" + type: ContractLabelType! +} + +"""Response returned by `getNftAssets`.""" +type NftAssetsConnection { + """A list of NFT assets.""" + items: [NftAsset] + """A list of errors encountered while fetching the NFT assets. Errors correspond to null values in `items` by array index.""" + itemErrors: [NftAssetError] + """A cursor for use in pagination.""" + cursor: String +} + +"""String metrics for detailed NFT stats.""" +type DetailedNftStatsStringMetrics { + """The percent change between the `currentValue` and `previousValue`.""" + change: Float + """The total value for the most recent duration.""" + currentValue: String + """The total value for the previous duration.""" + previousValue: String + """The list of aggregated values for each bucket.""" + buckets: [String]! +} + +"""Number metrics for detailed NFT stats.""" +type DetailedNftStatsNumberMetrics { + """The percent change between the `currentValue` and `previousValue`.""" + change: Float + """The total value for the most recent duration.""" + currentValue: Int + """The total value for the previous duration.""" + previousValue: Int + """The list of aggregated values for each bucket.""" + buckets: [Int]! +} + +"""The start/end timestamp for a given bucket within the window.""" +type DetailedNftStatsBucketTimestamp { + """The unix timestamp for the start of the window.""" + start: Int! + """The unix timestamp for the end of the window.""" + end: Int! +} + +"""Numerical stats for an NFT collection over a time frame.""" +type WindowedDetailedNftNonCurrencyStats { + """The number of mints over the time frame.""" + mints: DetailedNftStatsNumberMetrics + """The number of sales over the time frame.""" + sales: DetailedNftStatsNumberMetrics + """The number of transfers over the time frame.""" + transfers: DetailedNftStatsNumberMetrics + """The number of tokens sold over the time frame.""" + tokensSold: DetailedNftStatsStringMetrics + """The number of unique buyers over the time frame.""" + uniqueBuyers: DetailedNftStatsNumberMetrics + """The number of unique sellers over the time frame.""" + uniqueSellers: DetailedNftStatsNumberMetrics + """The number of unique wallets (buyers or sellers) over the time frame.""" + uniqueSalesWallets: DetailedNftStatsNumberMetrics + """The number of unique minters over the time frame.""" + uniqueMinters: DetailedNftStatsNumberMetrics +} + +"""Price stats for an NFT collection over a time frame. Either in USD or the network's base token.""" +type WindowedDetailedNftCurrencyStats { + """The volume over the time frame.""" + volume: DetailedNftStatsStringMetrics + """The average sale price in the time frame.""" + average: DetailedNftStatsStringMetrics + """The opening price for the time frame.""" + open: DetailedNftStatsStringMetrics + """The highest sale price in the time frame.""" + highestSale: DetailedNftStatsStringMetrics + """The lowest sale price in the time frame.""" + lowestSale: DetailedNftStatsStringMetrics + """The closing price for the time frame.""" + close: DetailedNftStatsStringMetrics +} + +"""Detailed NFT stats over a time frame.""" +type WindowedDetailedNftStats { + """The duration used to request detailed NFT stats.""" + duration: DetailedNftStatsDuration! + """The unix timestamp for the start of the window.""" + start: Int! + """The unix timestamp for the end of the window.""" + end: Int! + """The list of start/end timestamps broken down for each bucket within the window.""" + timestamps: [DetailedNftStatsBucketTimestamp]! + """The currency stats in USD, such as volume.""" + statsUsd: WindowedDetailedNftCurrencyStats! + """The currency stats in the network's base token, such as volume.""" + statsNetworkBaseToken: WindowedDetailedNftCurrencyStats! + """The numerical stats, such as number of buyers.""" + statsNonCurrency: WindowedDetailedNftNonCurrencyStats! +} + +"""Detailed stats for an NFT collection.""" +type DetailedNftStats { + """The contract address of the NFT collection.""" + collectionAddress: String! + """The network ID the NFT collection is deployed on.""" + networkId: Int! + """The marketplace address or `all`. Can be used to get marketplace-specific metrics.""" + grouping: String + """The breakdown of stats over an hour window.""" + stats_hour1: WindowedDetailedNftStats + """The breakdown of stats over a 4 hour window.""" + stats_hour4: WindowedDetailedNftStats + """The breakdown of stats over a 12 hour window.""" + stats_hour12: WindowedDetailedNftStats + """The breakdown of stats over a 24 hour window.""" + stats_day1: WindowedDetailedNftStats + """The breakdown of stats over a 7 day window.""" + stats_week1: WindowedDetailedNftStats + """The breakdown of stats over a 30 day window.""" + stats_day30: WindowedDetailedNftStats +} + +input NftHoldersInput { + """The address of the collection contract.""" + collectionAddress: String! + """The network ID the collection is deployed on.""" + networkId: Int! + """A cursor for use in pagination.""" + cursor: String +} + +type NftHoldersResponse { + """The list wallets for a collection.""" + items: [NftBalance!]! + """the unique count of holders for the collection.""" + count: Int! + """A cursor for use in pagination.""" + cursor: String + """Status of holder. Disabled if on unsupported network or there is insufficient holder data.""" + status: HoldersStatus! +} + +"""Wallet balance of an Nft Collection.""" +type NftBalance { + """The address of the wallet.""" + walletAddress: String! + """The ID of the collection (`collectionAddress:networkId`).""" + collectionId: String! + """The number of items held by the wallet.""" + balance: String! +} + +enum HoldersStatus { + ENABLED + DISABLED +} + +input WalletNftCollectionsInput { + """The address of the wallet.""" + walletAddress: String! + """A cursor for use in pagination.""" + cursor: String +} + +type WalletNftCollectionsResponse { + """The list of collections for a wallet.""" + items: [WalletNftCollection!]! + """A cursor for use in pagination.""" + cursor: String +} + +type WalletNftCollection { + """The address of the wallet.""" + walletAddress: String! + """The collection ID (`collectionAddress:networkId`).""" + collectionId: String! + """The number of items held by the wallet.""" + quantity: String! +} + +input WalletNftCollectionAssetsInput { + """The address of the wallet.""" + walletAddress: String! + """The collection ID (`collectionAddress:networkId`).""" + collectionId: String! + """A cursor for use in pagination.""" + cursor: String +} + +type WalletNftCollectionAssetsResponse { + """The list of nft assets for a wallet.""" + items: [WalletNftCollectionAsset]! + """The address of the wallet.""" + walletAddress: String! + """The collection ID (`collectionAddress:networkId`).""" + collectionId: String! + """A cursor for use in pagination.""" + cursor: String +} + +type WalletNftCollectionAsset { + """The id of the nft asset.""" + tokenId: String! + """The number of instances of the nft held by the wallet (Applicable to ERC1155 NFTs).""" + quantity: String! +} + +"""Input type of `getNftContracts`.""" +input NftContractInput { + """The NFT contract address.""" + address: String! + """The network ID the NFT collection is deployed on.""" + networkId: Int! +} + +"""Input type of `EventQueryTimestamp`.""" +input EventQueryTimestampInput { + """The unix timestamp for the start of the requested range.""" + from: Int! + """The unix timestamp for the end of the requested range.""" + to: Int! +} + +"""Metadata for an NFT collection.""" +type EnhancedNftContract { + """The ID of the NFT collection (`address`:`networkId`).""" + id: String! + """The contract address of the NFT collection.""" + address: String! + """The network ID the NFT collection is deployed on.""" + networkId: Int! + """The token standard. Can be a variation of `ERC-721` or `ERC-1155`.""" + ercType: String! + """The name of the NFT collection.""" + name: String + """The description of the NFT collection.""" + description: String + """The symbol of the NFT collection.""" + symbol: String + """The total supply of the NFT collection.""" + totalSupply: String + """Community gathered links for the socials of this NFT collection.""" + socialLinks: SocialLinks + """The URL for an image of the NFT collection.""" + image: String + """A list of labels for the NFT collection.""" + labels: [ContractLabel] +} + +"""Community gathered links for the socials of this contract.""" +type SocialLinks { + bitcointalk: String + blog: String + coingecko: String + coinmarketcap: String + discord: String + email: String + facebook: String + github: String + instagram: String + linkedin: String + reddit: String + slack: String + telegram: String + twitch: String + twitter: String + website: String + wechat: String + whitepaper: String + youtube: String +} + +"""Game data for a Parallel asset.""" +type ParallelAssetGameData { + """The rarity of the asset. Can be `Common`, `Uncommon`, `Rare`, `Legendary`, or `Prime`.""" + rarity: String + """The Parallel the asset belongs to.""" + parallel: String + """The energy used to play in-game.""" + cost: String + """The damage dealt when engaged in combat.""" + attack: String + """The possible damage received before being destroyed.""" + health: String + """The card type. Can be `Effect`, `Relic`, `Unit`, `Upgrade` or `Paragon`.""" + cardType: String + """The card subtype. Can be `Pirate`, `Vehicle` or `Clone`.""" + subtype: String + """The description of the card's in-game abilities.""" + functionText: String + """The description of the card's passive ability.""" + passiveAbility: String +} + +type ParallelAssetMetadata { + """The card class. Can be `Art Card`, `Asset`, `Card Back`, `FE`, `Masterpiece`, `PL`, or `SE`.""" + class: String + """The total supply of this individual asset.""" + supply: String + """The asset description, sourced off-chain. Usually equal to the asset's on-chain `description`.""" + flavourText: String + """The expansion used for naming base and expansion sets.""" + expansion: String + """The paraset the asset belongs to.""" + paraset: String + """The ID used to match other cards with the same name but different class.""" + parallelId: String + """The artist name.""" + artist: String +} + +"""Input type of `ParallelCardChangeQueryTimestamp.""" +input ParallelCardChangeQueryTimestampInput { + """The unix timestamp for the start of the requested range.""" + from: Int + """The unix timestamp for the end of the requested range.""" + to: Int +} + +"""Tracked changes made to a Parallel card.""" +type ParallelCardChange { + """The token ID of the Parallel asset.""" + tokenId: String! + """The unix timestamp for the card change.""" + timestamp: Int! + """The Parallel card metadata before and after the card change.""" + diff: ParallelCardChangeDiff! +} + +"""Parallel card metadata before and after a card change.""" +type ParallelCardChangeDiff { + """Metadata for a Parallel card before the card change.""" + old: ParallelCardChangeFields! + """Metadata for a Parallel card after the card change.""" + new: ParallelCardChangeFields! +} + +"""Metadata for a Parallel card.""" +type ParallelCardChangeFields { + """The ID used to match other cards with the same name but different class.""" + parallelId: String + """The rarity of the asset. Can be `Common`, `Uncommon`, `Rare`, `Legendary`, or `Prime`.""" + rarity: String + """The card class. Can be `Art Card`, `Asset`, `Card Back`, `FE`, `Masterpiece`, `PL`, or `SE`.""" + class: String + """The total supply of this individual asset.""" + supply: String + """The Parallel the asset belongs to.""" + parallel: String + """The energy used to play in-game.""" + cost: String + """The damage dealt when engaged in combat.""" + attack: String + """The possible damage received before being destroyed.""" + health: String + """The card type. Can be `Effect`, `Relic`, `Unit`, `Upgrade` or `Paragon`.""" + cardType: String + """The card subtype. Can be `Pirate`, `Vehicle` or `Clone`.""" + subtype: String + """The description of the card's in-game abilities.""" + functionText: String + """The description of the card's passive ability.""" + passiveAbility: String + """The asset description, sourced off-chain. Usually equal to the asset's on-chain `description`.""" + flavourText: String + """The expansion used for naming base and expansion sets.""" + expansion: String + """The paraset the asset belongs to.""" + paraset: String + """The artist name.""" + artist: String +} + +"""Response returned by `getParallelCardChanges`.""" +type ParallelCardChangesConnection { + """A cursor for use in pagination.""" + cursor: String + """A list of tracked changes made to a Parallel card.""" + items: [ParallelCardChange] +} + +"""Input Type of `PrimePoolQuery`""" +input PrimePoolInput { + """The address of the pool contract.""" + address: String! + """The network that the pool is deployed on.""" + networkId: Int! + """Optional list of pool ids to fetch.""" + poolIds: [String] +} + +"""Response returned by `getPrimePools`.""" +type PrimePoolConnection { + """A cursor for use in pagination.""" + cursor: String + """A list of prime pools.""" + items: [PrimePool] +} + +"""Values obtained directly from the chain.""" +type PrimePoolChainData { + """Whether caching is paused for this pool.""" + cachingPaused: Boolean + """How much ETH has been claimed for this pool.""" + ethClaimed: String + """How much ETH reward has been accrued for this pool.""" + ethReward: String + """The pool's allocation of the contract's per-second ETH rewards.""" + ethAllocPoint: String + """Total share points of the contract's per-second ETH rewards to the pool.""" + ethTotalAllocPoint: String + """Caching ETH rewards period start timestamp.""" + ethStartTimestamp: Int + """Caching ETH rewards period end timestamp.""" + ethEndTimestamp: Int + """Last timestamp at which ETH rewards were assigned.""" + ethLastRewardTimestamp: Int + """Minimum number of timed cache seconds per ETH.""" + ethTimedCachePeriod: String + """The pool's allocation of the contract's per second PRIME rewards.""" + primeAllocPoint: String + """Total share points of the contract's per second PRIME rewards to the pool.""" + primeTotalAllocPoint: String + """Caching rewards period start timestamp.""" + primeStartTimestamp: String + """Caching rewards period end timestamp.""" + primeEndTimestamp: Int + """Last timestamp at which PRIME rewards were assigned.""" + primeLastRewardTimestamp: Int +} + +type PrimePoolCalcData { + """The amount of accumulated PRIME rewards in total for the pool.""" + poolAccumulatedPrime: String + """The amount of accumulated PRIME rewards per share for the pool.""" + shareAccumulatedPrime: String + """The amount of accumulated ETH rewards in total for the pool.""" + poolAccumulatedEth: String + """The amount of accumulated ETH rewards per share for the pool.""" + shareAccumulatedEth: String + """The amount of PRIME for the pool to pay out as caching rewards.""" + poolPrimeAmount: String + """The amount of ETH for the pool to pay out as caching rewards.""" + poolEthAmount: String + """The amount of PRIME paid out daily by the pool as caching rewards.""" + poolPrimePerDay: String + """The amount of PRIME paid out per second by the pool as caching rewards.""" + poolPrimePerSecond: String + """The amount of ETH paid out daily by the pool as caching rewards.""" + poolEthPerDay: String + """The amount of ETH paid out per second by the pool as caching rewards.""" + poolEthPerSecond: String + """The amount of PRIME paid out daily by the pool, per share of the pool's total cached supply.""" + sharePrimePerDay: String + """The amount of PRIME paid out per second by the pool, per share of the pool's total cached supply.""" + sharePrimePerSecond: String + """The amount of ETH paid out daily by the pool, per share of the pool's total cached supply.""" + shareEthPerDay: String + """The amount of ETH paid out per second by the pool, per share of the pool's total cached supply.""" + shareEthPerSecond: String +} + +"""An Echelon Prime Pool.""" +type PrimePool { + """The ID of the contract-level Prime Pool (poolContractAddress:networkId). For example, `0x89bb49d06610b4b18e355504551809be5177f3d0:1`.""" + id: String + """The contract address for the Prime Pool.""" + poolContractAddress: String + """The network ID the Prime Pool is deployed on.""" + networkId: Int + """The ID of the pool within the contract.""" + poolId: String + """Values calculated by Defined using on-chain data.""" + calcData: PrimePoolCalcData + """Values obtained directly from the chain.""" + chainData: PrimePoolChainData + """When the pool was created by Defined.""" + createdAt: Int + """The block number for when Defined discovered this pool.""" + discoveryBlockNumber: Int + """The transaction hash of when Defined discovered this pool.""" + discoveryTransactionHash: String + """The contract address for the tokens cached ib the pool.""" + nftContractAddress: String + """The type of pool for this Prime Pool.""" + poolType: String + """The Parallel tokenIds required to cache in the pool.""" + tokenIds: [String] + """The # of cached sets in the pool.""" + totalSupply: String +} + +"""Response returned by `filterNftParallelAssets`.""" +type ParallelAssetFilterConnection { + """The list of Parallel assets matching the filter parameters.""" + results: [ParallelAssetFilterResult] + """The number of Parallel assets returned.""" + count: Int + """Where in the list the server started when returning items.""" + offset: Int +} + +"""A Parallel asset matching a set of filter parameters.""" +type ParallelAssetFilterResult { + """The ID of the NFT asset (`address`:`tokenId`).""" + id: String! + """The contract address of the NFT collection.""" + address: String! + """The token ID of the NFT asset.""" + tokenId: String! + """The internal Parallel ID of the NFT asset.""" + parallelId: Int! + """The network ID the NFT collection is deployed on.""" + networkId: Int! + """The NFT asset media.""" + media: NftAssetMedia + """The name of the NFT asset.""" + name: String + """The description of the NFT asset.""" + description: String + """The source image URI linked by smart contract metadata.""" + originalImage: String + """The URI provided by the smart contract. Typically JSON that contains metadata.""" + uri: String + """The unix timestamp for the last trade.""" + timestamp: Int + """The last sale price in USD.""" + lastPriceUsd: String + """The last sale price in the network's base token.""" + lastPriceNetworkBaseToken: String + """The game data for the NFT asset.""" + gameData: ParallelAssetGameData + """Metadata for the NFT asset.""" + metadata: ParallelAssetMetadata +} + +"""Attribute used to rank Parallel assets.""" +enum ParallelAssetRankingAttribute { + attack + cost + health + supply + lastPriceUsd + lastPriceNetworkBaseToken +} + +"""Input type of `ParallelAssetRanking`.""" +input ParallelAssetRanking { + """The attribute to rank Parallel assets by.""" + attribute: ParallelAssetRankingAttribute + """The direction to apply to the ranking attribute.""" + direction: RankingDirection +} + +"""Input type of `ParallelAssetFilters`.""" +input ParallelAssetFilters { + """The damage dealt when engaged in combat.""" + attack: NumberFilter + """The energy used to play in-game.""" + cost: NumberFilter + """The possible damage received before being destroyed.""" + health: NumberFilter + """The total supply of this individual asset.""" + supply: NumberFilter + """The last sale price in USD.""" + lastPriceUsd: NumberFilter + """The last sale price in the network's base token.""" + lastPriceNetworkBaseToken: NumberFilter +} + +"""The Parallel stream of evolution.""" +enum ParallelAssetMatcherParallel { + Augencore + Marcolian + Shroud + Earthen + Kathari + UnknownOrigins + Universal +} + +"""The Parallel asset card type.""" +enum ParallelAssetMatcherCardType { + Effect + Relic + Unit + Upgrade + Paragon +} + +"""The Parallel asset class.""" +enum ParallelAssetMatcherClass { + FE + SE + Asset + ArtCard + CardBack + Masterpiece + PL +} + +"""The Parallel asset rarity.""" +enum ParallelAssetMatcherRarity { + Common + Uncommon + Rare + Legendary + Prime +} + +"""The Parallel asset subtype.""" +enum ParallelAssetMatcherSubtype { + Pirate + Vehicle + Clone +} + +"""Input type of `ParallelAssetMatchers`.""" +input ParallelAssetMatchers { + tokenId: [String] + """The Parallel the asset belongs to.""" + parallel: [ParallelAssetMatcherParallel] + """The card type. Can be `Effect`, `Relic`, `Unit`, `Upgrade` or `Paragon`.""" + cardType: [ParallelAssetMatcherCardType] + """The card class. Can be `Art Card`, `Asset`, `Card Back`, `FE`, `Masterpiece`, `PL`, or `SE`.""" + class: [ParallelAssetMatcherClass] + """The paraset the asset belongs to.""" + paraset: [String] + """The list of rarities. Can be `Common`, `Uncommon`, `Rare`, `Legendary`, or `Prime`.""" + rarity: [ParallelAssetMatcherRarity] + """The card subtype. Can be `Pirate`, `Vehicle` or `Clone`.""" + subtype: [ParallelAssetMatcherSubtype] + """The expansion used for naming base and expansion sets.""" + expansion: [String] +} + +"""Response returned by `getPrimePoolAssets`.""" +type PrimePoolAssetConnection { + """The cursor to use for pagination.""" + cursor: String + """The list of cached Prime pool assets returned by the query.""" + items: [PrimePoolAsset] +} + +"""A cached Prime pool asset.""" +type PrimePoolAsset { + """The Prime pool asset ID (poolContractAddress:poolId:networkId)""" + id: String! + """The owner wallet address of the cached Prime pool asset.""" + sortKey: String! + """The number of cached Prime pool assets of this type by this owner.""" + amount: String! + """The owner wallet address of the cached Prime pool asset.""" + from: String! + """The owner wallet address of the cached Prime pool asset, and network ID (from:networkId).""" + fromHashKey: String! + """The Prime pool ID and Prime pool contract address (poolId:poolContractAddress).""" + fromSortKey: String! + """The network ID of the cached Prime pool asset.""" + networkId: Int! + """THe contract address of the Prime pool.""" + poolContractAddress: String! + """The Prime pool ID.""" + poolId: String! + """The amount of ETH the user is not eligible for either from having already harvesting or from not caching in the past.""" + ethRewardDebt: String + """The amount of PRIME the user is not eligible for either from having already harvesting or from not caching in the past.""" + primeRewardDebt: String +} + +"""Response returned by `getPrimePoolEvents`.""" +type PrimePoolEventConnection { + """The cursor to use for pagination.""" + cursor: String + """The list of Prime pool events returned by the query.""" + items: [PrimePoolEvent] +} + +"""A Prime pool event type.""" +enum PrimePoolEventType { + CACHE + CACHING_PAUSED + CLAIM + EMERGENCY_WITHDRAW + END_TIMESTAMP_UPDATED + ETH_REWARDS_ADDED + ETH_REWARDS_SET + LOG_POOL_ADDITION + LOG_POOL_SET_ALLOC_POINT + LOG_SET_PER_SECOND + LOG_UPDATE_POOL + POOL_DISCOVERED + REWARD_DECREASE + REWARD_INCREASE + TIME_CACHE_PERIOD_UPDATED + WITHDRAW +} + +"""The type of Prime pool caching contract.""" +enum PrimePoolType { + PRIME_REWARDS + ETH_AND_PRIME_REWARDS + TIMED_CACHE_ETH_AND_PRIME_REWARDS +} + +"""A Prime pool event.""" +type PrimePoolEvent { + """The Prime pool event ID (poolContractAddress:poolId:networkId)""" + id: String! + """The sort key of the Prime pool event (blockNumber:transactionIndex:logIndex).""" + sortKey: String! + """The blockHash of the Prime pool event.""" + blockHash: String! + """The blockNumber of the Prime pool event.""" + blockNumber: Int! + """The event data for the Prime pool event.""" + data: PrimePoolEventData! + """The Prime pool event type.""" + eventType: PrimePoolEventType! + """The Prime pool event's calling address.""" + from: String! + """The Prime pool event's calling address, and network ID (from:networkId).""" + fromHashKey: String! + """The logIndex of the Prime pool event.""" + logIndex: Int! + """The network ID of the Prime pool event.""" + networkId: Int! + """The Prime pool contract address.""" + poolContractAddress: String! + """The Prime pool ID.""" + poolId: String! + """The Prime pool type.""" + poolType: PrimePoolType! + """The timestamp of the Prime pool event.""" + timestamp: Int! + """The transactionHash of the Prime pool event.""" + transactionHash: String! + """The transactionIndex of the Prime pool event.""" + transactionIndex: Int! +} + +"""Event-specific data for a Prime pool transaction.""" +union PrimePoolEventData = PrimePoolCacheData | PrimePoolCachingPausedData | PrimePoolClaimEthData | PrimePoolClaimPrimeData | PrimePoolEmergencyWithdrawData | PrimePoolEndTimestampUpdatedEthData | PrimePoolEndTimestampUpdatedPrimeData | PrimePoolEthRewardsAddedData | PrimePoolEthRewardsSetData | PrimePoolLogPoolAdditionData | PrimePoolLogPoolSetAllocPointData | PrimePoolLogSetPerSecondData | PrimePoolLogUpdatePoolData | PrimePoolRewardDecreaseData | PrimePoolRewardIncreaseData | PrimePoolTimeCachePeriodUpdateData | PrimePoolWithdrawData + +"""Event-specific data for a Prime pool Cache transaction.""" +type PrimePoolCacheData { + """The Prime pool event type.""" + type: PrimePoolEventType! + """The amount of Prime pool asset(s) cached.""" + eventAmount: String! + """The total supply of assets cached in this Prime pool, including the amount cached in this transaction.""" + totalSupply: String! + """The owner wallet address of the cached Prime pool asset(s).""" + user: String! + """The total number of Prime pool asset(s) cached in this pool by this owner.""" + userCachedAmount: String! + """The amount of PRIME the user is not eligible for either from having already harvesting or from not caching in the past.""" + userPrimeRewardDebt: String! + """The amount of ETH the user is not eligible for either from having already harvesting or from not caching in the past.""" + userEthRewardDebt: String! +} + +"""Event-specific data for a Prime pool CachingPaused transaction.""" +type PrimePoolCachingPausedData { + """The Prime pool event type.""" + type: PrimePoolEventType! + """The state of caching paused set on the pool.""" + cachingPaused: Boolean! +} + +"""Currency types for Prime pool events.""" +enum PrimePoolCurrency { + ETH + PRIME +} + +"""Event-specific data for a Prime pool ClaimEth transaction.""" +type PrimePoolClaimEthData { + """The Prime pool event type.""" + type: PrimePoolEventType! + """The wallet address claiming ETH rewards.""" + user: String! + """The amount of ETH claimed.""" + eventAmount: String! + """The currency type of the event.""" + currency: PrimePoolCurrency! + """The amount of ETH the user is not eligible for either from having already harvesting or from not caching in the past.""" + userEthRewardDebt: String! + """The total amount of ETH claimed for a pool.""" + ethClaimed: String +} + +"""Event-specific data for a Prime pool ClaimPrime transaction.""" +type PrimePoolClaimPrimeData { + """The Prime pool event type.""" + type: PrimePoolEventType! + """The wallet address claiming PRIME rewards.""" + user: String! + """The amount of PRIME claimed.""" + eventAmount: String! + """The currency type of the event.""" + currency: PrimePoolCurrency! + """The total amount of PRIME claimed for a pool.""" + userPrimeRewardDebt: String! +} + +"""Event-specific data for a Prime pool EmergencyWithdraw transaction.""" +type PrimePoolEmergencyWithdrawData { + """The Prime pool event type.""" + type: PrimePoolEventType! + """The wallet address emergency withdrawing from the pool.""" + user: String! + """The amount of Prime pool asset(s) emergency withdrawn.""" + eventAmount: String! + """The total supply of assets cached in this Prime pool.""" + totalSupply: String! + """The updated total number of Prime pool asset(s) cached in this pool by this owner.""" + userCachedAmount: String! + """The amount of PRIME the user is not eligible for either from having already harvesting or from not caching in the past.""" + userPrimeRewardDebt: String! + """The amount of ETH the user is not eligible for either from having already harvesting or from not caching in the past.""" + userEthRewardDebt: String! +} + +"""Event-specific data for a Prime pool EndTimestampUpdatedEth transaction.""" +type PrimePoolEndTimestampUpdatedEthData { + """The Prime pool event type.""" + type: PrimePoolEventType! + """The currency type of the event.""" + currency: PrimePoolCurrency! + """The updated ETH reward start timestamp for the pool.""" + ethStartTimestamp: Int! + """The updated ETH reward end timestamp for the pool.""" + ethEndTimestamp: Int! + """The updated reward per second for the pool.""" + ethPerSecond: String! +} + +"""Event-specific data for a Prime pool EndTimestampUpdatedPrime transaction.""" +type PrimePoolEndTimestampUpdatedPrimeData { + """The Prime pool event type.""" + type: PrimePoolEventType! + """The currency type of the event.""" + currency: PrimePoolCurrency! + """The updated PRIME reward start timestamp for the pool.""" + primeStartTimestamp: Int! + """The updated PRIME reward end timestamp for the pool.""" + primeEndTimestamp: Int! + """The updated reward per second for the pool.""" + primePerSecond: String! +} + +"""Event-specific data for a Prime pool LogUpdatePool transaction.""" +type PrimePoolEthRewardsAddedData { + """The Prime pool event type.""" + type: PrimePoolEventType! + """The amount of ETH rewards added to the pool.""" + amount: String! + """The total ETH rewards for the pool.""" + totalRewards: String! +} + +"""Event-specific data for a Prime pool EthRewardsSet transaction.""" +type PrimePoolEthRewardsSetData { + """The Prime pool event type.""" + type: PrimePoolEventType! + """The amount of ETH rewards set for the pool.""" + amount: String! + """The total ETH rewards for the pool.""" + totalRewards: String! +} + +"""Event-specific data for a Prime pool LogPoolAddition (new Prime pool) transaction.""" +type PrimePoolLogPoolAdditionData { + """The Prime pool event type.""" + type: PrimePoolEventType! + """The token ID's added to the new Prime pool.""" + tokenIds: [String!]! +} + +"""Event-specific data for a Prime pool LogPoolSetAllocPoint transaction.""" +type PrimePoolLogPoolSetAllocPointData { + """The Prime pool event type.""" + type: PrimePoolEventType! + """The currency type of the event.""" + currency: PrimePoolCurrency! + """The updated alloc point for the pool (the pool's share of the contract's total rewards).""" + allocPoint: String! + """The updated total alloc point for the pool (the sum of all pools' alloc points).""" + totalAllocPoint: String! +} + +"""Event-specific data for a Prime pool LogSetPerSecond transaction.""" +type PrimePoolLogSetPerSecondData { + """The Prime pool event type.""" + type: PrimePoolEventType! + """The currency type of the event.""" + currency: PrimePoolCurrency! + """The updated reward per second for the pool.""" + amount: String! + """The updated reward start timestamp for the pool.""" + startTimestamp: Int! + """The updated reward end timestamp for the pool.""" + endTimestamp: Int! + """The updated PRIME reward per second for the pool.""" + primeAmountPerSecond: String + """The updated ETH reward per second for the pool.""" + ethAmountPerSecond: String +} + +"""Event-specific data for a Prime pool LogUpdatePool transaction.""" +type PrimePoolLogUpdatePoolData { + """The Prime pool event type.""" + type: PrimePoolEventType! + """The timestamp at which rewards were last assigned.""" + lastRewardTimestamp: Int! + """The total amount of assets cached in the pool (emitted by the event, before the transaction).""" + supply: String! + """The total amount of assets cached in the pool (queried from the pool after the transaction).""" + totalSupply: String! + """The amount of accumulated rewards per share.""" + accPerShare: String! + """The currency type of the event.""" + currency: PrimePoolCurrency! + """The PRIME amount of the pool.""" + primeAmount: String + """The ETH amount of the pool.""" + ethAmount: String +} + +"""Event-specific data for a Prime pool RewardDecrease transaction.""" +type PrimePoolRewardDecreaseData { + """The Prime pool event type.""" + type: PrimePoolEventType! + """The currency type of the event.""" + currency: PrimePoolCurrency! + """The amount of rewards decreased.""" + eventAmount: String! + """The updated total rewards for the pool.""" + updatedAmount: String! +} + +"""Event-specific data for a Prime pool RewardIncrease transaction.""" +type PrimePoolRewardIncreaseData { + """The Prime pool event type.""" + type: PrimePoolEventType! + """The currency type of the event.""" + currency: PrimePoolCurrency! + """The amount of rewards increased.""" + eventAmount: String! + """The updated total rewards for the pool.""" + updatedAmount: String! +} + +"""Event-specific data for a Prime pool TimeCachePeriodUpdate transaction.""" +type PrimePoolTimeCachePeriodUpdateData { + """The Prime pool event type.""" + type: PrimePoolEventType! + """The currency type of the event.""" + currency: PrimePoolCurrency! + """The minimum number of timed cache seconds per ETH reward.""" + timedCachePeriod: String! +} + +"""Event-specific data for a Prime pool Withdraw transaction.""" +type PrimePoolWithdrawData { + """The Prime pool event type.""" + type: PrimePoolEventType! + """The address of the wallet who withdrew.""" + user: String! + """The amount of assets withdrawn.""" + eventAmount: String! + """The updated total assets for the pool after the withdrawal.""" + totalSupply: String! + """The amount of PRIME the user is not eligible for either from having already harvesting or from not caching in the past.""" + userPrimeRewardDebt: String! + """The amount of ETH the user is not eligible for either from having already harvesting or from not caching in the past.""" + userEthRewardDebt: String! + """The amount of cached asset the user has in the pool, following the withdrawal.""" + userCachedAmount: String! +} + +"""Response returned by `onNftEventsCreated`.""" +type AddNftEventsOutput { + """The contract address of the NFT collection.""" + address: String! + """The network ID the collection is deployed on.""" + networkId: Int! + """The id of the collection (`address`:`networkId`).""" + id: String! + """A list of NFT transactions streaming real-time.""" + events: [NftEvent]! +} + +"""Response returned by `onNftPoolEventsCreated`.""" +type AddNftPoolEventsOutput { + collectionAddress: String! + exchangeAddress: String! + poolAddress: String! + networkId: Int! + id: String! + events: [NftPoolEvent]! +} + +scalar Void + +"""Type of the community gathered note.""" +enum CommunityNoteType { + """An contract attribute change.""" + ATTRIBUTE + """A scam report.""" + SCAM + """A logo change.""" + LOGO +} + +"""Type of the contract.""" +enum ContractType { + TOKEN + WALLET +} + +enum ContractProposalStatus { + ACCEPTED + PENDING + REJECTED + REVERTED +} + +"""The attribute used to rank tokens.""" +enum TokenRankingAttribute { + createdAt + tokenCreatedAt + lastTransaction + age @deprecated(reason: "Use createdAt instead") + buyCount5m + buyCount1 + buyCount4 + buyCount12 + buyCount24 + change5m + change1 + change4 + change12 + change24 + volumeChange5m + volumeChange1 + volumeChange4 + volumeChange12 + volumeChange24 + high5m + high1 + high4 + high12 + high24 + holders + notableHolderCount + liquidity + low5m + low1 + low4 + low12 + low24 + marketCap + circulatingMarketCap + priceUSD + sellCount5m + sellCount1 + sellCount4 + sellCount12 + sellCount24 + trendingScore + trendingScore5m + trendingScore1 + trendingScore4 + trendingScore12 + trendingScore24 + txnCount5m + txnCount1 + txnCount4 + txnCount12 + txnCount24 + uniqueBuys5m + uniqueBuys1 + uniqueBuys4 + uniqueBuys12 + uniqueBuys24 + uniqueSells5m + uniqueSells1 + uniqueSells4 + uniqueSells12 + uniqueSells24 + uniqueTransactions5m + uniqueTransactions1 + uniqueTransactions4 + uniqueTransactions12 + uniqueTransactions24 + volume5m + volume1 + volume4 + volume12 + volume24 + buyVolume5m + buyVolume1 + buyVolume4 + buyVolume12 + buyVolume24 + sellVolume5m + sellVolume1 + sellVolume4 + sellVolume12 + sellVolume24 + poolFees5m + poolFees1 + poolFees4 + poolFees12 + poolFees24 + baseFees5m + baseFees1 + baseFees4 + baseFees12 + baseFees24 + priorityFees5m + priorityFees1 + priorityFees4 + priorityFees12 + priorityFees24 + builderTips5m + builderTips1 + builderTips4 + builderTips12 + builderTips24 + l1DataFees5m + l1DataFees1 + l1DataFees4 + l1DataFees12 + l1DataFees24 + totalFees5m + totalFees1 + totalFees4 + totalFees12 + totalFees24 + feeToVolumeRatio5m + feeToVolumeRatio1 + feeToVolumeRatio4 + feeToVolumeRatio12 + feeToVolumeRatio24 + launchpadCompletedAt + launchpadMigratedAt + graduationPercent + walletAgeAvg + walletAgeStd + swapPct1dOldWallet + swapPct7dOldWallet + sniperHeldPercentage + bundlerHeldPercentage + insiderHeldPercentage + suspiciousHeldPercentage + sniperCount + bundlerCount + insiderCount + suspiciousCount + devHeldPercentage + top10HoldersPercent + coinCommunityPostCount + coinCommunityMemberCount + coinCommunityLikeCount + coinCommunityLastPostAt +} + +"""Input type of `TokenRanking`.""" +input TokenRanking { + """The attribute to rank tokens by.""" + attribute: TokenRankingAttribute + """The direction to apply to the ranking attribute.""" + direction: RankingDirection +} + +"""Real-time or historical prices for a token.""" +type Price { + """The contract address of the token.""" + address: String! + """The unix timestamp for the price.""" + timestamp: Int + """The network ID the token is deployed on.""" + networkId: Int! + """The token price in USD.""" + priceUsd: Float! + """The pool that emitted the swap generating this price""" + blockNumber: Int + """The percent price change in the past 24 hours. Decimal format. Not available via subscription.""" + priceChange24: Float + """The pool that emitted the swap generating this price""" + poolAddress: String @deprecated(reason: "Pricing no longer based on specific pools") + """Ratio of how confident we are in the price""" + confidence: Float @deprecated(reason: "Pricing no longer based on specific pools") +} + +"""Metadata for a token.""" +type EnhancedToken { + """The ID of the token (`address:networkId`).""" + id: String! + """The contract address of the token.""" + address: String! + """The token ID on CoinMarketCap.""" + cmcId: Int + """The precision to which the token can be divided. For example, the smallest unit for USDC is 0.000001 (6 decimals).""" + decimals: Int! + """Whether the token has been flagged as a scam.""" + isScam: Boolean + """The token name. For example, `ApeCoin`.""" + name: String + """The network ID the token is deployed on.""" + networkId: Int! + """The token symbol. For example, `APE`.""" + symbol: String + """The total supply of the token.""" + totalSupply: String @deprecated(reason: "Use the TokenInfo type") + """Community gathered links for the socials of this token.""" + socialLinks: SocialLinks + """More metadata about the token.""" + info: TokenInfo + """The Grid asset ID, if this token is linked to a Grid asset.""" + gridAssetId: String + """The Grid bluechip rating for this token (e.g. `A+`, `B-`).""" + bluechipRating: String + """The Grid organization associated with this token.""" + organization: Organization + """The Grid asset associated with this token.""" + asset: Asset + """Information about the token from 3rd party sources.""" + explorerData: ExplorerTokenData @deprecated(reason: "Use the TokenInfo type") + """A list of exchanges where the token has been traded.""" + exchanges: [Exchange!] + """The thumbnail token logo URL.""" + imageThumbUrl: String @deprecated(reason: "Use the TokenInfo type") + """The small token logo URL.""" + imageSmallUrl: String @deprecated(reason: "Use the TokenInfo type") + """The large token logo URL.""" + imageLargeUrl: String @deprecated(reason: "Use the TokenInfo type") + """The circulating supply of the token.""" + circulatingSupply: String @deprecated(reason: "Use the TokenInfo type") + """The amount of this token in the pair.""" + pooled: String @deprecated(reason: "Pooled can be found on the pair instead") + """The token creator's wallet address.""" + creatorAddress: String + """The token creator's wallet identity and profile, resolved from creatorAddress. Null when the token has no known creator.""" + creator: Wallet + """The block height the token was created at.""" + createBlockNumber: Int + """The transaction hash of the token's creation.""" + createTransactionHash: String + """The unix timestamp for the creation of the token.""" + createdAt: Int + """Returns mint authority address if token is mintable. If null, verify against isMintableValid.""" + mintable: String + """Returns freeze authority address if token is freezable. If null, verify against isFreezableValid.""" + freezable: String + """Determines if freezable is a valid address or null value for the authority, or if the freezable state has not yet been determined.""" + isFreezableValid: Boolean + """Determines if mintable is a valid address or null value for the authority, or if the mintable state has not yet been determined.""" + isMintableValid: Boolean + """The launchpad data for the token, if applicable.""" + launchpad: LaunchpadData + """The percentage of total supply held by the top 10 holders (excluding exchanges/pairs).""" + top10HoldersPercent: Float + """Whether the token name or symbol contains profanity.""" + profanity: Boolean + """All-time high and low price/market cap data for the token.""" + extrema: TokenExtrema + """The Coin Community data for the token""" + coinCommunity: CoinCommunity + """Token extension metadata, if available.""" + extensions: TokenExtensions + """Token-standard-specific custom metadata — currently ERC-7572 `contractURI` fields, as used by Base B20 tokens. Null for tokens without a recognized token standard.""" + tokenStandardCustomData: Erc7572CustomInfo + categories: [Category!] +} + +"""A token matching a set of filter parameters.""" +type TokenFilterResult { + """Metadata for the token.""" + token: EnhancedToken + """The unix timestamp for the creation of the token's first pair.""" + createdAt: Int + """The unix timestamp for the token's last transaction.""" + lastTransaction: Int + age: Int @deprecated(reason: "Age isn't supported - use createdAt instead") + """The number of buys in the past 5 minutes.""" + buyCount5m: Int + """The number of buys in the past hour.""" + buyCount1: Int + """The number of buys in the past 12 hours.""" + buyCount12: Int + """The number of buys in the past 24 hours.""" + buyCount24: Int + """The number of buys in the past 4 hours.""" + buyCount4: Int + """The percent price change in the past 5 minutes. Decimal format.""" + change5m: String + """The percent price change in the past hour. Decimal format.""" + change1: String + """The percent price change in the past 12 hours. Decimal format.""" + change12: String + """The percent price change in the past 24 hours. Decimal format.""" + change24: String + """The percent price change in the past 4 hours. Decimal format.""" + change4: String + """The percent volume change in the past 5 minutes. Decimal format.""" + volumeChange5m: String + """The percent volume change in the past hour. Decimal format.""" + volumeChange1: String + """The percent volume change in the past 4 hours. Decimal format.""" + volumeChange4: String + """The percent volume change in the past 12 hours. Decimal format.""" + volumeChange12: String + """The percent volume change in the past 24 hours. Decimal format.""" + volumeChange24: String + """The exchanges the token is listed on.""" + exchanges: [Exchange] + fdv: String @deprecated(reason: "FDV isn't supported - use marketCap instead") + """The highest price in USD in the past 5 minutes.""" + high5m: String + """The highest price in USD in the past hour.""" + high1: String + """The highest price in USD in the past 12 hours.""" + high12: String + """The highest price in USD in the past 24 hours.""" + high24: String + """The highest price in USD in the past 4 hours.""" + high4: String + """Amount of liquidity in the token's top pair.""" + liquidity: String + """The token of interest. Can be `token0` or `token1`.""" + quoteToken: String + """The lowest price in USD in the past 5 minutes.""" + low5m: String + """The lowest price in USD in the past hour.""" + low1: String + """The lowest price in USD in the past 12 hours.""" + low12: String + """The lowest price in USD in the past 24 hours.""" + low24: String + """The lowest price in USD in the past 4 hours.""" + low4: String + """The fully diluted market cap.""" + marketCap: String + """The circulating market cap.""" + circulatingMarketCap: String + """Metadata for the token's top pair.""" + pair: Pair + """Metadata for the token's most liquid pair""" + liquidPair: Pair + """The liquidity of the token's most liquid pair""" + liquidPairLiquidity: String + """The liquid pairs price in USD.""" + liquidPairPriceUSD: String + """The token price in USD.""" + priceUSD: String + """A heuristic based on various factors used to rank tokens based on how trending they are.""" + trendingScore: Float + """The number of sells in the past 5 minutes.""" + sellCount5m: Int + """The number of sells in the past hour.""" + sellCount1: Int + """The number of sells in the past 12 hours.""" + sellCount12: Int + """The number of sells in the past 24 hours.""" + sellCount24: Int + """The number of sells in the past 4 hours.""" + sellCount4: Int + """The number of transactions in the past 5 minutes.""" + txnCount5m: Int + """The number of transactions in the past hour.""" + txnCount1: Int + """The number of transactions in the past 12 hours.""" + txnCount12: Int + """The number of transactions in the past 24 hours.""" + txnCount24: Int + """The number of transactions in the past 4 hours.""" + txnCount4: Int + """The unique number of buys in the past 5 minutes.""" + uniqueBuys5m: Int + """The unique number of buys in the past hour.""" + uniqueBuys1: Int + """The unique number of buys in the past 12 hours.""" + uniqueBuys12: Int + """The unique number of buys in the past 24 hours.""" + uniqueBuys24: Int + """The unique number of buys in the past 4 hours.""" + uniqueBuys4: Int + """The unique number of sells in the past 5 minutes.""" + uniqueSells5m: Int + """The unique number of sells in the past hour.""" + uniqueSells1: Int + """The unique number of sells in the past 12 hours.""" + uniqueSells12: Int + """The unique number of sells in the past 24 hours.""" + uniqueSells24: Int + """The unique number of sells in the past 4 hours.""" + uniqueSells4: Int + """The unique number of transactions in the past 5 minutes.""" + uniqueTransactions5m: Int + """The unique number of transactions in the past hour.""" + uniqueTransactions1: Int + """The unique number of transactions in the past 12 hours.""" + uniqueTransactions12: Int + """The unique number of transactions in the past 24 hours.""" + uniqueTransactions24: Int + """The unique number of transactions in the past 4 hours.""" + uniqueTransactions4: Int + """The trade volume in USD in the past hour.""" + volume1: String + """The trade volume in USD in the past 5 minutes.""" + volume5m: String + """The trade volume in USD in the past 12 hours.""" + volume12: String + """The trade volume in USD in the past 24 hours.""" + volume24: String + """The trade volume in USD in the past 4 hours.""" + volume4: String + """The buy volume in USD in the past hour.""" + buyVolume1: String + """The buy volume in USD in the past 12 hours.""" + buyVolume12: String + """The buy volume in USD in the past 24 hours.""" + buyVolume24: String + """The buy volume in USD in the past 4 hours.""" + buyVolume4: String + """The buy volume in USD in the past 5 minutes.""" + buyVolume5m: String + """The sell volume in USD in the past hour.""" + sellVolume1: String + """The sell volume in USD in the past 12 hours.""" + sellVolume12: String + """The sell volume in USD in the past 24 hours.""" + sellVolume24: String + """The sell volume in USD in the past 4 hours.""" + sellVolume4: String + """The sell volume in USD in the past 5 minutes.""" + sellVolume5m: String + """The total pool fees in USD in the past 5 minutes.""" + poolFees5m: String + """The total pool fees in USD in the past hour.""" + poolFees1: String + """The total pool fees in USD in the past 4 hours.""" + poolFees4: String + """The total pool fees in USD in the past 12 hours.""" + poolFees12: String + """The total pool fees in USD in the past 24 hours.""" + poolFees24: String + """The total base gas fees in USD in the past 5 minutes.""" + baseFees5m: String + """The total base gas fees in USD in the past hour.""" + baseFees1: String + """The total base gas fees in USD in the past 4 hours.""" + baseFees4: String + """The total base gas fees in USD in the past 12 hours.""" + baseFees12: String + """The total base gas fees in USD in the past 24 hours.""" + baseFees24: String + """The total priority fees in USD in the past 5 minutes.""" + priorityFees5m: String + """The total priority fees in USD in the past hour.""" + priorityFees1: String + """The total priority fees in USD in the past 4 hours.""" + priorityFees4: String + """The total priority fees in USD in the past 12 hours.""" + priorityFees12: String + """The total priority fees in USD in the past 24 hours.""" + priorityFees24: String + """The total builder tips (MEV) in USD in the past 5 minutes.""" + builderTips5m: String + """The total builder tips (MEV) in USD in the past hour.""" + builderTips1: String + """The total builder tips (MEV) in USD in the past 4 hours.""" + builderTips4: String + """The total builder tips (MEV) in USD in the past 12 hours.""" + builderTips12: String + """The total builder tips (MEV) in USD in the past 24 hours.""" + builderTips24: String + """The total L1 data fees in USD in the past 5 minutes.""" + l1DataFees5m: String + """The total L1 data fees in USD in the past hour.""" + l1DataFees1: String + """The total L1 data fees in USD in the past 4 hours.""" + l1DataFees4: String + """The total L1 data fees in USD in the past 12 hours.""" + l1DataFees12: String + """The total L1 data fees in USD in the past 24 hours.""" + l1DataFees24: String + """The total trading fees (pool + gas + tips) in USD in the past 5 minutes.""" + totalFees5m: String + """The total trading fees (pool + gas + tips) in USD in the past hour.""" + totalFees1: String + """The total trading fees (pool + gas + tips) in USD in the past 4 hours.""" + totalFees4: String + """The total trading fees (pool + gas + tips) in USD in the past 12 hours.""" + totalFees12: String + """The total trading fees (pool + gas + tips) in USD in the past 24 hours.""" + totalFees24: String + """The ratio of total fees to volume in the past 5 minutes. Decimal format.""" + feeToVolumeRatio5m: String + """The ratio of total fees to volume in the past hour. Decimal format.""" + feeToVolumeRatio1: String + """The ratio of total fees to volume in the past 4 hours. Decimal format.""" + feeToVolumeRatio4: String + """The ratio of total fees to volume in the past 12 hours. Decimal format.""" + feeToVolumeRatio12: String + """The ratio of total fees to volume in the past 24 hours. Decimal format.""" + feeToVolumeRatio24: String + """Whether the token has been flagged as a scam.""" + isScam: Boolean + """The number of different wallets holding the token.""" + holders: Int + """The average age of the wallets that traded in the last 24h""" + walletAgeAvg: String + """The standard deviation of age of the wallets that traded in the last 24h""" + walletAgeStd: String + """The percentage of wallets that are less than 1d old that have traded in the last 24h""" + swapPct1dOldWallet: String + """The percentage of wallets that are less than 7d old that have traded in the last 24h""" + swapPct7dOldWallet: String + """The number of wallets that have sniped the token""" + sniperCount: Int + """The percentage of tokens held by snipers""" + sniperHeldPercentage: Float + """The number of wallets that have bundled the token""" + bundlerCount: Int + """The percentage of tokens held by bundlers""" + bundlerHeldPercentage: Float + """The number of wallets that have been an insider of the token""" + insiderCount: Int + """The percentage of tokens held by insiders""" + insiderHeldPercentage: Float + """The number of suspicious wallets (deduplicated union of snipers, bundlers, and insiders)""" + suspiciousCount: Int + """The percentage of tokens held by suspicious wallets""" + suspiciousHeldPercentage: Float + """The percentage of tokens held by the dev""" + devHeldPercentage: Float + """The percentage of total supply held by the top 10 holders.""" + top10HoldersPercent: Float + """The reasons the token has been flagged as a potential scam.""" + potentialScamReasons: [PotentialScamReason] + """The all-time high price in USD.""" + athPrice: String + """The unix timestamp when the all-time high price was reached.""" + athPriceTimestamp: Int + """The all-time low price in USD.""" + atlPrice: String + """The unix timestamp when the all-time low price was reached.""" + atlPriceTimestamp: Int + """The all-time high fully diluted market cap.""" + athFdv: String + """The unix timestamp when the all-time high FDV was reached.""" + athFdvTimestamp: Int + """The all-time low fully diluted market cap.""" + atlFdv: String + """The unix timestamp when the all-time low FDV was reached.""" + atlFdvTimestamp: Int + """The all-time high circulating market cap.""" + athCircMc: String + """The unix timestamp when the all-time high circulating market cap was reached.""" + athCircMcTimestamp: Int + """The all-time low circulating market cap.""" + atlCircMc: String + """The unix timestamp when the all-time low circulating market cap was reached.""" + atlCircMcTimestamp: Int +} + +"""Metadata for a contract.""" +union EnhancedContract = EnhancedToken | EnhancedNftContract + +"""Community gathered proposals for an asset.""" +type CommunityNote { + """The contract address of the contract.""" + address: String! + contractType: ContractType! + currentContract: EnhancedContract + """The contract after the community note was applied.""" + currentData: JSON + """The ID of the contract (`address:id`).""" + id: String! + """The unix timestamp of when the community note was moderated.""" + moderatedAt: Int + """The network ID the contract is deployed on.""" + networkId: Int! + """The contract before the community note was applied.""" + previousData: JSON + """The data of the community note.""" + proposalData: JSON! + """The ordinal number of the community note.""" + proposalNum: Int! + """The type of the community note.""" + proposalType: CommunityNoteType! + """The unix timestamp of when the community note was created.""" + proposedAt: Int! + """The status of the community note.""" + status: ContractProposalStatus! + sortKey: String! +} + +"""Metadata for a decentralized exchange.""" +type Exchange { + """The ID of the exchange (`address:id`).""" + id: String! + """The contract address of the exchange.""" + address: String! + """The hex string for the exchange color.""" + color: String + """The name of the exchange.""" + name: String + """The version of the exchange, if applicable.""" + exchangeVersion: String + """The exchange logo URL.""" + iconUrl: String + """The network ID the exchange is deployed on.""" + networkId: Int! + """The URL for the exchange.""" + tradeUrl: String +} + +"""Filters for community notes.""" +input CommunityNotesFilter { + """The contract address of the contract.""" + address: String + contractType: ContractType + """The network ID the contract is deployed on.""" + networkId: [Int] + """The type of the proposal.""" + proposalType: CommunityNoteType +} + +"""Input type of `getCommunityNotes`.""" +input CommunityNotesInput { + """A set of filters to apply""" + filter: CommunityNotesFilter + """The maximum number of community notes to return.""" + limit: Int + """The cursor to use for pagination.""" + cursor: String +} + +"""Community notes data.""" +type CommunityNotesResponse { + """The list of community notes matching the filter parameters.""" + items: [CommunityNote!]! + """The number of community notes returned.""" + count: Int! + """A cursor for use in pagination.""" + cursor: String +} + +"""Metadata for a wallet label from the WALLET_LABEL_TYPES vocabulary""" +type WalletLabelType { + """Label name (e.g. WHALE, CEX, KOL)""" + name: String! + """Human-readable display name""" + displayName: String! + """Description of what this label means""" + description: String! +} + +"""A prediction sub-subcategory (3rd level, terminal).""" +type PredictionSubSubcategory { + """The display name.""" + name: String! + """The URL slug.""" + slug: String! +} + +"""A prediction subcategory (2nd level).""" +type PredictionSubcategory { + """The display name.""" + name: String! + """The URL slug.""" + slug: String! + """Nested subcategories (3rd level).""" + subcategories: [PredictionSubSubcategory!] +} + +"""A prediction category with optional nested subcategories.""" +type PredictionCategory { + """The display name.""" + name: String! + """The URL slug.""" + slug: String! + """Nested subcategories (2nd level).""" + subcategories: [PredictionSubcategory!] +} + +"""The duration used to request windowed prediction stats.""" +enum PredictionStatsDuration { + week1 + day1 + hour12 + hour4 + hour1 + min5 +} + +"""Input type of `detailedPredictionMarketStats`.""" +input DetailedPredictionMarketStatsInput { + """The ID of the prediction market.""" + marketId: String! + """The unix timestamp.""" + timestamp: Int + """The stat durations to include.""" + durations: [PredictionStatsDuration!] + """The number of stat buckets to return.""" + bucketCount: Int +} + +"""A currency value pair containing both USD and collateral token values.""" +type CurrencyValuePair { + """Value in USD.""" + usd: String! + """Value in collateral token units.""" + ct: String! +} + +"""OHLC (Open/High/Low/Close) values for a currency pair.""" +type CurrencyOHLC { + """Opening value.""" + open: CurrencyValuePair! + """Closing value.""" + close: CurrencyValuePair! + """Low value.""" + low: CurrencyValuePair! + """High value.""" + high: CurrencyValuePair! +} + +"""A price value pair containing both USD and collateral token prices.""" +type PriceValuePair { + """Price in USD.""" + usd: String! + """Price in collateral token units.""" + ct: String! +} + +"""OHLC (Open/High/Low/Close) values for prices.""" +type PriceOHLC { + """Opening price.""" + open: PriceValuePair! + """Closing price.""" + close: PriceValuePair! + """Low price.""" + low: PriceValuePair! + """High price.""" + high: PriceValuePair! +} + +"""All-time stats containing volume data.""" +type WindowedPredictionAllTimeStats { + """Total volume.""" + volume: CurrencyValuePair! + """Venue-specific volume (optional).""" + venueVolume: CurrencyValuePair +} + +"""Core market stats that are always available.""" +type WindowedPredictionMarketCoreStats { + """Volume during this window.""" + volume: CurrencyValuePair! + """Number of trades during this window.""" + trades: Int! +} + +"""Unique trader count during the period.""" +type WindowedPredictionMarketUniqueTraderStats { + """Number of unique traders.""" + uniqueTraders: Int! +} + +"""Market-level liquidity OHLC data.""" +type WindowedPredictionMarketLiquidityStats { + """Liquidity OHLC values.""" + liquidity: CurrencyOHLC! +} + +"""Market-level open interest OHLC data.""" +type WindowedPredictionMarketOpenInterestStats { + """Open interest OHLC values.""" + openInterest: CurrencyOHLC! +} + +"""Change percentages for a prediction market over a time window.""" +type WindowedPredictionMarketChangeStats { + """Volume change percentage.""" + volumeChange: Float! + """Trades change percentage.""" + tradesChange: Float! + """Unique traders change percentage (optional).""" + uniqueTradersChange: Float + """Liquidity change percentage (optional).""" + liquidityChange: Float + """Open interest change percentage (optional).""" + openInterestChange: Float +} + +"""Volume breakdown including shares for an outcome.""" +type OutcomeVolumeStats { + """Volume in USD.""" + usd: String! + """Volume in collateral token units.""" + ct: String! + """Volume in shares.""" + shares: String! +} + +"""Buy/sell volume breakdown including shares.""" +type OutcomeBuySellVolumeStats { + """Volume in USD.""" + usd: String! + """Volume in collateral token units.""" + ct: String! + """Volume in shares.""" + shares: String! +} + +"""Core outcome stats that are always available.""" +type WindowedPredictionOutcomeCoreStats { + """The venue-specific outcome ID.""" + venueOutcomeId: String! + """Number of trades.""" + trades: Int! + """Volume stats including shares.""" + volume: OutcomeVolumeStats! + """Price OHLC data.""" + price: PriceOHLC! +} + +"""Buy/sell trade breakdown for an outcome.""" +type WindowedPredictionOutcomeBuySellStats { + """Number of buys.""" + buys: Int! + """Number of sells.""" + sells: Int! + """Buy volume breakdown.""" + buyVolume: OutcomeBuySellVolumeStats! + """Sell volume breakdown.""" + sellVolume: OutcomeBuySellVolumeStats! +} + +"""Outcome-level liquidity OHLC data.""" +type WindowedPredictionOutcomeLiquidityStats { + """Liquidity OHLC values.""" + liquidity: CurrencyOHLC! +} + +"""Orderbook bid/ask OHLC data.""" +type WindowedPredictionOutcomeOrderbookStats { + """Bid price OHLC.""" + bid: PriceOHLC! + """Ask price OHLC.""" + ask: PriceOHLC! +} + +"""Two percent depth OHLC data for bid and ask.""" +type WindowedPredictionOutcomeDepthStats { + """Bid depth OHLC.""" + bidDepth: CurrencyOHLC! + """Ask depth OHLC.""" + askDepth: CurrencyOHLC! +} + +"""Change percentages for a prediction outcome over a time window.""" +type WindowedPredictionOutcomeChangeStats { + """Volume change percentage.""" + volumeChange: Float! + """Volume shares change percentage.""" + volumeSharesChange: Float! + """Price change percentage.""" + priceChange: Float! + """Trades change percentage.""" + tradesChange: Float! + """Price range over the window (volatility proxy).""" + priceRange: Float! + """Buys change percentage (optional).""" + buysChange: Float + """Sells change percentage (optional).""" + sellsChange: Float + """Liquidity change percentage (optional).""" + liquidityChange: Float +} + +"""Enhanced stats for a single outcome over a time window.""" +type EnhancedWindowedPredictionOutcomeStats { + """Core stats (always present).""" + core: WindowedPredictionOutcomeCoreStats! + """Buy/sell breakdown (optional).""" + buySell: WindowedPredictionOutcomeBuySellStats + """Liquidity stats (optional).""" + liquidity: WindowedPredictionOutcomeLiquidityStats + """Orderbook stats (optional).""" + orderbook: WindowedPredictionOutcomeOrderbookStats + """Depth stats (optional).""" + depth: WindowedPredictionOutcomeDepthStats + """Change stats for this window.""" + statsChange: WindowedPredictionOutcomeChangeStats! +} + +"""Trending, relevance, and competitive scores for a market window.""" +type PredictionMarketWindowScores { + """The trending score.""" + trending: Float! + """The relevance score.""" + relevance: Float! + """The competitive score.""" + competitive: Float! +} + +"""Enhanced stats for a prediction market over a time window.""" +type EnhancedWindowedPredictionMarketStats { + """Window start timestamp.""" + start: Int! + """Window end timestamp.""" + end: Int! + """Timestamp of last transaction in window.""" + lastTransactionAt: Int! + """Core stats (always present).""" + core: WindowedPredictionMarketCoreStats! + """Unique trader stats (optional).""" + uniqueTraders: WindowedPredictionMarketUniqueTraderStats + """Liquidity stats (optional).""" + liquidity: WindowedPredictionMarketLiquidityStats + """Open interest stats (optional).""" + openInterest: WindowedPredictionMarketOpenInterestStats + """Change stats for this window.""" + statsChange: WindowedPredictionMarketChangeStats! + """Scores for this window.""" + scores: PredictionMarketWindowScores! + """Outcome 0 stats.""" + outcome0Stats: EnhancedWindowedPredictionOutcomeStats! + """Outcome 1 stats.""" + outcome1Stats: EnhancedWindowedPredictionOutcomeStats! + """All-time aggregate stats.""" + allTimeStats: WindowedPredictionAllTimeStats! +} + +"""Scores across multiple time windows for a prediction entity.""" +type DetailedPredictionStatsScores { + """The score5m.""" + score5m: Float + """The score1.""" + score1: Float + """The score4.""" + score4: Float + """The score12.""" + score12: Float + """The score24.""" + score24: Float + """The score1w.""" + score1w: Float +} + +"""All-time aggregate stats for a prediction market.""" +type PredictionMarketAllTimeStats { + """Total volume.""" + volume: CurrencyValuePair! + """Venue-specific volume (optional).""" + venueVolume: CurrencyValuePair +} + +"""Lifecycle metadata for a prediction entity including status and timing.""" +type PredictionLifecycleStats { + """The age seconds.""" + ageSeconds: Int! + """The expected lifespan seconds.""" + expectedLifespanSeconds: Int + """The time to resolution seconds.""" + timeToResolutionSeconds: Int + """The is resolved.""" + isResolved: Boolean! + """The ID of the winning outcome.""" + winningOutcomeId: String +} + +"""Response returned by `detailedPredictionMarketStats`.""" +type DetailedPredictionMarketStats { + """The ID of the prediction market.""" + marketId: String! + """The prediction market.""" + predictionMarket: PredictionMarket! + """The prediction event.""" + predictionEvent: PredictionEvent! + """The timestamp of the last transaction.""" + lastTransactionAt: Int! + """Lifecycle metadata.""" + lifecycle: PredictionLifecycleStats! + """Stats for the 5-minute window.""" + statsMin5: EnhancedWindowedPredictionMarketStats + """Stats for the 1-hour window.""" + statsHour1: EnhancedWindowedPredictionMarketStats + """Stats for the 4-hour window.""" + statsHour4: EnhancedWindowedPredictionMarketStats + """Stats for the 12-hour window.""" + statsHour12: EnhancedWindowedPredictionMarketStats + """Stats for the 1-day window.""" + statsDay1: EnhancedWindowedPredictionMarketStats + """Stats for the 1-week window.""" + statsWeek1: EnhancedWindowedPredictionMarketStats + """Trending scores across time windows.""" + trendingScores: DetailedPredictionStatsScores! + """Relevance scores across time windows.""" + relevanceScores: DetailedPredictionStatsScores! + """Competitive scores across time windows.""" + competitiveScores: DetailedPredictionStatsScores! + """All-time aggregate stats.""" + allTimeStats: PredictionMarketAllTimeStats! +} + +"""Input type of `detailedPredictionEventStats`.""" +input DetailedPredictionEventStatsInput { + """The ID of the prediction event.""" + eventId: String! + """The unix timestamp.""" + timestamp: Int + """The stat durations to include.""" + durations: [PredictionStatsDuration!] + """The number of stat buckets to return.""" + bucketCount: Int +} + +"""Core event stats that are always available.""" +type WindowedPredictionEventCoreStats { + """Volume during this window.""" + volume: CurrencyValuePair! + """Number of trades during this window.""" + trades: Int! +} + +"""Buy/sell volume breakdown for an event.""" +type WindowedPredictionEventBuySellStats { + """Buy volume.""" + buyVolume: CurrencyValuePair! + """Sell volume.""" + sellVolume: CurrencyValuePair! +} + +"""Unique trader count during the period.""" +type WindowedPredictionEventUniqueTraderStats { + """Number of unique traders.""" + uniqueTraders: Int! +} + +"""Event-level liquidity OHLC data.""" +type WindowedPredictionEventLiquidityStats { + """Liquidity OHLC values.""" + liquidity: CurrencyOHLC! +} + +"""Event-level open interest OHLC data.""" +type WindowedPredictionEventOpenInterestStats { + """Open interest OHLC values.""" + openInterest: CurrencyOHLC! +} + +"""Change percentages for a prediction event over a time window.""" +type WindowedPredictionEventChangeStats { + """Volume change percentage.""" + volumeChange: Float! + """Trades change percentage.""" + tradesChange: Float! + """Buy volume change percentage (optional).""" + buyVolumeChange: Float + """Sell volume change percentage (optional).""" + sellVolumeChange: Float + """Unique traders change percentage (optional).""" + uniqueTradersChange: Float + """Liquidity change percentage (optional).""" + liquidityChange: Float + """Open interest change percentage (optional).""" + openInterestChange: Float +} + +"""Trending, relevance, and competitive scores for an event window.""" +type PredictionEventWindowScores { + """The trending score.""" + trending: Float! + """The relevance score.""" + relevance: Float! + """The competitive score.""" + competitive: Float! +} + +"""Enhanced stats for a prediction event over a time window.""" +type EnhancedWindowedPredictionEventStats { + """Window start timestamp.""" + start: Int! + """Window end timestamp.""" + end: Int! + """Timestamp of last transaction in window.""" + lastTransactionAt: Int! + """Core stats (always present).""" + core: WindowedPredictionEventCoreStats! + """Buy/sell breakdown (optional).""" + buySell: WindowedPredictionEventBuySellStats + """Unique trader stats (optional).""" + uniqueTraders: WindowedPredictionEventUniqueTraderStats + """Liquidity stats (optional).""" + liquidity: WindowedPredictionEventLiquidityStats + """Open interest stats (optional).""" + openInterest: WindowedPredictionEventOpenInterestStats + """Change stats for this window.""" + statsChange: WindowedPredictionEventChangeStats! + """Scores for this window.""" + scores: PredictionEventWindowScores! + """All-time aggregate stats.""" + allTimeStats: WindowedPredictionAllTimeStats! +} + +"""All-time aggregate stats for a prediction event.""" +type PredictionEventAllTimeStats { + """Total volume.""" + volume: CurrencyValuePair! + """Venue-specific volume (optional).""" + venueVolume: CurrencyValuePair +} + +"""Response returned by `detailedPredictionEventStats`.""" +type DetailedPredictionEventStats { + """The ID of the prediction event.""" + eventId: String! + """The prediction event.""" + predictionEvent: PredictionEvent! + """The prediction markets.""" + predictionMarkets: [PredictionMarket!]! + """The timestamp of the last transaction.""" + lastTransactionAt: Int! + """Lifecycle metadata.""" + lifecycle: PredictionLifecycleStats! + """Stats for the 5-minute window.""" + statsMin5: EnhancedWindowedPredictionEventStats + """Stats for the 1-hour window.""" + statsHour1: EnhancedWindowedPredictionEventStats + """Stats for the 4-hour window.""" + statsHour4: EnhancedWindowedPredictionEventStats + """Stats for the 12-hour window.""" + statsHour12: EnhancedWindowedPredictionEventStats + """Stats for the 1-day window.""" + statsDay1: EnhancedWindowedPredictionEventStats + """Stats for the 1-week window.""" + statsWeek1: EnhancedWindowedPredictionEventStats + """Trending scores across time windows.""" + trendingScores: DetailedPredictionStatsScores! + """Relevance scores across time windows.""" + relevanceScores: DetailedPredictionStatsScores! + """All-time aggregate stats.""" + allTimeStats: PredictionEventAllTimeStats! +} + +"""The duration used to request windowed trader stats.""" +enum PredictionTraderStatsDuration { + day30 + week1 + day1 + hour12 + hour4 + hour1 +} + +"""Input type of `detailedPredictionTraderStats`.""" +input DetailedPredictionTraderStatsInput { + """The ID of the prediction trader.""" + traderId: String! + """The unix timestamp.""" + timestamp: Int + """The stat durations to include.""" + durations: [PredictionTraderStatsDuration!] +} + +"""A prediction trader with aggregate stats and metadata.""" +type PredictionTrader { + """The unique identifier.""" + id: String! + """The prediction protocol.""" + protocol: PredictionProtocol! + """The venue trader id.""" + venueTraderId: String! + """The trader alias.""" + alias: String + """The primary address.""" + primaryAddress: String + """The linked addresses.""" + linkedAddresses: [String!] + """The profile image url.""" + profileImageUrl: String + """The profile url.""" + profileUrl: String + """The total trades count.""" + totalTradesCount: Int! + """The total volume usd.""" + totalVolumeUsd: String! + """The total volume ct.""" + totalVolumeCT: String! + """The timestamp of the first trade.""" + firstTradeTimestamp: Int! + """The timestamp of the last trade.""" + lastTradeTimestamp: Int! + """The biggest win usd.""" + biggestWinUsd: String! + """The biggest win ct.""" + biggestWinCT: String! + """The biggest loss usd.""" + biggestLossUsd: String! + """The biggest loss ct.""" + biggestLossCT: String! + """The all time profit usd.""" + allTimeProfitUsd: String! + """The all time profit ct.""" + allTimeProfitCT: String! + """The active markets count.""" + activeMarketsCount: Int! + """Labels applied to this entity.""" + labels: [String!] + """The creation timestamp.""" + createdAt: Int! + """The last update timestamp.""" + updatedAt: Int! +} + +"""Currency stats for a prediction trader over a time window.""" +type WindowedPredictionTraderCurrencyStats { + """Volume in USD.""" + volumeUsd: String! + """Buy volume in USD.""" + buyVolumeUsd: String! + """Sell volume in USD.""" + sellVolumeUsd: String! + """Volume in collateral token units.""" + volumeCT: String! + """Buy volume in collateral token units.""" + buyVolumeCT: String! + """Sell volume in collateral token units.""" + sellVolumeCT: String! + """The realized pnl usd.""" + realizedPnlUsd: String! + """The realized pnl ct.""" + realizedPnlCT: String! + """The realized profit percentage.""" + realizedProfitPercentage: Float! + """The average profit usd per trade.""" + averageProfitUsdPerTrade: String! + """The average profit ctper trade.""" + averageProfitCTPerTrade: String! + """The average swap amount usd.""" + averageSwapAmountUsd: String! + """The average swap amount ct.""" + averageSwapAmountCT: String! + """The held token acquisition cost usd.""" + heldTokenAcquisitionCostUsd: String! + """The held token acquisition cost ct.""" + heldTokenAcquisitionCostCT: String! + """The sold token acquisition cost usd.""" + soldTokenAcquisitionCostUsd: String! + """The sold token acquisition cost ct.""" + soldTokenAcquisitionCostCT: String! +} + +"""Non-currency stats for a prediction trader over a time window.""" +type WindowedPredictionTraderNonCurrencyStats { + """The number of trades.""" + trades: Int! + """The number of buys.""" + buys: Int! + """The number of sells.""" + sells: Int! + """The number of unique markets.""" + uniqueMarkets: Int! + """The wins.""" + wins: Int! + """The losses.""" + losses: Int! +} + +"""Change percentages for a prediction trader over a time window.""" +type WindowedPredictionTraderChangeStats { + """Volume change percentage.""" + volumeChange: Float! + """Buy volume.""" + buyVolumeChange: Float! + """Sell volume.""" + sellVolumeChange: Float! + """The percentage change.""" + realizedPnlChange: Float! + """Trades change percentage.""" + tradesChange: Float! + """The percentage change.""" + uniqueMarketsChange: Float! + """The percentage change.""" + winsChange: Float! + """The percentage change.""" + lossesChange: Float! +} + +"""All-time stats for a prediction trader in a windowed context.""" +type WindowedPredictionTraderAllTimeStats { + """The total volume usd.""" + totalVolumeUsd: String! + """The total volume ct.""" + totalVolumeCT: String! + """The total profit usd.""" + totalProfitUsd: String! + """The total profit ct.""" + totalProfitCT: String! +} + +"""Enhanced stats for a prediction trader over a time window, including scores.""" +type EnhancedWindowedPredictionTraderStats { + """The start.""" + start: Int! + """The end.""" + end: Int! + """The timestamp of the last transaction.""" + lastTransactionAt: Int! + """Currency stats for this window.""" + statsCurrency: WindowedPredictionTraderCurrencyStats! + """Non-currency stats for this window.""" + statsNonCurrency: WindowedPredictionTraderNonCurrencyStats! + """Change stats for this window.""" + statsChange: WindowedPredictionTraderChangeStats! +} + +"""Response returned by `detailedPredictionTraderStats`.""" +type DetailedPredictionTraderStats { + """The ID of the prediction trader.""" + traderId: String! + """The trader.""" + trader: PredictionTrader! + """The timestamp of the last transaction.""" + lastTransactionAt: Int! + """Stats for the 1-hour window.""" + statsHour1: EnhancedWindowedPredictionTraderStats + """Stats for the 4-hour window.""" + statsHour4: EnhancedWindowedPredictionTraderStats + """Stats for the 12-hour window.""" + statsHour12: EnhancedWindowedPredictionTraderStats + """Stats for the 1-day window.""" + statsDay1: EnhancedWindowedPredictionTraderStats + """Stats for the 1-week window.""" + statsWeek1: EnhancedWindowedPredictionTraderStats + """Stats for the Day30 window.""" + statsDay30: EnhancedWindowedPredictionTraderStats + """All-time aggregate stats.""" + allTimeStats: WindowedPredictionTraderAllTimeStats! +} + +"""The time resolution for prediction trader bar data.""" +enum PredictionTraderBarsResolution { + hour1 + hour4 + day1 + week1 +} + +"""Input type of `predictionTraderBars`.""" +input PredictionTraderBarsInput { + """The ID of the prediction trader.""" + traderId: String! + """The start timestamp (unix seconds).""" + from: Int! + """The end timestamp (unix seconds).""" + to: Int! + """The resolution details.""" + resolution: PredictionTraderBarsResolution! + """Number of bars to return counting back from `to`.""" + countback: Int + """Whether to omit bars with no activity.""" + removeEmptyBars: Boolean +} + +"""Bar data for a prediction trader at a single point in time.""" +type PredictionTraderBar { + """The unix timestamp for this bar.""" + t: Int! + """The number of trades.""" + trades: Int + """The number of buys.""" + buys: Int + """The number of sells.""" + sells: Int + """The number of unique markets.""" + uniqueMarkets: Int + """Volume in USD.""" + volumeUsd: String + """Buy volume in USD.""" + buyVolumeUsd: String + """Sell volume in USD.""" + sellVolumeUsd: String + """Volume in collateral token units.""" + volumeCT: String + """Buy volume in collateral token units.""" + buyVolumeCT: String + """Sell volume in collateral token units.""" + sellVolumeCT: String + """The wins.""" + wins: Int + """The losses.""" + losses: Int + """The realized pnl usd.""" + realizedPnlUsd: String + """The realized pnl ct.""" + realizedPnlCT: String + """The cumulative realized pnl usd.""" + cumulativeRealizedPnlUsd: String + """The cumulative realized pnl ct.""" + cumulativeRealizedPnlCT: String +} + +"""Response returned by `predictionTraderBars`.""" +type PredictionTraderBarsResponse { + """The ID of the prediction trader.""" + traderId: String! + """The trader.""" + trader: PredictionTrader + """The bar data.""" + bars: [PredictionTraderBar!]! +} + +"""Input type of `predictionTraderMarketsStats`.""" +input PredictionTraderMarketsStatsInput { + """The ID of the prediction trader.""" + traderId: String! + """Maximum number of results to return.""" + limit: Int + """Cursor for pagination.""" + cursor: String + """Associated market IDs.""" + marketIds: [String!] +} + +"""The PnL status of a trader position in a market.""" +enum PredictionTraderMarketPnlStatus { + WIN + LOSS + NEUTRAL +} + +"""Per-outcome stats for a trader within a specific market.""" +type PredictionTraderOutcomeStats { + """The ID of the prediction outcome.""" + outcomeId: String! + """The shares held. This number may not be the same as the actual shares held if the trader has not actually redeemed the shares, but we've already calculated the pnl.""" + sharesHeld: String! + """The actual shares held. If the trader has not actually redeemed the shares, but we've already calculated the pnl, this will still track their actual shares held.""" + actualSharesHeld: String! + """The avg entry price usd.""" + avgEntryPriceUsd: String! + """The avg entry price ct.""" + avgEntryPriceCT: String! + """The cost basis usd.""" + costBasisUsd: String! + """The cost basis ct.""" + costBasisCT: String! + """The number of buys.""" + buys: Int! + """The number of sells.""" + sells: Int! + """Buy volume in USD.""" + buyVolumeUsd: String! + """Sell volume in USD.""" + sellVolumeUsd: String! + """Buy volume in collateral token units.""" + buyVolumeCT: String! + """Sell volume in collateral token units.""" + sellVolumeCT: String! + """Buy volume in shares.""" + buyVolumeShares: String! + """Sell volume in shares.""" + sellVolumeShares: String! + """The realized pnl usd.""" + realizedPnlUsd: String! + """The realized pnl ct.""" + realizedPnlCT: String! + """The pnl status.""" + pnlStatus: PredictionTraderMarketPnlStatus! + """The timestamp of the first trade.""" + firstTradeTimestamp: Int! + """The timestamp of the last trade.""" + lastTradeTimestamp: Int! +} + +"""Per-market stats for a trader.""" +type PredictionTraderMarketStats { + """The ID of the prediction trader.""" + traderId: String! + """The ID of the prediction market.""" + marketId: String! + """The prediction market.""" + predictionMarket: PredictionMarket + """Whether the trader has an open position. Means they have actual shares held in the market (either outcome).""" + hasOpenPosition: Boolean! + """Outcome 0 stats.""" + outcome0Stats: PredictionTraderOutcomeStats! + """Outcome 1 stats.""" + outcome1Stats: PredictionTraderOutcomeStats! + """The creation timestamp.""" + createdAt: Int! + """The last update timestamp.""" + updatedAt: Int! +} + +"""Response returned by `predictionTraderMarketsStats`.""" +type PredictionTraderMarketsStatsConnection { + """The list of items.""" + items: [PredictionTraderMarketStats!]! + """Cursor for pagination.""" + cursor: String +} + +"""The prediction protocol or venue.""" +enum PredictionProtocol { + POLYMARKET + KALSHI +} + +"""The lifecycle status of a prediction event.""" +enum PredictionEventStatus { + OPEN + SUSPENDED + RESOLVED + CANCELLED + PENDING +} + +"""Resolution details for a settled prediction market or event.""" +type PredictionResolution { + """The resolution result.""" + result: String + """The resolution source.""" + source: String +} + +"""On-chain token used as collateral for a prediction market.""" +type PredictionCollateralToken { + """The token contract address.""" + tokenAddress: String! + """The network ID.""" + networkId: Int! + """The token or currency symbol.""" + symbol: String +} + +"""Fiat currency used as collateral for a prediction market.""" +type PredictionCollateralFiat { + """The token or currency symbol.""" + symbol: String! +} + +"""Collateral backing a prediction market, either on-chain token or fiat.""" +union PredictionCollateral = PredictionCollateralToken | PredictionCollateralFiat + +"""A prediction event containing one or more markets.""" +type PredictionEvent { + """The unique identifier.""" + id: String! + """The prediction protocol.""" + protocol: PredictionProtocol! + """The venue-specific event ID.""" + venueEventId: String! + """The venue-specific series ID.""" + venueSeriesId: String + """The current status.""" + status: PredictionEventStatus! + """The question or title.""" + question: String! + """The external URL.""" + url: String! + """Primary rules text.""" + rulesPrimary: String! + """Secondary rules text.""" + rulesSecondary: String + """Tags associated with this entity.""" + tags: [String!]! + """The timestamp when this entity opens.""" + opensAt: Int! + """The timestamp when this entity closes.""" + closesAt: Int + """The expected resolution timestamp.""" + resolvesAt: Int + """The actual resolution timestamp.""" + resolvedAt: Int + """The resolution details.""" + resolution: PredictionResolution + """URL of the large image.""" + imageLargeUrl: String + """URL of the thumbnail image.""" + imageThumbUrl: String + """URL of the small image.""" + imageSmallUrl: String + """The creation timestamp.""" + createdAt: Int! + """The last update timestamp.""" + updatedAt: Int! + """The network ID.""" + networkId: Int + """Associated market IDs.""" + marketIds: [String!] + """Categories associated with this entity.""" + categories: [PredictionCategory!] + """Per-domain structured enrichment (sports league/teams/start times today; new domains added over time). Null when no domain-specific signal extracted.""" + enrichedMetadata: PredictionEventEnrichedMetadata +} + +"""Input type of `predictionMarkets`.""" +input PredictionMarketsInput { + """Associated market IDs.""" + marketIds: [String!]! +} + +"""Input type of `predictionTraders`.""" +input PredictionTradersInput { + """The trader ids.""" + traderIds: [String!]! +} + +"""A prediction market with outcomes, pricing, and metadata.""" +type PredictionMarket { + """The unique identifier.""" + id: String! + """The prediction protocol.""" + protocol: PredictionProtocol! + """The venue-specific market ID.""" + venueMarketId: String! + """The venue-specific market slug.""" + venueMarketSlug: String + """The ID of the prediction event.""" + eventId: String + """The venue-specific event ID.""" + venueEventId: String + """The question or title.""" + question: String + """The display label.""" + label: String + """A clean, UI-ready label derived from `label`/`question` with the parent event name stripped (and Kalshi `Yes:`/`No:` prefixes unwrapped). Falls back to `question` when `label` is missing or `unknown`.""" + suggestedLabel: String + """The parent event label.""" + eventLabel: String + """Primary rules text.""" + rules: String + """Secondary rules text.""" + rules2: String + """Venue-specific outcome IDs.""" + venueOutcomeIds: [String!]! + """Internal outcome IDs.""" + outcomeIds: [String!]! + """Labels for each outcome.""" + outcomeLabels: [String!] + """The resolution details.""" + resolution: PredictionResolution + """URL of the large image.""" + imageLargeUrl: String + """URL of the thumbnail image.""" + imageThumbUrl: String + """URL of the small image.""" + imageSmallUrl: String + """The creation timestamp.""" + createdAt: Int + """The last update timestamp.""" + updatedAt: Int + """The timestamp when this entity opens.""" + opensAt: Int + """The timestamp when this entity closes.""" + closesAt: Int + """The expected resolution timestamp.""" + resolvesAt: Int + """The actual resolution timestamp.""" + resolvedAt: Int + """The last observation timestamp.""" + observedAt: Int! + """The network ID.""" + networkId: Int + """The exchange contract address.""" + exchangeAddress: String + """Categories associated with this entity.""" + categories: [PredictionCategory!] + """The ID of the winning outcome.""" + winningOutcomeId: String + """Per-domain structured enrichment (sports market type/teams/start times today). Null when no domain-specific signal extracted.""" + enrichedMetadata: PredictionMarketEnrichedMetadata +} + +"""The time resolution for prediction market bar data.""" +enum PredictionMarketBarsResolution { + min1 + min5 + min15 + min30 + hour1 + hour4 + hour12 + day1 + week1 +} + +"""Input type of `predictionMarketBars`.""" +input PredictionMarketBarsInput { + """The ID of the prediction market.""" + marketId: String! + """The start timestamp (unix seconds).""" + from: Int! + """The end timestamp (unix seconds).""" + to: Int! + """The resolution details.""" + resolution: PredictionMarketBarsResolution! + """Number of bars to return counting back from `to`.""" + countback: Int + """Whether to omit bars with no activity.""" + removeEmptyBars: Boolean +} + +"""OHLC price data for a prediction market bar.""" +type PredictionMarketBarOhlc { + """The open value.""" + o: String! + """The high value.""" + h: String! + """The low value.""" + l: String! + """The close value.""" + c: String! +} + +"""Bar data for a single outcome within a prediction market.""" +type PredictionOutcomeBar { + """The venue-specific outcome ID.""" + venueOutcomeId: String! + """The number of trades.""" + trades: Int + """The number of buys.""" + buys: Int + """The number of sells.""" + sells: Int + """Volume in shares.""" + volumeShares: String + """Buy volume in shares.""" + buyVolumeShares: String + """Sell volume in shares.""" + sellVolumeShares: String + """Volume in USD.""" + volumeUsd: String + """Buy volume in USD.""" + buyVolumeUsd: String + """Sell volume in USD.""" + sellVolumeUsd: String + """Volume in collateral token units.""" + volumeCollateralToken: String + """Buy volume in collateral token units.""" + buyVolumeCollateralToken: String + """Sell volume in collateral token units.""" + sellVolumeCollateralToken: String + """The price usd.""" + priceUsd: PredictionMarketBarOhlc + """The price collateral token.""" + priceCollateralToken: PredictionMarketBarOhlc + """Liquidity in USD.""" + liquidityUsd: PredictionMarketBarOhlc + """The liquidity collateral token.""" + liquidityCollateralToken: PredictionMarketBarOhlc + """The bid usd.""" + bidUsd: PredictionMarketBarOhlc + """The bid collateral token.""" + bidCollateralToken: PredictionMarketBarOhlc + """The ask usd.""" + askUsd: PredictionMarketBarOhlc + """The ask collateral token.""" + askCollateralToken: PredictionMarketBarOhlc + """The two percent bid depth usd.""" + twoPercentBidDepthUsd: PredictionMarketBarOhlc + """The two percent bid depth collateral token.""" + twoPercentBidDepthCollateralToken: PredictionMarketBarOhlc + """The two percent ask depth usd.""" + twoPercentAskDepthUsd: PredictionMarketBarOhlc + """The two percent ask depth collateral token.""" + twoPercentAskDepthCollateralToken: PredictionMarketBarOhlc +} + +"""Bar data for a prediction market at a single point in time.""" +type PredictionMarketBar { + """The unix timestamp for this bar.""" + t: Int! + """Volume in USD.""" + volumeUsd: String + """Volume in collateral token units.""" + volumeCollateralToken: String + """Volume in shares.""" + volumeShares: String + """The number of unique traders.""" + uniqueTraders: Int + """The last event timestamp.""" + lastEventTimestamp: Int + """The number of trades.""" + trades: Int + """The all time volume usd (from on-chain trades).""" + allTimeVolumeUsd: String + """The all time venue volume usd (reported by venue).""" + allTimeVenueVolumeUsd: String + """The all time volume collateral token (from on-chain trades).""" + allTimeVolumeCollateralToken: String + """The all time venue volume collateral token (reported by venue).""" + allTimeVenueVolumeCollateralToken: String + """Open interest in USD.""" + openInterestUsd: PredictionMarketBarOhlc + """Outcome 0 data.""" + outcome0: PredictionOutcomeBar + """Outcome 1 data.""" + outcome1: PredictionOutcomeBar +} + +"""Response returned by `predictionMarketBars`.""" +type PredictionMarketBarsResponse { + """The ID of the prediction market.""" + marketId: String! + """The prediction market.""" + predictionMarket: PredictionMarket! + """The prediction event.""" + predictionEvent: PredictionEvent! + """The bar data.""" + bars: [PredictionMarketBar!]! +} + +"""Input type of `predictionEventTopMarketsBars`.""" +input PredictionEventTopMarketsBarsInput { + """The event ID to fetch top markets for""" + eventId: String! + """Unix timestamp (seconds) for the start of the range""" + from: Int! + """Unix timestamp (seconds) for the end of the range""" + to: Int! + """Resolution for the bars (e.g., min1, min5, hour1, day1)""" + resolution: PredictionMarketBarsResolution! + """Number of bars to fetch backwards from 'to' (alternative to 'from')""" + countback: Int + """Maximum number of markets to return (default 5, max 10)""" + limit: Int + """Use pre-computed leaderboard ranking (overrides rankBy options when true)""" + useLeaderboard: Boolean + """Market-level attribute to rank by (use this OR rankByOutcome + rankByOutcomeAttribute)""" + rankBy: PredictionMarketRankingAttribute + """Which outcome to rank by (use with rankByOutcomeAttribute)""" + rankByOutcome: PredictionOutcomeIndex + """Outcome-level attribute to rank by (requires rankByOutcome)""" + rankByOutcomeAttribute: PredictionOutcomeRankingAttribute + """Direction to rank (DESC = highest first)""" + rankDirection: RankingDirection + """Whether to remove empty bars from the response""" + removeEmptyBars: Boolean + """Explicit list of market IDs to fetch (overrides ranking if provided)""" + marketIds: [String!] +} + +"""Response returned by `predictionEventTopMarketsBars`.""" +type PredictionEventTopMarketsBarsResponse { + """The ID of the prediction event.""" + eventId: String! + """The parent prediction event""" + predictionEvent: PredictionEvent + """Array of market bars (max 10)""" + marketBars: [PredictionMarketBarsResponse!]! +} + +"""The time resolution for prediction event bar data.""" +enum PredictionEventBarsResolution { + min1 + min5 + min15 + min30 + hour1 + hour4 + hour12 + day1 + week1 +} + +"""Input type of `predictionEventBars`.""" +input PredictionEventBarsInput { + """The ID of the prediction event.""" + eventId: String! + """The start timestamp (unix seconds).""" + from: Int! + """The end timestamp (unix seconds).""" + to: Int! + """The resolution details.""" + resolution: PredictionEventBarsResolution! + """Number of bars to return counting back from `to`.""" + countback: Int + """Whether to omit bars with no activity.""" + removeEmptyBars: Boolean +} + +"""OHLC price data for a prediction event bar.""" +type PredictionEventBarOhlc { + """The open value.""" + o: String! + """The high value.""" + h: String! + """The low value.""" + l: String! + """The close value.""" + c: String! +} + +"""Bar data for a prediction event at a single point in time.""" +type PredictionEventBar { + """The unix timestamp for this bar.""" + t: Int! + """Volume in USD.""" + volumeUsd: String! + """Buy volume in USD. Null if protocol doesn't provide directional data.""" + buyVolumeUsd: String + """Sell volume in USD. Null if protocol doesn't provide directional data.""" + sellVolumeUsd: String + """The total volume usd.""" + totalVolumeUsd: String! + """The venue volume usd. Null if protocol doesn't provide venue volume.""" + venueVolumeUsd: String + """Volume in collateral token units.""" + volumeCollateralToken: String + """Buy volume in collateral token units.""" + buyVolumeCollateralToken: String + """Sell volume in collateral token units.""" + sellVolumeCollateralToken: String + """Total volume in collateral token (nullable for old aggregates)""" + totalVolumeCollateralToken: String + """Venue volume in collateral token (nullable for old aggregates)""" + venueVolumeCollateralToken: String + """The number of trades.""" + trades: Int! + """The number of unique traders. Null if protocol doesn't track unique traders.""" + uniqueTraders: Int + """The last event timestamp.""" + lastEventTimestamp: Int! + """Liquidity in USD. Null if protocol doesn't provide liquidity data.""" + liquidityUsd: PredictionEventBarOhlc + """Liquidity OHLC in collateral token (nullable for old aggregates)""" + liquidityCollateralToken: PredictionEventBarOhlc + """Open interest in USD. Null if protocol doesn't provide open interest data.""" + openInterestUsd: PredictionEventBarOhlc + """Open interest OHLC in collateral token (nullable for old aggregates)""" + openInterestCollateralToken: PredictionEventBarOhlc +} + +"""Response returned by `predictionEventBars`.""" +type PredictionEventBarsResponse { + """The ID of the prediction event.""" + eventId: String! + """The prediction event.""" + predictionEvent: PredictionEvent + """The prediction markets.""" + predictionMarkets: [PredictionMarket!]! + """The bar data.""" + bars: [PredictionEventBar!]! +} + +"""The type of a prediction trade.""" +enum PredictionTradeType { + TRADE + BUY + SELL + BUY_COUNTERPARTY + SELL_COUNTERPARTY + PAYOUT_REDEMPTION @deprecated(reason: "PAYOUT_REDEMPTION is deprecated and will be removed in the future. Use POSITION_REDEEMED instead.") + POSITION_REDEEMED +} + +"""Input type of `predictionTrades`.""" +input PredictionTradesInput { + """The ID of the prediction market.""" + marketId: String + """The ID of the prediction event.""" + eventId: String + """The ID of the prediction trader.""" + traderId: String + """Maximum number of results to return.""" + limit: Int + """Cursor for pagination.""" + cursor: String +} + +"""A single prediction trade.""" +type PredictionTrade { + """The ID of the prediction market.""" + marketId: String! + """The sort key.""" + sortKey: String! + """The ID of the prediction outcome.""" + outcomeId: String! + """The label of the outcome.""" + outcomeLabel: String! + """The prediction protocol.""" + protocol: PredictionProtocol! + """The type of trade.""" + tradeType: PredictionTradeType! + """The maker.""" + maker: String + """The unix timestamp.""" + timestamp: Int! + """The outcome index.""" + outcomeIndex: Int + """The price usd.""" + priceUsd: String + """The price collateral.""" + priceCollateral: String + """The token amount.""" + amount: String + """The amount collateral.""" + amountCollateral: String + """The amount usd.""" + amountUsd: String + """The transaction hash.""" + transactionHash: String + """The block number.""" + blockNumber: Int + """The network ID.""" + networkId: Int + """The exchange contract address.""" + exchangeAddress: String + """The transaction id.""" + transactionId: String + """The prediction market.""" + predictionMarket: PredictionMarket + """The ID of the prediction trader.""" + traderId: String +} + +"""A paginated list of prediction trades.""" +type PredictionTradesConnection { + """The list of items.""" + items: [PredictionTrade!]! + """Cursor for pagination.""" + cursor: String +} + +"""Input type of `predictionTokenHolders`.""" +input PredictionTokenHoldersInput { + """The ID of the prediction market.""" + marketId: String! + """The token ID.""" + tokenId: String! + """Maximum number of results to return.""" + limit: Int + """Cursor for pagination.""" + cursor: String +} + +"""A paginated list of prediction token holders.""" +type PredictionTokenHoldersConnection { + """The list of items.""" + items: [PredictionTokenBalance!]! + """The total number of items.""" + total: Int! + """Cursor for pagination.""" + cursor: String +} + +"""A wallet's token balance for a prediction market.""" +type PredictionTokenBalance { + """The wallet address.""" + walletAddress: String! + """The token amount.""" + amount: String! + """The associated prediction trader.""" + predictionTrader: PredictionTrader +} + +"""Input for `predictionTraderHoldings` query.""" +input PredictionTraderHoldingsInput { + """The trader ID (format: {walletAddress}:{protocol}, e.g. 0x123...abc:Polymarket)""" + traderId: String! + """Maximum number of results to return.""" + limit: Int + """Cursor for pagination.""" + cursor: String +} + +"""A trader's token holding for a prediction outcome.""" +type PredictionTraderHolding { + """The token ID (venue outcome ID).""" + tokenId: String! + """The trader ID.""" + traderId: String! + """The venue trader ID (wallet address).""" + venueTraderId: String! + """The token balance amount.""" + amount: String! + """The prediction market this holding belongs to.""" + market: PredictionMarket + """The outcome index within the market (0 or 1).""" + outcomeIndex: Int +} + +"""A paginated list of trader holdings.""" +type PredictionTraderHoldingsConnection { + """The list of holdings.""" + items: [PredictionTraderHolding!]! + """Cursor for pagination.""" + cursor: String +} + +"""Filters for prediction events.""" +input PredictionEventFilters { + """The prediction protocol.""" + protocol: [PredictionProtocol!] + """The current status.""" + status: [PredictionEventStatus!] + """Categories associated with this entity. Mutually exclusive with excludeCategories and hasCategories.""" + categories: [String!] + """Exclude events with these categories. Mutually exclusive with categories and hasCategories.""" + excludeCategories: [String!] + """Filter by whether the event has any categories. Mutually exclusive with categories and excludeCategories.""" + hasCategories: Boolean + """The resolution source.""" + resolutionSource: [String!] + """The venue-specific series ID.""" + venueSeriesId: [String!] + """The unix timestamp.""" + timestamp: NumberFilter + """The timestamp of the last transaction.""" + lastTransactionAt: NumberFilter + """The creation timestamp.""" + createdAt: NumberFilter + """The age.""" + age: NumberFilter + """The expected lifespan.""" + expectedLifespan: NumberFilter + """The timestamp when this entity opens.""" + opensAt: NumberFilter + """The timestamp when this entity closes.""" + closesAt: NumberFilter + """The expected resolution timestamp.""" + resolvesAt: NumberFilter + """The actual resolution timestamp.""" + resolvedAt: NumberFilter + """Data for marketCount.""" + marketCount: NumberFilter + """The trending score.""" + trendingScore5m: NumberFilter + """The trending score.""" + trendingScore1h: NumberFilter + """The trending score.""" + trendingScore4h: NumberFilter + """The trending score.""" + trendingScore12h: NumberFilter + """The trending score.""" + trendingScore24h: NumberFilter + """The trending score.""" + trendingScore1w: NumberFilter + """The relevance score.""" + relevanceScore5m: NumberFilter + """The relevance score.""" + relevanceScore1h: NumberFilter + """The relevance score.""" + relevanceScore4h: NumberFilter + """The relevance score.""" + relevanceScore12h: NumberFilter + """The relevance score.""" + relevanceScore24h: NumberFilter + """The relevance score.""" + relevanceScore1w: NumberFilter + """Liquidity in USD.""" + liquidityUsd: NumberFilter + """Liquidity in collateral token units.""" + liquidityCT: NumberFilter + """The percentage change.""" + liquidityChange5m: NumberFilter + """The percentage change.""" + liquidityChange1h: NumberFilter + """The percentage change.""" + liquidityChange4h: NumberFilter + """The percentage change.""" + liquidityChange12h: NumberFilter + """The percentage change.""" + liquidityChange24h: NumberFilter + """The percentage change.""" + liquidityChange1w: NumberFilter + """Open interest in USD.""" + openInterestUsd: NumberFilter + """Open interest in collateral token units.""" + openInterestCT: NumberFilter + """The percentage change.""" + openInterestChange5m: NumberFilter + """The percentage change.""" + openInterestChange1h: NumberFilter + """The percentage change.""" + openInterestChange4h: NumberFilter + """The percentage change.""" + openInterestChange12h: NumberFilter + """The percentage change.""" + openInterestChange24h: NumberFilter + """The percentage change.""" + openInterestChange1w: NumberFilter + """Volume in USD.""" + volumeUsd5m: NumberFilter + """Volume in USD.""" + volumeUsd1h: NumberFilter + """Volume in USD.""" + volumeUsd4h: NumberFilter + """Volume in USD.""" + volumeUsd12h: NumberFilter + """Volume in USD.""" + volumeUsd24h: NumberFilter + """Volume in USD.""" + volumeUsd1w: NumberFilter + """Volume in USD.""" + volumeUsdAll: NumberFilter + """Volume in collateral token units.""" + volumeCTAll: NumberFilter + """The venue volume usd.""" + venueVolumeUsd: NumberFilter + """The venue volume ct.""" + venueVolumeCT: NumberFilter + """The percentage change.""" + volumeChange5m: NumberFilter + """The percentage change.""" + volumeChange1h: NumberFilter + """The percentage change.""" + volumeChange4h: NumberFilter + """The percentage change.""" + volumeChange12h: NumberFilter + """The percentage change.""" + volumeChange24h: NumberFilter + """The percentage change.""" + volumeChange1w: NumberFilter + """The trades5m.""" + trades5m: NumberFilter + """The trades1h.""" + trades1h: NumberFilter + """The trades4h.""" + trades4h: NumberFilter + """The trades12h.""" + trades12h: NumberFilter + """The trades24h.""" + trades24h: NumberFilter + """The trades1w.""" + trades1w: NumberFilter + """The percentage change.""" + tradesChange5m: NumberFilter + """The percentage change.""" + tradesChange1h: NumberFilter + """The percentage change.""" + tradesChange4h: NumberFilter + """The percentage change.""" + tradesChange12h: NumberFilter + """The percentage change.""" + tradesChange24h: NumberFilter + """The percentage change.""" + tradesChange1w: NumberFilter + """The unique traders5m.""" + uniqueTraders5m: NumberFilter + """The unique traders1h.""" + uniqueTraders1h: NumberFilter + """The unique traders4h.""" + uniqueTraders4h: NumberFilter + """The unique traders12h.""" + uniqueTraders12h: NumberFilter + """The unique traders24h.""" + uniqueTraders24h: NumberFilter + """The unique traders1w.""" + uniqueTraders1w: NumberFilter + """The percentage change.""" + uniqueTradersChange5m: NumberFilter + """The percentage change.""" + uniqueTradersChange1h: NumberFilter + """The percentage change.""" + uniqueTradersChange4h: NumberFilter + """The percentage change.""" + uniqueTradersChange12h: NumberFilter + """The percentage change.""" + uniqueTradersChange24h: NumberFilter + """The percentage change.""" + uniqueTradersChange1w: NumberFilter +} + +"""The attribute used to rank prediction events.""" +enum PredictionEventRankingAttribute { + timestamp + lastTransactionAt + createdAt + age + expectedLifespan + opensAt + closesAt + resolvesAt + resolvedAt + marketCount + trendingScore5m + trendingScore1h + trendingScore4h + trendingScore12h + trendingScore24h + trendingScore1w + relevanceScore5m + relevanceScore1h + relevanceScore4h + relevanceScore12h + relevanceScore24h + relevanceScore1w + liquidityUsd + liquidityCT + liquidityChange5m + liquidityChange1h + liquidityChange4h + liquidityChange12h + liquidityChange24h + liquidityChange1w + openInterestUsd + openInterestCT + openInterestChange5m + openInterestChange1h + openInterestChange4h + openInterestChange12h + openInterestChange24h + openInterestChange1w + volumeUsd5m + volumeUsd1h + volumeUsd4h + volumeUsd12h + volumeUsd24h + volumeUsd1w + volumeUsdAll + volumeCTAll + venueVolumeUsd + venueVolumeCT + volumeChange5m + volumeChange1h + volumeChange4h + volumeChange12h + volumeChange24h + volumeChange1w + trades5m + trades1h + trades4h + trades12h + trades24h + trades1w + tradesChange5m + tradesChange1h + tradesChange4h + tradesChange12h + tradesChange24h + tradesChange1w + uniqueTraders5m + uniqueTraders1h + uniqueTraders4h + uniqueTraders12h + uniqueTraders24h + uniqueTraders1w + uniqueTradersChange5m + uniqueTradersChange1h + uniqueTradersChange4h + uniqueTradersChange12h + uniqueTradersChange24h + uniqueTradersChange1w + """Score from phrase matching (for search queries)""" + phraseScore +} + +"""A ranking to apply when sorting prediction events.""" +input PredictionEventRanking { + """The attribute to rank by.""" + attribute: PredictionEventRankingAttribute! + """The sort direction.""" + direction: RankingDirection +} + +"""Summary market data within a prediction event filter result.""" +type PredictionEventFilterResultMarket { + """The unique identifier.""" + id: String! + """The display label.""" + label: String +} + +"""Metadata for a prediction event returned in search results.""" +type SearchPredictionEvent { + """The unique identifier.""" + id: String! + """The venue-specific event ID.""" + venueEventId: String! + """The venue-specific series ID.""" + venueSeriesId: String + """The exchange contract address.""" + exchangeAddress: String + """The network ID.""" + networkId: Int + """The prediction protocol.""" + protocol: PredictionProtocol! + """The current status.""" + status: PredictionEventStatus! + """The URL slug.""" + slug: String! + """The question or title.""" + question: String! + """The description.""" + description: String + """Tags associated with this entity.""" + tags: [String!]! + """URL of the thumbnail image.""" + imageThumbUrl: String + """The venue url.""" + venueUrl: String! + """The creation timestamp.""" + createdAt: Int! + """The timestamp when this entity opens.""" + opensAt: Int! + """The timestamp when this entity closes.""" + closesAt: Int + """The expected resolution timestamp.""" + resolvesAt: Int + """The actual resolution timestamp.""" + resolvedAt: Int +} + +"""A prediction event matching a set of filter parameters.""" +type PredictionEventFilterResult { + """The unique identifier.""" + id: String! + """The unix timestamp.""" + timestamp: Int! + """The timestamp of the last transaction.""" + lastTransactionAt: Int! + """Simplified event data from search index. Use predictionEvent for full event details.""" + event: SearchPredictionEvent! + """Full prediction event loaded from database. May be null if event no longer exists.""" + predictionEvent: PredictionEvent + """The prediction protocol.""" + protocol: PredictionProtocol! + """The current status.""" + status: PredictionEventStatus! + """The creation timestamp.""" + createdAt: Int! + """The age.""" + age: Int + """The expected lifespan.""" + expectedLifespan: Int + """The timestamp when this entity opens.""" + opensAt: Int! + """The timestamp when this entity closes.""" + closesAt: Int + """The expected resolution timestamp.""" + resolvesAt: Int + """The actual resolution timestamp.""" + resolvedAt: Int + """The top markets for this event.""" + topMarkets: [PredictionEventTopMarket!]! + """Data for markets.""" + markets: [PredictionEventFilterResultMarket!]! + """Data for marketCount.""" + marketCount: Int! + """Categories associated with this entity.""" + categories: [String!]! + """The resolution source.""" + resolutionSource: String + """The related event ids.""" + relatedEventIds: [String!]! + """The trending score.""" + trendingScore5m: Float + """The trending score.""" + trendingScore1h: Float + """The trending score.""" + trendingScore4h: Float + """The trending score.""" + trendingScore12h: Float + """The trending score.""" + trendingScore24h: Float + """The trending score.""" + trendingScore1w: Float + """The relevance score.""" + relevanceScore5m: Float + """The relevance score.""" + relevanceScore1h: Float + """The relevance score.""" + relevanceScore4h: Float + """The relevance score.""" + relevanceScore12h: Float + """The relevance score.""" + relevanceScore24h: Float + """The relevance score.""" + relevanceScore1w: Float + """Liquidity in USD.""" + liquidityUsd: String + """Liquidity in collateral token units.""" + liquidityCT: String + """The percentage change.""" + liquidityChange5m: Float + """The percentage change.""" + liquidityChange1h: Float + """The percentage change.""" + liquidityChange4h: Float + """The percentage change.""" + liquidityChange12h: Float + """The percentage change.""" + liquidityChange24h: Float + """The percentage change.""" + liquidityChange1w: Float + """Open interest in USD.""" + openInterestUsd: String + """Open interest in collateral token units.""" + openInterestCT: String + """The percentage change.""" + openInterestChange5m: Float + """The percentage change.""" + openInterestChange1h: Float + """The percentage change.""" + openInterestChange4h: Float + """The percentage change.""" + openInterestChange12h: Float + """The percentage change.""" + openInterestChange24h: Float + """The percentage change.""" + openInterestChange1w: Float + """Volume in USD.""" + volumeUsd5m: String + """Volume in USD.""" + volumeUsd1h: String + """Volume in USD.""" + volumeUsd4h: String + """Volume in USD.""" + volumeUsd12h: String + """Volume in USD.""" + volumeUsd24h: String + """Volume in USD.""" + volumeUsd1w: String + """Volume in USD.""" + volumeUsdAll: String + """Volume in collateral token units.""" + volumeCTAll: String + """The venue volume usd.""" + venueVolumeUsd: String + """The venue volume ct.""" + venueVolumeCT: String + """The percentage change.""" + volumeChange5m: Float + """The percentage change.""" + volumeChange1h: Float + """The percentage change.""" + volumeChange4h: Float + """The percentage change.""" + volumeChange12h: Float + """The percentage change.""" + volumeChange24h: Float + """The percentage change.""" + volumeChange1w: Float + """The trades5m.""" + trades5m: Int + """The trades1h.""" + trades1h: Int + """The trades4h.""" + trades4h: Int + """The trades12h.""" + trades12h: Int + """The trades24h.""" + trades24h: Int + """The trades1w.""" + trades1w: Int + """The percentage change.""" + tradesChange5m: Float + """The percentage change.""" + tradesChange1h: Float + """The percentage change.""" + tradesChange4h: Float + """The percentage change.""" + tradesChange12h: Float + """The percentage change.""" + tradesChange24h: Float + """The percentage change.""" + tradesChange1w: Float + """The unique traders5m.""" + uniqueTraders5m: Int + """The unique traders1h.""" + uniqueTraders1h: Int + """The unique traders4h.""" + uniqueTraders4h: Int + """The unique traders12h.""" + uniqueTraders12h: Int + """The unique traders24h.""" + uniqueTraders24h: Int + """The unique traders1w.""" + uniqueTraders1w: Int + """The percentage change.""" + uniqueTradersChange5m: Float + """The percentage change.""" + uniqueTradersChange1h: Float + """The percentage change.""" + uniqueTradersChange4h: Float + """The percentage change.""" + uniqueTradersChange12h: Float + """The percentage change.""" + uniqueTradersChange24h: Float + """The percentage change.""" + uniqueTradersChange1w: Float + """The event shape.""" + eventShape: PredictionEventShape +} + +"""A top market for a prediction event.""" +type PredictionEventTopMarket { + """The unique identifier of the market.""" + marketId: String! + """The label.""" + label: String! + """The label of the outcome 0.""" + outcome0Label: String! + """The label of the outcome 1.""" + outcome1Label: String! + """The bid CT of the outcome 0.""" + outcome0BidCT: String! + """The bid USD of the outcome 0.""" + outcome0BidUSD: String! + """The ask CT of the outcome 0.""" + outcome0AskCT: String! + """The ask USD of the outcome 0.""" + outcome0AskUSD: String! + """The bid CT of the outcome 1.""" + outcome1BidCT: String! + """The bid USD of the outcome 1.""" + outcome1BidUSD: String! + """The ask CT of the outcome 1.""" + outcome1AskCT: String! + """The ask USD of the outcome 1.""" + outcome1AskUSD: String! + """The volume CT of the market in the last 1 day.""" + volumeCT1d: String! + """The volume USD of the market in the last 1 day.""" + volumeUSD1d: String! + """The volume CT of the market in the last 1 week.""" + volumeCT1w: String! + """The volume USD of the market in the last 1 week.""" + volumeUSD1w: String! + """The volume CT of the market in all time.""" + volumeCTAll: String! + """The volume USD of the market in all time.""" + volumeUSDAll: String! + """thumbUrl of the market.""" + thumbUrl: String + """The role of the market.""" + role: PredictionMarketRole + """The suggested label of the market.""" + suggestedLabel: String + """ISO 3166-1 alpha-2 country code when the row is a country entrant (Eurovision, World Cup, Olympics, etc.). Null otherwise. Mirrors `classification.entrant.countryCode` from the per-market classification metadata, hoisted onto the top-market row so card clients don't have to issue a follow-up query just to render a flag.""" + countryCode: String +} + +"""Response returned by `filterPredictionEvents`.""" +type PredictionEventFilterConnection { + """Total number of matching results.""" + count: Int! + """The current page number.""" + page: Int! + """The list of results.""" + results: [PredictionEventFilterResult!]! +} + +"""Filters for prediction markets.""" +input PredictionMarketFilters { + """The prediction protocol.""" + protocol: [PredictionProtocol!] + """The current status.""" + status: [PredictionEventStatus!] + """Categories associated with this entity. Mutually exclusive with excludeCategories and hasCategories.""" + categories: [String!] + """Exclude markets with these categories. Mutually exclusive with categories and hasCategories.""" + excludeCategories: [String!] + """Filter by whether the market has any categories. Mutually exclusive with categories and excludeCategories.""" + hasCategories: Boolean + """The resolution source.""" + resolutionSource: [String!] + """The unix timestamp.""" + timestamp: NumberFilter + """The timestamp of the last transaction.""" + lastTransactionAt: NumberFilter + """The age.""" + age: NumberFilter + """The timestamp when this entity was created.""" + createdAt: NumberFilter + """The expected lifespan.""" + expectedLifespan: NumberFilter + """The timestamp when this entity opens.""" + opensAt: NumberFilter + """The timestamp when this entity closes.""" + closesAt: NumberFilter + """The expected resolution timestamp.""" + resolvesAt: NumberFilter + """The trending score.""" + trendingScore5m: NumberFilter + """The trending score.""" + trendingScore1h: NumberFilter + """The trending score.""" + trendingScore4h: NumberFilter + """The trending score.""" + trendingScore12h: NumberFilter + """The trending score.""" + trendingScore24h: NumberFilter + """The trending score.""" + trendingScore1w: NumberFilter + """The relevance score.""" + relevanceScore5m: NumberFilter + """The relevance score.""" + relevanceScore1h: NumberFilter + """The relevance score.""" + relevanceScore4h: NumberFilter + """The relevance score.""" + relevanceScore12h: NumberFilter + """The relevance score.""" + relevanceScore24h: NumberFilter + """The relevance score.""" + relevanceScore1w: NumberFilter + """The competitive score.""" + competitiveScore5m: NumberFilter + """The competitive score.""" + competitiveScore1h: NumberFilter + """The competitive score.""" + competitiveScore4h: NumberFilter + """The competitive score.""" + competitiveScore12h: NumberFilter + """The competitive score.""" + competitiveScore24h: NumberFilter + """The competitive score.""" + competitiveScore1w: NumberFilter + """Liquidity in USD.""" + liquidityUsd: NumberFilter + """Liquidity in collateral token units.""" + liquidityCT: NumberFilter + """The percentage change.""" + liquidityChange5m: NumberFilter + """The percentage change.""" + liquidityChange1h: NumberFilter + """The percentage change.""" + liquidityChange4h: NumberFilter + """The percentage change.""" + liquidityChange12h: NumberFilter + """The percentage change.""" + liquidityChange24h: NumberFilter + """The percentage change.""" + liquidityChange1w: NumberFilter + """Open interest in USD.""" + openInterestUsd: NumberFilter + """Open interest in collateral token units.""" + openInterestCT: NumberFilter + """The percentage change.""" + openInterestChange5m: NumberFilter + """The percentage change.""" + openInterestChange1h: NumberFilter + """The percentage change.""" + openInterestChange4h: NumberFilter + """The percentage change.""" + openInterestChange12h: NumberFilter + """The percentage change.""" + openInterestChange24h: NumberFilter + """The percentage change.""" + openInterestChange1w: NumberFilter + """Volume in USD.""" + volumeUsd5m: NumberFilter + """Volume in USD.""" + volumeUsd1h: NumberFilter + """Volume in USD.""" + volumeUsd4h: NumberFilter + """Volume in USD.""" + volumeUsd12h: NumberFilter + """Volume in USD.""" + volumeUsd24h: NumberFilter + """Volume in USD.""" + volumeUsd1w: NumberFilter + """Volume in USD.""" + volumeUsdAll: NumberFilter + """Volume in collateral token units.""" + volumeCTAll: NumberFilter + """The venue volume usd.""" + venueVolumeUsd: NumberFilter + """The venue volume ct.""" + venueVolumeCT: NumberFilter + """The percentage change.""" + volumeChange5m: NumberFilter + """The percentage change.""" + volumeChange1h: NumberFilter + """The percentage change.""" + volumeChange4h: NumberFilter + """The percentage change.""" + volumeChange12h: NumberFilter + """The percentage change.""" + volumeChange24h: NumberFilter + """The percentage change.""" + volumeChange1w: NumberFilter + """The trades5m.""" + trades5m: NumberFilter + """The trades1h.""" + trades1h: NumberFilter + """The trades4h.""" + trades4h: NumberFilter + """The trades12h.""" + trades12h: NumberFilter + """The trades24h.""" + trades24h: NumberFilter + """The trades1w.""" + trades1w: NumberFilter + """The avg trade size usd5m.""" + avgTradeSizeUsd5m: NumberFilter + """The avg trade size usd1h.""" + avgTradeSizeUsd1h: NumberFilter + """The avg trade size usd4h.""" + avgTradeSizeUsd4h: NumberFilter + """The avg trade size usd12h.""" + avgTradeSizeUsd12h: NumberFilter + """The avg trade size usd24h.""" + avgTradeSizeUsd24h: NumberFilter + """The avg trade size usd1w.""" + avgTradeSizeUsd1w: NumberFilter + """The percentage change.""" + tradesChange5m: NumberFilter + """The percentage change.""" + tradesChange1h: NumberFilter + """The percentage change.""" + tradesChange4h: NumberFilter + """The percentage change.""" + tradesChange12h: NumberFilter + """The percentage change.""" + tradesChange24h: NumberFilter + """The percentage change.""" + tradesChange1w: NumberFilter + """The unique traders5m.""" + uniqueTraders5m: NumberFilter + """The unique traders1h.""" + uniqueTraders1h: NumberFilter + """The unique traders4h.""" + uniqueTraders4h: NumberFilter + """The unique traders12h.""" + uniqueTraders12h: NumberFilter + """The unique traders24h.""" + uniqueTraders24h: NumberFilter + """The unique traders1w.""" + uniqueTraders1w: NumberFilter + """The percentage change.""" + uniqueTradersChange5m: NumberFilter + """The percentage change.""" + uniqueTradersChange1h: NumberFilter + """The percentage change.""" + uniqueTradersChange4h: NumberFilter + """The percentage change.""" + uniqueTradersChange12h: NumberFilter + """The percentage change.""" + uniqueTradersChange24h: NumberFilter + """The percentage change.""" + uniqueTradersChange1w: NumberFilter + """The price competitiveness.""" + priceCompetitiveness: NumberFilter + """The volume imbalance24h.""" + volumeImbalance24h: NumberFilter + """The liquidity asymmetry.""" + liquidityAsymmetry: NumberFilter + """The implied probability sum.""" + impliedProbabilitySum: NumberFilter + """The max price range5m.""" + maxPriceRange5m: NumberFilter + """The max price range1h.""" + maxPriceRange1h: NumberFilter + """The max price range4h.""" + maxPriceRange4h: NumberFilter + """The max price range12h.""" + maxPriceRange12h: NumberFilter + """The max price range24h.""" + maxPriceRange24h: NumberFilter + """The max price range1w.""" + maxPriceRange1w: NumberFilter + """Filter on outcome0 properties. All conditions must be met (AND logic).""" + outcome0: PredictionOutcomeFilters + """Filter on outcome1 properties. All conditions must be met (AND logic).""" + outcome1: PredictionOutcomeFilters + """Filter where ANY outcome matches the conditions (OR logic). Useful for finding markets where either outcome meets criteria.""" + outcomeOr: PredictionOutcomeFilters +} + +"""Filters for prediction outcomes within a market.""" +input PredictionOutcomeFilters { + """Best bid price in USD""" + bestBidUsd: NumberFilter + """Best ask price in USD""" + bestAskUsd: NumberFilter + """Spread in USD (difference between best ask and best bid)""" + spreadUsd: NumberFilter + """Last traded price in USD""" + lastPriceUsd: NumberFilter + """Number of trades in the last 5 minutes""" + trades5m: NumberFilter + """Number of trades in the last 1 hour""" + trades1h: NumberFilter + """Number of trades in the last 4 hours""" + trades4h: NumberFilter + """Number of trades in the last 12 hours""" + trades12h: NumberFilter + """Number of trades in the last 24 hours""" + trades24h: NumberFilter + """Number of trades in the last week""" + trades1w: NumberFilter + """Price change percentage in the last 5 minutes""" + priceChange5m: NumberFilter + """Price change percentage in the last 1 hour""" + priceChange1h: NumberFilter + """Price change percentage in the last 4 hours""" + priceChange4h: NumberFilter + """Price change percentage in the last 12 hours""" + priceChange12h: NumberFilter + """Price change percentage in the last 24 hours""" + priceChange24h: NumberFilter + """Price change percentage in the last week""" + priceChange1w: NumberFilter +} + +"""The attribute used to rank prediction markets.""" +enum PredictionMarketRankingAttribute { + timestamp + lastTransactionAt + age + createdAt + expectedLifespan + opensAt + closesAt + resolvesAt + trendingScore5m + trendingScore1h + trendingScore4h + trendingScore12h + trendingScore24h + trendingScore1w + relevanceScore5m + relevanceScore1h + relevanceScore4h + relevanceScore12h + relevanceScore24h + relevanceScore1w + competitiveScore5m + competitiveScore1h + competitiveScore4h + competitiveScore12h + competitiveScore24h + competitiveScore1w + liquidityUsd + liquidityCT + liquidityChange5m + liquidityChange1h + liquidityChange4h + liquidityChange12h + liquidityChange24h + liquidityChange1w + openInterestUsd + openInterestCT + openInterestChange5m + openInterestChange1h + openInterestChange4h + openInterestChange12h + openInterestChange24h + openInterestChange1w + volumeUsd5m + volumeUsd1h + volumeUsd4h + volumeUsd12h + volumeUsd24h + volumeUsd1w + volumeUsdAll + volumeCTAll + venueVolumeUsd + venueVolumeCT + volumeChange5m + volumeChange1h + volumeChange4h + volumeChange12h + volumeChange24h + volumeChange1w + trades5m + trades1h + trades4h + trades12h + trades24h + trades1w + avgTradeSizeUsd5m + avgTradeSizeUsd1h + avgTradeSizeUsd4h + avgTradeSizeUsd12h + avgTradeSizeUsd24h + avgTradeSizeUsd1w + tradesChange5m + tradesChange1h + tradesChange4h + tradesChange12h + tradesChange24h + tradesChange1w + uniqueTraders5m + uniqueTraders1h + uniqueTraders4h + uniqueTraders12h + uniqueTraders24h + uniqueTraders1w + uniqueTradersChange5m + uniqueTradersChange1h + uniqueTradersChange4h + uniqueTradersChange12h + uniqueTradersChange24h + uniqueTradersChange1w + priceCompetitiveness + volumeImbalance24h + liquidityAsymmetry + impliedProbabilitySum + maxPriceRange5m + maxPriceRange1h + maxPriceRange4h + maxPriceRange12h + maxPriceRange24h + maxPriceRange1w + """Score from phrase matching (for search queries)""" + phraseScore +} + +"""The index of an outcome within a prediction market.""" +enum PredictionOutcomeIndex { + outcome0 + outcome1 +} + +"""The attribute used to rank prediction outcomes.""" +enum PredictionOutcomeRankingAttribute { + bestBidUsd + bestAskUsd + spreadUsd + lastPriceUsd + bestBidCT + bestAskCT + spreadCT + lastPriceCT + liquidityUsd + liquidityCT + twoPercentAskDepthUsd + twoPercentBidDepthUsd + twoPercentAskDepthCT + twoPercentBidDepthCT + highPriceUsd5m + highPriceUsd1h + highPriceUsd4h + highPriceUsd12h + highPriceUsd24h + highPriceUsd1w + lowPriceUsd5m + lowPriceUsd1h + lowPriceUsd4h + lowPriceUsd12h + lowPriceUsd24h + lowPriceUsd1w + volumeUsd5m + volumeUsd1h + volumeUsd4h + volumeUsd12h + volumeUsd24h + volumeUsd1w + volumeChange5m + volumeChange1h + volumeChange4h + volumeChange12h + volumeChange24h + volumeChange1w + volumeShares5m + volumeShares1h + volumeShares4h + volumeShares12h + volumeShares24h + volumeShares1w + buyVolumeUsd5m + buyVolumeUsd1h + buyVolumeUsd4h + buyVolumeUsd12h + buyVolumeUsd24h + buyVolumeUsd1w + sellVolumeUsd5m + sellVolumeUsd1h + sellVolumeUsd4h + sellVolumeUsd12h + sellVolumeUsd24h + sellVolumeUsd1w + trades5m + trades1h + trades4h + trades12h + trades24h + trades1w + buys5m + buys1h + buys4h + buys12h + buys24h + buys1w + sells5m + sells1h + sells4h + sells12h + sells24h + sells1w + tradesChange5m + tradesChange1h + tradesChange4h + tradesChange12h + tradesChange24h + tradesChange1w + priceChange5m + priceChange1h + priceChange4h + priceChange12h + priceChange24h + priceChange1w + priceRange5m + priceRange1h + priceRange4h + priceRange12h + priceRange24h + priceRange1w +} + +"""A ranking to apply when sorting prediction markets.""" +input PredictionMarketRanking { + """Market-level attribute to rank by (use this OR outcome + outcomeAttribute)""" + attribute: PredictionMarketRankingAttribute + """Which outcome to rank by (required when using outcomeAttribute)""" + outcome: PredictionOutcomeIndex + """Outcome-level attribute to rank by (requires outcome to be set)""" + outcomeAttribute: PredictionOutcomeRankingAttribute + """The sort direction.""" + direction: RankingDirection +} + +"""A prediction outcome matching a set of filter parameters.""" +type PredictionOutcomeFilterResult { + """The unique identifier.""" + id: String! + """The display label.""" + label: String + """A best-effort display label for the outcome: the outcome `label` when present and meaningful, otherwise the `question`. If the event name appears inside the label it is stripped out.""" + suggestedLabel: String + """The venue-specific outcome ID.""" + venueOutcomeId: String! + """The is winner.""" + isWinner: Boolean + """The token contract address.""" + tokenAddress: String + """The network ID.""" + networkId: Int + """The exchange contract address.""" + exchangeAddress: String + """Tags associated with this entity.""" + tags: [String!] + """The best bid usd.""" + bestBidUsd: String + """The best ask usd.""" + bestAskUsd: String + """The spread usd.""" + spreadUsd: String + """The last price usd.""" + lastPriceUsd: String + """The best bid ct.""" + bestBidCT: String + """The best ask ct.""" + bestAskCT: String + """The spread ct.""" + spreadCT: String + """The last price ct.""" + lastPriceCT: String + """Live top-of-book best bid in USD, sourced from the venue's CLOB. Polymarket and Kalshi; null for other venues. Fetched on-demand only when selected. Cached for up to 10s. Selecting this caps the filter `limit` at 50.""" + bestBookBidUsd: String + """Live top-of-book best bid in collateral token units, sourced from the venue's CLOB. Polymarket and Kalshi; null for other venues. Fetched on-demand only when selected. Cached for up to 10s. Selecting this caps the filter `limit` at 50.""" + bestBookBidCT: String + """Live top-of-book best ask in USD, sourced from the venue's CLOB. Polymarket and Kalshi; null for other venues. Fetched on-demand only when selected. Cached for up to 10s. Selecting this caps the filter `limit` at 50.""" + bestBookAskUsd: String + """Live top-of-book best ask in collateral token units, sourced from the venue's CLOB. Polymarket and Kalshi; null for other venues. Fetched on-demand only when selected. Cached for up to 10s. Selecting this caps the filter `limit` at 50.""" + bestBookAskCT: String + """Total bid-side notional liquidity in USD across all bid levels in the venue's CLOB. Polymarket and Kalshi; null for other venues. Fetched on-demand only when selected. Cached for up to 10s. Selecting this caps the filter `limit` at 50.""" + bookLiquidityUsd: String + """Total bid-side notional liquidity in collateral token units across all bid levels in the venue's CLOB. Polymarket and Kalshi; null for other venues. Fetched on-demand only when selected. Cached for up to 10s. Selecting this caps the filter `limit` at 50.""" + bookLiquidityCT: String + """Liquidity in USD.""" + liquidityUsd: String + """Liquidity in collateral token units.""" + liquidityCT: String + """The two percent ask depth usd.""" + twoPercentAskDepthUsd: String + """The two percent bid depth usd.""" + twoPercentBidDepthUsd: String + """The two percent ask depth ct.""" + twoPercentAskDepthCT: String + """The two percent bid depth ct.""" + twoPercentBidDepthCT: String + """The high price usd5m.""" + highPriceUsd5m: String + """The high price usd1h.""" + highPriceUsd1h: String + """The high price usd4h.""" + highPriceUsd4h: String + """The high price usd12h.""" + highPriceUsd12h: String + """The high price usd24h.""" + highPriceUsd24h: String + """The high price usd1w.""" + highPriceUsd1w: String + """The low price usd5m.""" + lowPriceUsd5m: String + """The low price usd1h.""" + lowPriceUsd1h: String + """The low price usd4h.""" + lowPriceUsd4h: String + """The low price usd12h.""" + lowPriceUsd12h: String + """The low price usd24h.""" + lowPriceUsd24h: String + """The low price usd1w.""" + lowPriceUsd1w: String + """Volume in USD.""" + volumeUsd5m: String + """Volume in USD.""" + volumeUsd1h: String + """Volume in USD.""" + volumeUsd4h: String + """Volume in USD.""" + volumeUsd12h: String + """Volume in USD.""" + volumeUsd24h: String + """Volume in USD.""" + volumeUsd1w: String + """The percentage change.""" + volumeChange5m: Float + """The percentage change.""" + volumeChange1h: Float + """The percentage change.""" + volumeChange4h: Float + """The percentage change.""" + volumeChange12h: Float + """The percentage change.""" + volumeChange24h: Float + """The percentage change.""" + volumeChange1w: Float + """Volume in shares.""" + volumeShares5m: String + """Volume in shares.""" + volumeShares1h: String + """Volume in shares.""" + volumeShares4h: String + """Volume in shares.""" + volumeShares12h: String + """Volume in shares.""" + volumeShares24h: String + """Volume in shares.""" + volumeShares1w: String + """Buy volume.""" + buyVolumeUsd5m: String + """Buy volume.""" + buyVolumeUsd1h: String + """Buy volume.""" + buyVolumeUsd4h: String + """Buy volume.""" + buyVolumeUsd12h: String + """Buy volume.""" + buyVolumeUsd24h: String + """Buy volume.""" + buyVolumeUsd1w: String + """Sell volume.""" + sellVolumeUsd5m: String + """Sell volume.""" + sellVolumeUsd1h: String + """Sell volume.""" + sellVolumeUsd4h: String + """Sell volume.""" + sellVolumeUsd12h: String + """Sell volume.""" + sellVolumeUsd24h: String + """Sell volume.""" + sellVolumeUsd1w: String + """The trades5m.""" + trades5m: Int + """The trades1h.""" + trades1h: Int + """The trades4h.""" + trades4h: Int + """The trades12h.""" + trades12h: Int + """The trades24h.""" + trades24h: Int + """The trades1w.""" + trades1w: Int + """The buys5m.""" + buys5m: Int + """The buys1h.""" + buys1h: Int + """The buys4h.""" + buys4h: Int + """The buys12h.""" + buys12h: Int + """The buys24h.""" + buys24h: Int + """The buys1w.""" + buys1w: Int + """The sells5m.""" + sells5m: Int + """The sells1h.""" + sells1h: Int + """The sells4h.""" + sells4h: Int + """The sells12h.""" + sells12h: Int + """The sells24h.""" + sells24h: Int + """The sells1w.""" + sells1w: Int + """The percentage change.""" + tradesChange5m: Float + """The percentage change.""" + tradesChange1h: Float + """The percentage change.""" + tradesChange4h: Float + """The percentage change.""" + tradesChange12h: Float + """The percentage change.""" + tradesChange24h: Float + """The percentage change.""" + tradesChange1w: Float + """The percentage change.""" + priceChange5m: Float + """The percentage change.""" + priceChange1h: Float + """The percentage change.""" + priceChange4h: Float + """The percentage change.""" + priceChange12h: Float + """The percentage change.""" + priceChange24h: Float + """The percentage change.""" + priceChange1w: Float + """The price range5m.""" + priceRange5m: Float + """The price range1h.""" + priceRange1h: Float + """The price range4h.""" + priceRange4h: Float + """The price range12h.""" + priceRange12h: Float + """The price range24h.""" + priceRange24h: Float + """The price range1w.""" + priceRange1w: Float +} + +"""Metadata for a prediction market returned in search results.""" +type SearchPredictionMarket { + """The unique identifier.""" + id: String! + """The ID of the prediction event.""" + eventId: String! + """The prediction protocol.""" + protocol: PredictionProtocol! + """The venue-specific market ID.""" + venueMarketId: String! + """The venue-specific market slug.""" + venueMarketSlug: String + """The exchange contract address.""" + exchangeAddress: String + """The network ID.""" + networkId: Int + """The venue-specific event ID.""" + venueEventId: String + """The display label.""" + label: String + """A best-effort display label for the market: the market `label` when present and meaningful, otherwise the `question`. If the event name appears inside the label it is stripped out.""" + suggestedLabel: String + """The question or title.""" + question: String + """The collateral backing this market.""" + collateral: String! + """The creation timestamp.""" + createdAt: Int! + """The timestamp when this entity opens.""" + opensAt: Int + """The timestamp when this entity closes.""" + closesAt: Int + """The expected resolution timestamp.""" + resolvesAt: Int + """The actual resolution timestamp.""" + resolvedAt: Int + """The current status.""" + status: PredictionEventStatus! + """Tags associated with this entity.""" + tags: [String!] + """URL of the thumbnail image.""" + imageThumbUrl: String +} + +"""Capped event-shape taxonomy. One per event.""" +enum PredictionEventShape { + """Single team-vs-team match (e.g. "Lakers vs Celtics").""" + SPORTS_MATCH + """Best-of-N series within a tournament (e.g. NBA Finals series, MLB postseason series).""" + SPORTS_SERIES + """Season/tournament-level championship (e.g. "Pro Basketball Champion?", Super Bowl winner).""" + SPORTS_CHAMPIONSHIP + """Esports match (e.g. "Dota 2: Aurora vs Heroic", "CS2: FaZe vs Navi"). Similar market roles to traditional sports (moneyline, totals, props) but distinct event category.""" + ESPORTS_MATCH + """Awards show / cultural competition outright field — typically one Yes/No market per nominee/entrant (e.g. "Eurovision Winner 2026", Oscars Best Picture, Grammy of the Year).""" + AWARDS_SHOW + """Election / nomination / primary outright field — typically one Yes/No market per candidate (e.g. "Democratic Presidential Nominee 2028").""" + ELECTION + """Numeric threshold ladder for a price/value (e.g. "BTC > $X").""" + PRICE_THRESHOLD + """Date-bucket ladder (e.g. "Before Jan 21, 2029").""" + DATE + """FOMC / central-bank rate-decision event.""" + FED_DECISION + """Single binary yes/no event.""" + BINARY + """Weather or climate measure ladder (e.g. daily high temperature in °C, one Yes/No market per bucket or tail).""" + WEATHER + """Multi-select / pick-N field where the entrant set is a list of distinct items (policy items, demands, topics) rather than candidates, dates, or numeric buckets (e.g. "What Iranian demands will Trump agree to?", "What will the bill include?").""" + MULTI_SELECT + """Fallback.""" + OTHER +} + +"""Capped per-market role taxonomy. One per market within an event.""" +enum PredictionMarketRole { + """Single-market outright winner (e.g. Polymarket two-outcome moneyline).""" + MONEYLINE + """One side of a split head-to-head moneyline (typically 2-3 markets per event: per-team Yes/No for a single game/half/quarter/period, plus optional Tie). Group all markets in an event with this role to reconstruct the logical moneyline.""" + MONEYLINE_OUTCOME + """One entrant in a large-field tournament/championship outright (e.g. Kalshi "NBA Champion?" with one Yes/No market per team in the league). Distinct from MONEYLINE_OUTCOME by field size and event shape.""" + ENTRANT + """Point spread / handicap.""" + SPREAD + """Over/under total.""" + TOTAL + """Player or team prop.""" + PROP + """One bucket of a price-threshold ladder (e.g. "BTC > $80k").""" + THRESHOLD_BUCKET + """One bucket of a date ladder (e.g. "Before 2027").""" + DATE_BUCKET + """Exotic market (BTTS, correct score, method of victory, etc.).""" + EXOTIC + """Fallback.""" + OTHER +} + +"""Structured per-market classification metadata. Replaces the legacy flat fields (`marketSubtype`, `marketRole`, `displayOrder`, `suggestedOrder`) with discriminated, typed sub-objects so clients don't have to re-parse subtype slugs.""" +type PredictionMarketClassification { + """Per-market role within the event (same value as the legacy `marketRole`).""" + role: PredictionMarketRole! + """Position of this market within the event's display list (lower = show first). Folds in ladder ordering for `THRESHOLD_BUCKET` / `DATE_BUCKET` events; equivalent to `suggestedOrder ?? displayOrder` on the legacy fields.""" + sortKey: Int + """Sub-event period (set, half, game, etc.) and/or stat (points, rebounds, ...). Always present; `type = NONE` for non-sports markets and whole-match sports markets. The `groupingKey` field encodes the documented "stat wins over period" precedence so clients don't have to.""" + segment: PredictionMarketSegment! + """Populated when `role = ENTRANT`. Identifies the kind of entrant (person, team, country, ...) and provides type-specific hints (e.g. ISO 3166-1 alpha-2 country code).""" + entrant: PredictionMarketEntrant + """Populated when `role = THRESHOLD_BUCKET`. Carries the parsed numeric rung value, comparison operator, and metric kind (price, temperature, tweets, ...). Saves clients from re-parsing the label.""" + thresholdBucket: PredictionMarketThresholdBucket + """Populated when `role = DATE_BUCKET`. Carries the parsed timestamp(s) and operator (BEFORE / AFTER / ON / BETWEEN).""" + dateBucket: PredictionMarketDateBucket + """Original subtype slug emitted by the classifier (e.g. "first_half_spread", "player_points"). Provided so clients can forward-ship support for new subtypes before this schema gains structured fields for them.""" + rawSubtype: String +} + +"""Sports sub-event segment (period and/or stat).""" +type PredictionMarketSegment { + """Which dimension dominates: STAT (a stat is present, regardless of period), PERIOD (only a period is present), or NONE (neither — full-match market).""" + type: PredictionMarketSegmentType! + """Period token if detected: e.g. "set_1", "1h", "game_2", "map_3", "period_2", "ot". Snake_case slug. Null when the market covers the full match.""" + period: String + """Stat dimension if a stat keyword was detected (points, rebounds, assists, ...). Null otherwise.""" + stat: PredictionMarketStatType + """Convenience grouping key. Equals `stat ?? period ?? "match"`. Use this when partitioning markets within an event into sub-event groups: stat takes precedence over period (a "1H Player Points" market groups with other points markets, not other 1H markets).""" + groupingKey: String! + """Numeric segment value when the period/stat slug carries an ordinal or numeric component (for example set/game/map/round number). Null when no numeric segment value is available.""" + numberValue: Float +} + +"""Discriminator for `PredictionMarketSegment.type`.""" +enum PredictionMarketSegmentType { + """A stat keyword was detected — group by stat regardless of period.""" + STAT + """Only a period (set/half/game/...) was detected.""" + PERIOD + """Neither stat nor period — full-match market.""" + NONE +} + +"""Closed list of stat dimensions the classifier recognises.""" +enum PredictionMarketStatType { + POINTS + REBOUNDS + ASSISTS + THREES + STEALS + BLOCKS + TURNOVERS + FOULS + DOUBLE_DOUBLE + TRIPLE_DOUBLE + FIRST_INNING_RUNS +} + +"""Entrant metadata for ENTRANT-role markets.""" +type PredictionMarketEntrant { + """Kind of entity this entrant represents.""" + kind: PredictionMarketEntrantKind! + """Cleaned display name for the entrant (mirrors the existing `suggestedLabel` field).""" + displayName: String! + """Per-market image URL when available (mirrors the existing per-market image).""" + imageUrl: String + """ISO 3166-1 alpha-2 country code (e.g. "SE"). Populated when `kind = COUNTRY` and the label resolves to a known country.""" + countryCode: String +} + +"""Closed list of entrant kinds.""" +enum PredictionMarketEntrantKind { + """Real person — politician, executive, public figure (not a sports player).""" + PERSON + """Sports player or driver.""" + PLAYER + """Sports team or franchise.""" + TEAM + """Country (Eurovision, Olympics outright, etc.).""" + COUNTRY + """Company / corporation / brand.""" + COMPANY + """Multi-select / pick-N topic item (policy item, demand, agenda topic).""" + TOPIC + """TV show.""" + TV_SHOW + """Movie.""" + MOVIE + """Song.""" + SONG + """Album.""" + ALBUM + """Fallback.""" + OTHER +} + +"""Numeric threshold-bucket metadata for THRESHOLD_BUCKET-role markets.""" +type PredictionMarketThresholdBucket { + """What the rung is measuring (price, stock price, temperature in °C, social-media count, ...).""" + metric: PredictionMarketLadderMetric! + """How the rung relates to its bound(s).""" + operator: PredictionMarketLadderOperator! + """Single comparison value for ABOVE / BELOW / EXACTLY (e.g. 80000 for "BTC > $80k").""" + numericValue: Float + """Lower bound for BETWEEN-style range buckets (e.g. "$80k-$90k" → 80000).""" + lowerBound: Float + """Upper bound for BETWEEN-style range buckets (e.g. "$80k-$90k" → 90000).""" + upperBound: Float +} + +"""Closed list of metrics for `PredictionMarketThresholdBucket.metric`.""" +enum PredictionMarketLadderMetric { + """Generic asset price (crypto, commodities-fallback).""" + PRICE + """Equity stock price.""" + STOCK_PRICE + """Fully-diluted valuation / market cap threshold.""" + FDV + """Commodity price (oil, gas, metals, etc.).""" + COMMODITY + """Daily high/low temperature in °C.""" + TEMPERATURE + """Federal Reserve rate change in basis points.""" + RATE_CHANGE_BPS + """Rotten Tomatoes Tomatometer score.""" + ROTTEN_TOMATOES + """Movie box-office opening-weekend gross.""" + BOX_OFFICE + """Tweet count.""" + TWEETS + """Follower count.""" + FOLLOWERS + """Subscriber count.""" + SUBSCRIBERS + """View / stream count.""" + VIEWS + """Like count.""" + LIKES + """Post count.""" + POSTS + """Fallback.""" + OTHER +} + +"""Comparison operator for a ladder rung.""" +enum PredictionMarketLadderOperator { + """Strictly greater than `numericValue` ("≥" is normalised to ABOVE).""" + ABOVE + """Strictly less than `numericValue` ("≤" is normalised to BELOW).""" + BELOW + """Equal to `numericValue` (single-strike or exact-match bucket).""" + EXACTLY + """Inclusive range between `lowerBound` and `upperBound`.""" + BETWEEN +} + +"""Date-bucket metadata for DATE_BUCKET-role markets.""" +type PredictionMarketDateBucket { + """How the rung relates to its date bound(s).""" + operator: PredictionMarketDateOperator! + """Single unix timestamp (seconds) for BEFORE / AFTER / ON.""" + unixTimestamp: Int + """Lower bound timestamp (seconds) for BETWEEN buckets.""" + lowerTimestamp: Int + """Upper bound timestamp (seconds) for BETWEEN buckets.""" + upperTimestamp: Int +} + +"""Comparison operator for a date rung.""" +enum PredictionMarketDateOperator { + BEFORE + AFTER + ON + BETWEEN +} + +"""Per-domain enrichment attached to a prediction event. Discriminated by `metadataType`; the corresponding sub-block (e.g. `sports`) is populated. Null when no domain-specific signal can be extracted.""" +type PredictionEventEnrichedMetadata { + """Discriminator naming which sub-block carries data.""" + metadataType: PredictionMetadataType! + """Populated when `metadataType = SPORTS`.""" + sports: SportsEventEnrichedMetadata +} + +"""Per-domain enrichment attached to a prediction market. Discriminated by `metadataType`; the corresponding sub-block (e.g. `sports`) is populated.""" +type PredictionMarketEnrichedMetadata { + """Discriminator naming which sub-block carries data.""" + metadataType: PredictionMetadataType! + """Populated when `metadataType = SPORTS`.""" + sports: SportsMarketEnrichedMetadata +} + +"""Discriminator for `enrichedMetadata`. New values added as we ingest new domains.""" +enum PredictionMetadataType { + """Sports games (league, teams, start times).""" + SPORTS +} + +"""Sports-domain enrichment for an event (game).""" +type SportsEventEnrichedMetadata { + """Soft-normalised league/sport identifier (e.g. NBA, NFL, EPL). Free string to tolerate new venues; well-known values match the canonical set.""" + league: String + """Teams participating in the game, when known. Null when the venue does not expose teams.""" + teams: [SportsTeam!] + """Game-start date in UTC ("YYYY-MM-DD"). Derived from `gameStartTime` when present.""" + gameStartDate: String + """Game-start clock value as canonical UTC ISO-8601.""" + gameStartTime: String + """Game-start as Unix seconds (UTC).""" + gameStartTimeSeconds: Int + """Timezone discriminator for `gameStartTime` / `gameStartDate`. Always UTC for any record produced after the ET→UTC normalisation rollout.""" + gameStartTimezone: SportsTimezone + """Decomposed venue ticker (parsed components from the venue's native event identifier). Useful for cross-venue matching when canonical league/teams fields don't disambiguate.""" + decomposedVenueTicker: DecomposedVenueTicker +} + +"""Sports-domain enrichment for a market within an event.""" +type SportsMarketEnrichedMetadata { + """Market template slug (e.g. "moneyline", "spreads", "totals", "ufc_method_of_victory"). Free string — list grows as venues add templates.""" + sportsMarketType: String + """Soft-normalised league identifier (mirrors the parent event).""" + league: String + """Teams referenced by this market, when known.""" + teams: [SportsTeam!] + """Game-start date in UTC ("YYYY-MM-DD"). Derived from `gameStartTime` when present.""" + gameStartDate: String + """Game-start clock value as canonical UTC ISO-8601.""" + gameStartTime: String + """Game-start as Unix seconds (UTC).""" + gameStartTimeSeconds: Int + """Timezone discriminator for `gameStartTime` / `gameStartDate`. Always UTC for any record produced after the ET→UTC normalisation rollout.""" + gameStartTimezone: SportsTimezone +} + +"""Cross-venue sports team identifier. Only `abbreviation` is required; other fields populated when the venue exposes them. Match teams across venues using `abbreviation ∪ altAbbreviations`.""" +type SportsTeam { + """Lowercased venue-canonical abbreviation.""" + abbreviation: String! + """Known alternate forms for the same team (rebrands, relocations, 2-vs-3-letter conventions). Excludes `abbreviation`.""" + altAbbreviations: [String!] + """Display name.""" + name: String + """Soft-normalised league for this team.""" + league: String + """Logo URL.""" + logo: String + """Display alias.""" + alias: String + """Brand colour.""" + color: String + """Provider-side identifier (e.g. Polymarket gamma id).""" + providerId: Int + """Whether this team is the home team in the event.""" + isHome: Boolean +} + +"""How to interpret companion date/time fields.""" +enum SportsTimezone { + """UTC. `gameStartTime` is canonical ISO-8601; `gameStartTimeSeconds` populated.""" + UTC +} + +"""Decomposed components extracted from a venue's native event identifier. The parent event's `protocol` field is the source of truth for which sub-block is populated.""" +type DecomposedVenueTicker { + """Populated for Kalshi events whose ticker matches the sports template.""" + kalshiSports: KalshiSportsTickerComponents +} + +"""Structural decomposition of a Kalshi sports event_ticker (e.g. "KXMLBGAME-26MAY091610WSHMIA"). The ticker's ET date/time segments are not exposed here — they are converted to UTC and surfaced on the parent event's `gameStartTime` fields.""" +type KalshiSportsTickerComponents { + """Original ticker string.""" + rawTicker: String! + """Series prefix (e.g. "KXMLBGAME").""" + seriesPrefix: String! + """Soft-normalised series sport.""" + seriesSport: String + """Raw uppercase team-tail captured from the ticker (e.g. "1WINTUNDRA"). Present when the parser matched the structural shape.""" + teamTailRaw: String + """Populated only when the parser can confidently split the team tail.""" + homeAbbreviation: String + """Populated only when the parser can confidently split the team tail.""" + awayAbbreviation: String +} + +"""A prediction market matching a set of filter parameters.""" +type PredictionMarketFilterResult { + """The unique identifier.""" + id: String! + """The unix timestamp.""" + timestamp: Int! + """The timestamp of the last transaction.""" + lastTransactionAt: Int! + """The age.""" + age: Int + """The expected lifespan.""" + expectedLifespan: Int + """The parent event label.""" + eventLabel: String + """Structured classification metadata from the search index. Discriminated by `classification.role`; carries `segment`, `entrant`, `thresholdBucket`, and `dateBucket` sub-blocks.""" + classification: PredictionMarketClassification + """Simplified market data from search index. Use predictionMarket for full market details.""" + market: SearchPredictionMarket! + """Full prediction market loaded from database. May be null if market no longer exists.""" + predictionMarket: PredictionMarket + """The prediction protocol.""" + protocol: PredictionProtocol! + """The current status.""" + status: PredictionEventStatus! + """The timestamp when this entity opens.""" + opensAt: Int! + """The timestamp when this entity closes.""" + closesAt: Int! + """The expected resolution timestamp.""" + resolvesAt: Int! + """Categories associated with this entity.""" + categories: [String!]! + """The resolution source.""" + resolutionSource: String + """Outcome 0 data.""" + outcome0: PredictionOutcomeFilterResult! + """Outcome 1 data.""" + outcome1: PredictionOutcomeFilterResult! + """The ID of the winning outcome.""" + winningOutcomeId: String + """The trending score.""" + trendingScore5m: Float + """The trending score.""" + trendingScore1h: Float + """The trending score.""" + trendingScore4h: Float + """The trending score.""" + trendingScore12h: Float + """The trending score.""" + trendingScore24h: Float + """The trending score.""" + trendingScore1w: Float + """The relevance score.""" + relevanceScore5m: Float + """The relevance score.""" + relevanceScore1h: Float + """The relevance score.""" + relevanceScore4h: Float + """The relevance score.""" + relevanceScore12h: Float + """The relevance score.""" + relevanceScore24h: Float + """The relevance score.""" + relevanceScore1w: Float + """The competitive score.""" + competitiveScore5m: Float + """The competitive score.""" + competitiveScore1h: Float + """The competitive score.""" + competitiveScore4h: Float + """The competitive score.""" + competitiveScore12h: Float + """The competitive score.""" + competitiveScore24h: Float + """The competitive score.""" + competitiveScore1w: Float + """Liquidity in USD.""" + liquidityUsd: String + """Liquidity in collateral token units.""" + liquidityCT: String + """The percentage change.""" + liquidityChange5m: Float + """The percentage change.""" + liquidityChange1h: Float + """The percentage change.""" + liquidityChange4h: Float + """The percentage change.""" + liquidityChange12h: Float + """The percentage change.""" + liquidityChange24h: Float + """The percentage change.""" + liquidityChange1w: Float + """Open interest in USD.""" + openInterestUsd: String + """Open interest in collateral token units.""" + openInterestCT: String + """The percentage change.""" + openInterestChange5m: Float + """The percentage change.""" + openInterestChange1h: Float + """The percentage change.""" + openInterestChange4h: Float + """The percentage change.""" + openInterestChange12h: Float + """The percentage change.""" + openInterestChange24h: Float + """The percentage change.""" + openInterestChange1w: Float + """Volume in USD.""" + volumeUsd5m: String + """Volume in USD.""" + volumeUsd1h: String + """Volume in USD.""" + volumeUsd4h: String + """Volume in USD.""" + volumeUsd12h: String + """Volume in USD.""" + volumeUsd24h: String + """Volume in USD.""" + volumeUsd1w: String + """Volume in USD.""" + volumeUsdAll: String + """Volume in collateral token units.""" + volumeCTAll: String + """The venue volume usd.""" + venueVolumeUsd: String + """The venue volume ct.""" + venueVolumeCT: String + """The percentage change.""" + volumeChange5m: Float + """The percentage change.""" + volumeChange1h: Float + """The percentage change.""" + volumeChange4h: Float + """The percentage change.""" + volumeChange12h: Float + """The percentage change.""" + volumeChange24h: Float + """The percentage change.""" + volumeChange1w: Float + """The trades5m.""" + trades5m: Int + """The trades1h.""" + trades1h: Int + """The trades4h.""" + trades4h: Int + """The trades12h.""" + trades12h: Int + """The trades24h.""" + trades24h: Int + """The trades1w.""" + trades1w: Int + """The avg trade size usd5m.""" + avgTradeSizeUsd5m: String + """The avg trade size usd1h.""" + avgTradeSizeUsd1h: String + """The avg trade size usd4h.""" + avgTradeSizeUsd4h: String + """The avg trade size usd12h.""" + avgTradeSizeUsd12h: String + """The avg trade size usd24h.""" + avgTradeSizeUsd24h: String + """The avg trade size usd1w.""" + avgTradeSizeUsd1w: String + """The percentage change.""" + tradesChange5m: Float + """The percentage change.""" + tradesChange1h: Float + """The percentage change.""" + tradesChange4h: Float + """The percentage change.""" + tradesChange12h: Float + """The percentage change.""" + tradesChange24h: Float + """The percentage change.""" + tradesChange1w: Float + """The unique traders5m.""" + uniqueTraders5m: Int + """The unique traders1h.""" + uniqueTraders1h: Int + """The unique traders4h.""" + uniqueTraders4h: Int + """The unique traders12h.""" + uniqueTraders12h: Int + """The unique traders24h.""" + uniqueTraders24h: Int + """The unique traders1w.""" + uniqueTraders1w: Int + """The percentage change.""" + uniqueTradersChange5m: Float + """The percentage change.""" + uniqueTradersChange1h: Float + """The percentage change.""" + uniqueTradersChange4h: Float + """The percentage change.""" + uniqueTradersChange12h: Float + """The percentage change.""" + uniqueTradersChange24h: Float + """The percentage change.""" + uniqueTradersChange1w: Float + """The price competitiveness.""" + priceCompetitiveness: Float + """The volume imbalance24h.""" + volumeImbalance24h: Float + """The liquidity asymmetry.""" + liquidityAsymmetry: Float + """The implied probability sum.""" + impliedProbabilitySum: Float + """The max price range5m.""" + maxPriceRange5m: Float + """The max price range1h.""" + maxPriceRange1h: Float + """The max price range4h.""" + maxPriceRange4h: Float + """The max price range12h.""" + maxPriceRange12h: Float + """The max price range24h.""" + maxPriceRange24h: Float + """The max price range1w.""" + maxPriceRange1w: Float +} + +"""Response returned by `filterPredictionMarkets`.""" +type PredictionMarketFilterConnection { + """Total number of matching results.""" + count: Int! + """The current page number.""" + page: Int! + """The list of results.""" + results: [PredictionMarketFilterResult!]! +} + +"""Filters for trader-market records.""" +input PredictionTraderMarketFilters { + """Filter by prediction protocol""" + protocol: [PredictionProtocol!] + """Filter by market status""" + status: [PredictionEventStatus!] + """Filter by whether trader has an open position""" + hasOpenPosition: Boolean + """Filter by outcome 0 PnL status""" + outcome0PnlStatus: [PredictionTraderMarketPnlStatus!] + """Filter by outcome 1 PnL status""" + outcome1PnlStatus: [PredictionTraderMarketPnlStatus!] + """The unix timestamp.""" + timestamp: NumberFilter + """The timestamp of the first trade.""" + firstTradeTimestamp: NumberFilter + """The timestamp of the last trade.""" + lastTradeTimestamp: NumberFilter + """The total realized pnl usd.""" + totalRealizedPnlUsd: NumberFilter + """The total realized pnl ct.""" + totalRealizedPnlCT: NumberFilter + """The total volume usd.""" + totalVolumeUsd: NumberFilter + """The total volume ct.""" + totalVolumeCT: NumberFilter + """The total volume shares.""" + totalVolumeShares: NumberFilter + """The total buys.""" + totalBuys: NumberFilter + """The total sells.""" + totalSells: NumberFilter + """The total trades.""" + totalTrades: NumberFilter + """The total cost basis usd.""" + totalCostBasisUsd: NumberFilter + """The total cost basis ct.""" + totalCostBasisCT: NumberFilter + """The total shares held.""" + totalSharesHeld: NumberFilter + """The pnl per volume market.""" + pnlPerVolumeMarket: NumberFilter + """The profit per trade usd.""" + profitPerTradeUsd: NumberFilter + """Outcome 0 realized pnl usd.""" + outcome0RealizedPnlUsd: NumberFilter + """Outcome 0 buys.""" + outcome0Buys: NumberFilter + """Outcome 0 sells.""" + outcome0Sells: NumberFilter + """Outcome 0 shares held.""" + outcome0SharesHeld: NumberFilter + """Outcome 0 cost basis usd.""" + outcome0CostBasisUsd: NumberFilter + """Outcome 1 realized pnl usd.""" + outcome1RealizedPnlUsd: NumberFilter + """Outcome 1 buys.""" + outcome1Buys: NumberFilter + """Outcome 1 sells.""" + outcome1Sells: NumberFilter + """Outcome 1 shares held.""" + outcome1SharesHeld: NumberFilter + """Outcome 1 cost basis usd.""" + outcome1CostBasisUsd: NumberFilter +} + +"""The attribute used to rank trader-market records.""" +enum PredictionTraderMarketRankingAttribute { + timestamp + firstTradeTimestamp + lastTradeTimestamp + totalRealizedPnlUsd + totalRealizedPnlCT + totalVolumeUsd + totalVolumeCT + totalVolumeShares + totalBuys + totalSells + totalTrades + totalCostBasisUsd + totalCostBasisCT + totalSharesHeld + pnlPerVolumeMarket + profitPerTradeUsd + outcome0RealizedPnlUsd + outcome0Buys + outcome0Sells + outcome0SharesHeld + outcome0CostBasisUsd + outcome1RealizedPnlUsd + outcome1Buys + outcome1Sells + outcome1SharesHeld + outcome1CostBasisUsd +} + +"""A ranking to apply when sorting trader-market records.""" +input PredictionTraderMarketRanking { + """The attribute to rank by.""" + attribute: PredictionTraderMarketRankingAttribute! + """The sort direction.""" + direction: RankingDirection +} + +"""Trader metadata within a trader-market filter result.""" +type FilterTrader { + """The unique identifier.""" + id: String! + """The venue trader id.""" + venueTraderId: String! + """The prediction protocol.""" + protocol: PredictionProtocol! + """The trader alias.""" + alias: String + """The primary address.""" + primaryAddress: String + """The linked addresses.""" + linkedAddresses: [String!] + """The profile image url.""" + profileImageUrl: String + """The profile url.""" + profileUrl: String + """Labels applied to this entity.""" + labels: [String!] +} + +"""Market metadata within a trader-market filter result.""" +type FilterTraderMarket { + """The unique identifier.""" + id: String! + """The ID of the prediction event.""" + eventId: String! + """The prediction protocol.""" + protocol: PredictionProtocol! + """The venue-specific market ID.""" + venueMarketId: String! + """The display label.""" + label: String + """The question or title.""" + question: String + """The parent event label.""" + eventLabel: String + """URL of the thumbnail image.""" + imageThumbUrl: String + """Outcome 0 label.""" + outcome0Label: String + """Outcome 1 label.""" + outcome1Label: String + """The current status.""" + status: PredictionEventStatus! + """The timestamp when this entity closes.""" + closesAt: Int! + """The actual resolution timestamp.""" + resolvedAt: Int +} + +"""Per-outcome stats within a trader-market filter result.""" +type PredictionTraderOutcomeFilterResult { + """The ID of the prediction outcome.""" + outcomeId: String! + """The is winning outcome.""" + isWinningOutcome: Boolean! + """The shares held. This number may not be the same as the actual shares held if the trader has not actually redeemed the shares, but we've already calculated the pnl.""" + sharesHeld: String! + """The actual shares held. If the trader has not actually redeemed the shares, but we've already calculated the pnl, this will still track their actual shares held.""" + actualSharesHeld: String! + """The avg entry price usd.""" + avgEntryPriceUsd: String! + """The avg entry price ct.""" + avgEntryPriceCT: String! + """The cost basis usd.""" + costBasisUsd: String! + """The cost basis ct.""" + costBasisCT: String! + """The number of buys.""" + buys: Int! + """The number of sells.""" + sells: Int! + """Buy volume in USD.""" + buyVolumeUsd: String! + """Sell volume in USD.""" + sellVolumeUsd: String! + """Buy volume in collateral token units.""" + buyVolumeCT: String! + """Sell volume in collateral token units.""" + sellVolumeCT: String! + """Buy volume in shares.""" + buyVolumeShares: String! + """Sell volume in shares.""" + sellVolumeShares: String! + """The realized pnl usd.""" + realizedPnlUsd: String! + """The realized pnl ct.""" + realizedPnlCT: String! + """The current outcome price in USD. Null when latest price data is unavailable.""" + currentPriceUsd: String + """The current outcome price in collateral token units. Null when latest price data is unavailable.""" + currentPriceCT: String + """The current position value in USD. Returns 0 for closed/no-share positions; null when latest price data is unavailable for an open position.""" + currentPositionValueUsd: String + """The current position value in collateral token units. Returns 0 for closed/no-share positions; null when latest price data is unavailable for an open position.""" + currentPositionValueCT: String + """The unrealized pnl in USD. Returns 0 for closed/no-share positions; null when latest price data is unavailable for an open position.""" + unrealizedPnlUsd: String + """The unrealized pnl in collateral token units. Returns 0 for closed/no-share positions; null when latest price data is unavailable for an open position.""" + unrealizedPnlCT: String + """The pnl status.""" + pnlStatus: PredictionTraderMarketPnlStatus! + """The timestamp of the first trade.""" + firstTradeTimestamp: Int! + """The timestamp of the last trade.""" + lastTradeTimestamp: Int! +} + +"""A trader-market record matching a set of filter parameters.""" +type PredictionTraderMarketFilterResult { + """The unique identifier.""" + id: String! + """The unix timestamp.""" + timestamp: Int! + """The ID of the prediction trader.""" + traderId: String! + """The ID of the prediction market.""" + marketId: String! + """The ID of the prediction event.""" + eventId: String! + """Minimal trader info embedded in the result""" + trader: FilterTrader! + """Minimal market info embedded in the result""" + market: FilterTraderMarket! + """Full trader entity (loaded via DataLoader)""" + predictionTrader: PredictionTrader + """Full market entity (loaded via DataLoader)""" + predictionMarket: PredictionMarket + """Whether the trader has an open position. Means they have actual shares held in the market (either outcome).""" + hasOpenPosition: Boolean! + """The ID of the winning outcome.""" + winningOutcomeId: String + """The total realized pnl usd.""" + totalRealizedPnlUsd: String! + """The total realized pnl ct.""" + totalRealizedPnlCT: String! + """The total volume usd.""" + totalVolumeUsd: String! + """The total volume ct.""" + totalVolumeCT: String! + """The total volume shares.""" + totalVolumeShares: String! + """The total buys.""" + totalBuys: Int! + """The total sells.""" + totalSells: Int! + """The total trades.""" + totalTrades: Int! + """The total cost basis usd.""" + totalCostBasisUsd: String! + """The total cost basis ct.""" + totalCostBasisCT: String! + """The total shares held.""" + totalSharesHeld: String! + """The total current position value in USD. Returns 0 when there are no open held positions; null when any open held position is missing latest price data.""" + totalCurrentPositionValueUsd: String + """The total current position value in collateral token units. Returns 0 when there are no open held positions; null when any open held position is missing latest price data.""" + totalCurrentPositionValueCT: String + """The total unrealized pnl in USD. Returns 0 when there are no open held positions; null when any open held position is missing latest price data.""" + totalUnrealizedPnlUsd: String + """The total unrealized pnl in collateral token units. Returns 0 when there are no open held positions; null when any open held position is missing latest price data.""" + totalUnrealizedPnlCT: String + """The pnl per volume market.""" + pnlPerVolumeMarket: String! + """The profit per trade usd.""" + profitPerTradeUsd: String! + """The timestamp of the first trade.""" + firstTradeTimestamp: Int! + """The timestamp of the last trade.""" + lastTradeTimestamp: Int! + """Outcome 0 data.""" + outcome0: PredictionTraderOutcomeFilterResult! + """Outcome 1 data.""" + outcome1: PredictionTraderOutcomeFilterResult! +} + +"""Response returned by `filterPredictionTraderMarkets`.""" +type PredictionTraderMarketFilterConnection { + """Total number of matching results.""" + count: Int! + """The current page number.""" + page: Int! + """The list of results.""" + results: [PredictionTraderMarketFilterResult!]! +} + +"""Filters for prediction traders.""" +input PredictionTraderFilters { + """Filter by protocol (e.g., POLYMARKET, KALSHI)""" + protocol: [PredictionProtocol!] + """Filter by labels""" + labels: [String!] + """Filter by timestamp""" + timestamp: NumberFilter + """Filter by first trade timestamp""" + firstTradeTimestamp: NumberFilter + """Filter by last trade timestamp""" + lastTradeTimestamp: NumberFilter + """Filter by all-time total volume USD""" + totalVolumeUsdAll: NumberFilter + """Filter by all-time total volume CT""" + totalVolumeCTAll: NumberFilter + """Filter by all-time total profit USD""" + totalProfitUsdAll: NumberFilter + """Filter by all-time total profit CT""" + totalProfitCTAll: NumberFilter + """Filter by all-time total trades""" + totalTradesAll: NumberFilter + """Filter by active markets count""" + activeMarketsCount: NumberFilter + """Filter by all-time PnL per volume""" + pnlPerVolumeAll: NumberFilter + """Filter by profit per trade USD all-time""" + profitPerTradeUsdAll: NumberFilter + """Filter by volume per trade USD all-time""" + volumePerTradeUsdAll: NumberFilter + """Filter by biggest win USD""" + biggestWinUsd: NumberFilter + """Filter by biggest win CT""" + biggestWinCT: NumberFilter + """Filter by biggest loss USD""" + biggestLossUsd: NumberFilter + """Filter by biggest loss CT""" + biggestLossCT: NumberFilter + """Filter by volume USD 12h""" + volumeUsd12h: NumberFilter + """Filter by volume USD 24h""" + volumeUsd24h: NumberFilter + """Filter by volume USD 1w""" + volumeUsd1w: NumberFilter + """Filter by volume USD 1m""" + volumeUsd1m: NumberFilter + """Filter by volume change 12h""" + volumeChange12h: NumberFilter + """Filter by volume change 24h""" + volumeChange24h: NumberFilter + """Filter by volume change 1w""" + volumeChange1w: NumberFilter + """Filter by volume change 1m""" + volumeChange1m: NumberFilter + """Filter by realized PnL USD 12h""" + realizedPnlUsd12h: NumberFilter + """Filter by realized PnL USD 24h""" + realizedPnlUsd24h: NumberFilter + """Filter by realized PnL USD 1w""" + realizedPnlUsd1w: NumberFilter + """Filter by realized PnL USD 1m""" + realizedPnlUsd1m: NumberFilter + """Filter by realized profit percentage 12h""" + realizedProfitPercentage12h: NumberFilter + """Filter by realized profit percentage 24h""" + realizedProfitPercentage24h: NumberFilter + """Filter by realized profit percentage 1w""" + realizedProfitPercentage1w: NumberFilter + """Filter by realized profit percentage 1m""" + realizedProfitPercentage1m: NumberFilter + """Filter by realized PnL change 12h""" + realizedPnlChange12h: NumberFilter + """Filter by realized PnL change 24h""" + realizedPnlChange24h: NumberFilter + """Filter by realized PnL change 1w""" + realizedPnlChange1w: NumberFilter + """Filter by realized PnL change 1m""" + realizedPnlChange1m: NumberFilter + """Filter by trades 12h""" + trades12h: NumberFilter + """Filter by trades 24h""" + trades24h: NumberFilter + """Filter by trades 1w""" + trades1w: NumberFilter + """Filter by trades 1m""" + trades1m: NumberFilter + """Filter by unique markets 12h""" + uniqueMarkets12h: NumberFilter + """Filter by unique markets 24h""" + uniqueMarkets24h: NumberFilter + """Filter by unique markets 1w""" + uniqueMarkets1w: NumberFilter + """Filter by unique markets 1m""" + uniqueMarkets1m: NumberFilter + """Filter by wins 12h""" + wins12h: NumberFilter + """Filter by wins 24h""" + wins24h: NumberFilter + """Filter by wins 1w""" + wins1w: NumberFilter + """Filter by wins 1m""" + wins1m: NumberFilter + """Filter by losses 12h""" + losses12h: NumberFilter + """Filter by losses 24h""" + losses24h: NumberFilter + """Filter by losses 1w""" + losses1w: NumberFilter + """Filter by losses 1m""" + losses1m: NumberFilter + """Filter by win rate 12h""" + winRate12h: NumberFilter + """Filter by win rate 24h""" + winRate24h: NumberFilter + """Filter by win rate 1w""" + winRate1w: NumberFilter + """Filter by win rate 1m""" + winRate1m: NumberFilter + """Filter by average profit USD per trade 12h""" + averageProfitUsdPerTrade12h: NumberFilter + """Filter by average profit USD per trade 24h""" + averageProfitUsdPerTrade24h: NumberFilter + """Filter by average profit USD per trade 1w""" + averageProfitUsdPerTrade1w: NumberFilter + """Filter by average profit USD per trade 1m""" + averageProfitUsdPerTrade1m: NumberFilter + """Filter by average swap amount USD 12h""" + averageSwapAmountUsd12h: NumberFilter + """Filter by average swap amount USD 24h""" + averageSwapAmountUsd24h: NumberFilter + """Filter by average swap amount USD 1w""" + averageSwapAmountUsd1w: NumberFilter + """Filter by average swap amount USD 1m""" + averageSwapAmountUsd1m: NumberFilter + """Filter by held token acquisition cost USD""" + heldTokenAcquisitionCostUsd: NumberFilter + """Filter by held token acquisition cost CT""" + heldTokenAcquisitionCostCT: NumberFilter +} + +"""The attribute used to rank prediction traders.""" +enum PredictionTraderRankingAttribute { + TIMESTAMP + FIRST_TRADE_TIMESTAMP + LAST_TRADE_TIMESTAMP + TOTAL_VOLUME_USD_ALL + TOTAL_VOLUME_CT_ALL + TOTAL_PROFIT_USD_ALL + TOTAL_PROFIT_CT_ALL + TOTAL_TRADES_ALL + ACTIVE_MARKETS_COUNT + PNL_PER_VOLUME_ALL + PROFIT_PER_TRADE_USD_ALL + VOLUME_PER_TRADE_USD_ALL + BIGGEST_WIN_USD + BIGGEST_WIN_CT + BIGGEST_LOSS_USD + BIGGEST_LOSS_CT + VOLUME_USD_12H + VOLUME_USD_24H + VOLUME_USD_1W + VOLUME_USD_1M + VOLUME_CHANGE_12H + VOLUME_CHANGE_24H + VOLUME_CHANGE_1W + VOLUME_CHANGE_1M + REALIZED_PNL_USD_12H + REALIZED_PNL_USD_24H + REALIZED_PNL_USD_1W + REALIZED_PNL_USD_1M + REALIZED_PROFIT_PERCENTAGE_12H + REALIZED_PROFIT_PERCENTAGE_24H + REALIZED_PROFIT_PERCENTAGE_1W + REALIZED_PROFIT_PERCENTAGE_1M + REALIZED_PNL_CHANGE_12H + REALIZED_PNL_CHANGE_24H + REALIZED_PNL_CHANGE_1W + REALIZED_PNL_CHANGE_1M + TRADES_12H + TRADES_24H + TRADES_1W + TRADES_1M + UNIQUE_MARKETS_12H + UNIQUE_MARKETS_24H + UNIQUE_MARKETS_1W + UNIQUE_MARKETS_1M + WINS_12H + WINS_24H + WINS_1W + WINS_1M + LOSSES_12H + LOSSES_24H + LOSSES_1W + LOSSES_1M + WIN_RATE_12H + WIN_RATE_24H + WIN_RATE_1W + WIN_RATE_1M + AVERAGE_PROFIT_USD_PER_TRADE_12H + AVERAGE_PROFIT_USD_PER_TRADE_24H + AVERAGE_PROFIT_USD_PER_TRADE_1W + AVERAGE_PROFIT_USD_PER_TRADE_1M + AVERAGE_SWAP_AMOUNT_USD_12H + AVERAGE_SWAP_AMOUNT_USD_24H + AVERAGE_SWAP_AMOUNT_USD_1W + AVERAGE_SWAP_AMOUNT_USD_1M + HELD_TOKEN_ACQUISITION_COST_USD + HELD_TOKEN_ACQUISITION_COST_CT +} + +"""A ranking to apply when sorting prediction traders.""" +input PredictionTraderRanking { + """The attribute to rank by.""" + attribute: PredictionTraderRankingAttribute! + """The sort direction.""" + direction: RankingDirection +} + +"""A prediction trader matching a set of filter parameters.""" +type PredictionTraderFilterResult { + """The unique identifier.""" + id: String! + """The unix timestamp.""" + timestamp: Int! + """Minimal trader info embedded in the result""" + trader: FilterTrader! + """Full trader entity (loaded via DataLoader)""" + predictionTrader: PredictionTrader + """First trade timestamp""" + firstTradeTimestamp: Int! + """Last trade timestamp""" + lastTradeTimestamp: Int! + """All-time total volume USD""" + totalVolumeUsdAll: String! + """All-time total volume CT""" + totalVolumeCTAll: String! + """All-time total profit USD""" + totalProfitUsdAll: String! + """All-time total profit CT""" + totalProfitCTAll: String! + """All-time total trades""" + totalTradesAll: Int! + """Active markets count""" + activeMarketsCount: Int! + """All-time PnL per volume""" + pnlPerVolumeAll: Float! + """Profit per trade USD all-time""" + profitPerTradeUsdAll: String! + """Volume per trade USD all-time""" + volumePerTradeUsdAll: String! + """Biggest win USD""" + biggestWinUsd: String! + """Biggest win CT""" + biggestWinCT: String! + """Biggest loss USD""" + biggestLossUsd: String! + """Biggest loss CT""" + biggestLossCT: String! + """Volume USD 12h""" + volumeUsd12h: String! + """Volume USD 24h""" + volumeUsd24h: String! + """Volume USD 1w""" + volumeUsd1w: String! + """Volume USD 1m""" + volumeUsd1m: String! + """Volume CT 12h""" + volumeCT12h: String! + """Volume CT 24h""" + volumeCT24h: String! + """Volume CT 1w""" + volumeCT1w: String! + """Volume CT 1m""" + volumeCT1m: String! + """Buy volume USD 12h""" + buyVolumeUsd12h: String! + """Buy volume USD 24h""" + buyVolumeUsd24h: String! + """Buy volume USD 1w""" + buyVolumeUsd1w: String! + """Buy volume USD 1m""" + buyVolumeUsd1m: String! + """Sell volume USD 12h""" + sellVolumeUsd12h: String! + """Sell volume USD 24h""" + sellVolumeUsd24h: String! + """Sell volume USD 1w""" + sellVolumeUsd1w: String! + """Sell volume USD 1m""" + sellVolumeUsd1m: String! + """Volume change 12h""" + volumeChange12h: Float! + """Volume change 24h""" + volumeChange24h: Float! + """Volume change 1w""" + volumeChange1w: Float! + """Volume change 1m""" + volumeChange1m: Float! + """Realized PnL USD 12h""" + realizedPnlUsd12h: String! + """Realized PnL USD 24h""" + realizedPnlUsd24h: String! + """Realized PnL USD 1w""" + realizedPnlUsd1w: String! + """Realized PnL USD 1m""" + realizedPnlUsd1m: String! + """Realized PnL CT 12h""" + realizedPnlCT12h: String! + """Realized PnL CT 24h""" + realizedPnlCT24h: String! + """Realized PnL CT 1w""" + realizedPnlCT1w: String! + """Realized PnL CT 1m""" + realizedPnlCT1m: String! + """Realized profit percentage 12h""" + realizedProfitPercentage12h: Float! + """Realized profit percentage 24h""" + realizedProfitPercentage24h: Float! + """Realized profit percentage 1w""" + realizedProfitPercentage1w: Float! + """Realized profit percentage 1m""" + realizedProfitPercentage1m: Float! + """Realized PnL change 12h""" + realizedPnlChange12h: Float! + """Realized PnL change 24h""" + realizedPnlChange24h: Float! + """Realized PnL change 1w""" + realizedPnlChange1w: Float! + """Realized PnL change 1m""" + realizedPnlChange1m: Float! + """Trades 12h""" + trades12h: Int! + """Trades 24h""" + trades24h: Int! + """Trades 1w""" + trades1w: Int! + """Trades 1m""" + trades1m: Int! + """Buys 12h""" + buys12h: Int! + """Buys 24h""" + buys24h: Int! + """Buys 1w""" + buys1w: Int! + """Buys 1m""" + buys1m: Int! + """Sells 12h""" + sells12h: Int! + """Sells 24h""" + sells24h: Int! + """Sells 1w""" + sells1w: Int! + """Sells 1m""" + sells1m: Int! + """Unique markets 12h""" + uniqueMarkets12h: Int! + """Unique markets 24h""" + uniqueMarkets24h: Int! + """Unique markets 1w""" + uniqueMarkets1w: Int! + """Unique markets 1m""" + uniqueMarkets1m: Int! + """Wins 12h""" + wins12h: Int! + """Wins 24h""" + wins24h: Int! + """Wins 1w""" + wins1w: Int! + """Wins 1m""" + wins1m: Int! + """Losses 12h""" + losses12h: Int! + """Losses 24h""" + losses24h: Int! + """Losses 1w""" + losses1w: Int! + """Losses 1m""" + losses1m: Int! + """Win rate 12h (0-1)""" + winRate12h: Float! + """Win rate 24h (0-1)""" + winRate24h: Float! + """Win rate 1w (0-1)""" + winRate1w: Float! + """Win rate 1m (0-1)""" + winRate1m: Float! + """Average profit USD per trade 12h""" + averageProfitUsdPerTrade12h: String! + """Average profit USD per trade 24h""" + averageProfitUsdPerTrade24h: String! + """Average profit USD per trade 1w""" + averageProfitUsdPerTrade1w: String! + """Average profit USD per trade 1m""" + averageProfitUsdPerTrade1m: String! + """Average swap amount USD 12h""" + averageSwapAmountUsd12h: String! + """Average swap amount USD 24h""" + averageSwapAmountUsd24h: String! + """Average swap amount USD 1w""" + averageSwapAmountUsd1w: String! + """Average swap amount USD 1m""" + averageSwapAmountUsd1m: String! + """Held token acquisition cost USD""" + heldTokenAcquisitionCostUsd: String! + """Held token acquisition cost CT""" + heldTokenAcquisitionCostCT: String! +} + +"""Response returned by `filterPredictionTraders`.""" +type PredictionTraderFilterConnection { + """Total number of matching results.""" + count: Int! + """The current page number.""" + page: Int! + """The list of results.""" + results: [PredictionTraderFilterResult!]! +} + +"""Input for `onPredictionTradesCreated`.""" +input OnPredictionTradesCreatedInput { + """The ID of the prediction market.""" + marketId: String + """The ID of the prediction event.""" + eventId: String + """The ID of the prediction trader.""" + traderId: String +} + +"""Payload for `onPredictionTradesCreated`.""" +type AddPredictionTradeOutput { + """The ID of the prediction market.""" + marketId: String! + """The ID of the prediction event.""" + eventId: String! + """The number of trades.""" + trades: [PredictionTrade]! +} + +"""Payload for `onDetailedPredictionMarketStatsUpdated`.""" +type DetailedSubscriptionPredictionMarketStats { + """The ID of the prediction market.""" + marketId: String! + """The timestamp of the last transaction.""" + lastTransactionAt: Int! + """Lifecycle metadata.""" + lifecycle: PredictionLifecycleStats! + """Stats for the 5-minute window.""" + statsMin5: EnhancedWindowedPredictionMarketStats + """Stats for the 1-hour window.""" + statsHour1: EnhancedWindowedPredictionMarketStats + """Stats for the 4-hour window.""" + statsHour4: EnhancedWindowedPredictionMarketStats + """Stats for the 12-hour window.""" + statsHour12: EnhancedWindowedPredictionMarketStats + """Stats for the 1-day window.""" + statsDay1: EnhancedWindowedPredictionMarketStats + """Stats for the 1-week window.""" + statsWeek1: EnhancedWindowedPredictionMarketStats + """Trending scores across time windows.""" + trendingScores: DetailedPredictionStatsScores! + """Relevance scores across time windows.""" + relevanceScores: DetailedPredictionStatsScores! + """Competitive scores across time windows.""" + competitiveScores: DetailedPredictionStatsScores! + """All-time aggregate stats.""" + allTimeStats: PredictionMarketAllTimeStats! +} + +"""Payload for `onDetailedPredictionEventStatsUpdated`.""" +type DetailedSubscriptionPredictionEventStats { + """The ID of the prediction event.""" + eventId: String! + """The timestamp of the last transaction.""" + lastTransactionAt: Int! + """Lifecycle metadata.""" + lifecycle: PredictionLifecycleStats! + """Stats for the 5-minute window.""" + statsMin5: EnhancedWindowedPredictionEventStats + """Stats for the 1-hour window.""" + statsHour1: EnhancedWindowedPredictionEventStats + """Stats for the 4-hour window.""" + statsHour4: EnhancedWindowedPredictionEventStats + """Stats for the 12-hour window.""" + statsHour12: EnhancedWindowedPredictionEventStats + """Stats for the 1-day window.""" + statsDay1: EnhancedWindowedPredictionEventStats + """Stats for the 1-week window.""" + statsWeek1: EnhancedWindowedPredictionEventStats + """Trending scores across time windows.""" + trendingScores: DetailedPredictionStatsScores! + """Relevance scores across time windows.""" + relevanceScores: DetailedPredictionStatsScores! + """All-time aggregate stats.""" + allTimeStats: PredictionEventAllTimeStats! +} + +"""Payload for `onPredictionMarketBarsUpdated`.""" +type OnPredictionMarketBarsUpdatedResponse { + """The ID of the prediction market.""" + marketId: String! + """The bar data.""" + bars: PredictionMarketResolutionBarData! +} + +"""Payload for `onPredictionEventBarsUpdated`.""" +type OnPredictionEventBarsUpdatedResponse { + """The ID of the prediction event.""" + eventId: String! + """The bar data.""" + bars: PredictionEventResolutionBarData! +} + +"""Multi-resolution bar data for a prediction market.""" +type PredictionMarketResolutionBarData { + """Data for the 1-minute resolution.""" + min1: PredictionMarketBar + """Data for the 5-minute resolution.""" + min5: PredictionMarketBar + """Data for the 15-minute resolution.""" + min15: PredictionMarketBar + """Data for the 30-minute resolution.""" + min30: PredictionMarketBar + """Data for the 1-hour resolution.""" + hour1: PredictionMarketBar + """Data for the 4-hour resolution.""" + hour4: PredictionMarketBar + """Data for the 12-hour resolution.""" + hour12: PredictionMarketBar + """Data for the 1-day resolution.""" + day1: PredictionMarketBar + """Data for the 1-week resolution.""" + week1: PredictionMarketBar +} + +"""Multi-resolution bar data for a prediction event.""" +type PredictionEventResolutionBarData { + """Data for the 1-minute resolution.""" + min1: PredictionEventBar + """Data for the 5-minute resolution.""" + min5: PredictionEventBar + """Data for the 15-minute resolution.""" + min15: PredictionEventBar + """Data for the 30-minute resolution.""" + min30: PredictionEventBar + """Data for the 1-hour resolution.""" + hour1: PredictionEventBar + """Data for the 4-hour resolution.""" + hour4: PredictionEventBar + """Data for the 12-hour resolution.""" + hour12: PredictionEventBar + """Data for the 1-day resolution.""" + day1: PredictionEventBar + """Data for the 1-week resolution.""" + week1: PredictionEventBar +} + +"""Input for fetching prediction market price data.""" +input PredictionMarketPriceInput { + """The ID of the prediction market.""" + marketId: String! + """The timestamp (unix seconds). If not provided, the latest price will be returned.""" + timestamp: Int +} + +"""Price data for a prediction market.""" +type PredictionMarketPrice { + """The ID of the prediction market.""" + marketId: String! + """The timestamp of the price data.""" + timestamp: Int! + """The prices for the outcomes.""" + outcomes: [PredictionMarketOutcomePrice!]! +} + +"""Price data for a single outcome within a prediction market.""" +type PredictionMarketOutcomePrice { + """The ID of the outcome.""" + outcomeId: String! + """The last trade price in USD.""" + lastTradePriceUsd: String + """The last trade price in collateral token units.""" + lastTradePriceCT: String + """The best bid in USD.""" + bestBidUsd: String + """The best bid in collateral token units.""" + bestBidCT: String + """The best ask in USD.""" + bestAskUsd: String + """The best ask in collateral token units.""" + bestAskCT: String + """The spread in USD.""" + spreadUsd: String + """The spread in collateral token units.""" + spreadCT: String + """Live top-of-book best bid in USD, sourced from the venue's CLOB. Polymarket and Kalshi; null for other venues. Fetched on-demand only when selected. Cached for up to 10s.""" + bestBookBidUsd: String + """Live top-of-book best bid in collateral token units, sourced from the venue's CLOB. Polymarket and Kalshi; null for other venues. Fetched on-demand only when selected. Cached for up to 10s.""" + bestBookBidCT: String + """Live top-of-book best ask in USD, sourced from the venue's CLOB. Polymarket and Kalshi; null for other venues. Fetched on-demand only when selected. Cached for up to 10s.""" + bestBookAskUsd: String + """Live top-of-book best ask in collateral token units, sourced from the venue's CLOB. Polymarket and Kalshi; null for other venues. Fetched on-demand only when selected. Cached for up to 10s.""" + bestBookAskCT: String + """Total bid-side notional liquidity in USD across all bid levels in the venue's CLOB. Polymarket and Kalshi; null for other venues. Fetched on-demand only when selected. Cached for up to 10s.""" + bookLiquidityUsd: String + """Total bid-side notional liquidity in collateral token units across all bid levels in the venue's CLOB. Polymarket and Kalshi; null for other venues. Fetched on-demand only when selected. Cached for up to 10s.""" + bookLiquidityCT: String + """The timestamp of the price data.""" + timestamp: Int! +} + +"""A single price level within a prediction outcome's order book. Polymarket and Kalshi.""" +type PredictionOrderBookLevel { + """The price in collateral token units.""" + price: Float! + """The size at this price level, in shares.""" + size: Float! +} + +"""A live order book snapshot for a single prediction outcome, sourced from the venue's CLOB. Polymarket and Kalshi; outcomes from other venues return no book. Cached for up to 10s.""" +type PredictionOutcomeOrderBook { + """The composite outcome ID.""" + outcomeId: String! + """The protocol that provides this market.""" + protocol: PredictionProtocol! + """The venue-specific outcome / asset / token ID used by the venue's CLOB.""" + venueOutcomeId: String! + """Bids ordered such that the last element is the best (highest) bid. Empty when no book is available.""" + bids: [PredictionOrderBookLevel!]! + """Asks ordered such that the last element is the best (lowest) ask. Empty when no book is available.""" + asks: [PredictionOrderBookLevel!]! + """Venue-reported timestamp for the snapshot, in unix seconds. 0 when no book is available.""" + timestamp: Int! + """Total bid-side notional liquidity in USD across all bid levels in the venue's CLOB. Null when no book is available.""" + bookLiquidityUsd: String + """Total bid-side notional liquidity in collateral token units across all bid levels in the venue's CLOB. Null when no book is available.""" + bookLiquidityCT: String +} + +"""Response returned by `eventScopedFilterPredictionMarkets`. All markets belong to the same event, so `eventShape` and `eventId` are surfaced once at the connection level rather than repeated on every row.""" +type EventScopedPredictionMarketFilterConnection { + """Total number of matching results.""" + count: Int! + """The current page number.""" + page: Int! + """Event-level shape (one per event; identical for all markets in a single-event query).""" + eventShape: PredictionEventShape! + """The ID of the prediction event.""" + eventId: String! + """The list of results.""" + results: [EventScopedPredictionMarketFilterResult!]! +} + +"""A prediction market scoped to a single event, paired with its structured classification metadata.""" +type EventScopedPredictionMarketFilterResult { + """The prediction market filter result.""" + marketResult: PredictionMarketFilterResult! + """Structured classification metadata. Discriminated by `classification.role`; carries `segment` (period/stat), `entrant` (with country code / image), `thresholdBucket` (parsed numeric rung + operator), and `dateBucket` (unix timestamp + operator) sub-blocks. See `MarketClassifier/CLASSIFICATION.md` for the consumer guide.""" + classification: PredictionMarketClassification! +} + +"""Deprecated. Sort order for markets within a prediction event. This no longer affects market ordering.""" +enum PredictionEventMarketSort { + """Deprecated. No longer affects market ordering.""" + SMART @deprecated(reason: "No longer affects market ordering.") + """Deprecated. No longer affects market ordering.""" + NONE @deprecated(reason: "No longer affects market ordering.") +} + +"""The quote token within the pair.""" +enum QuoteToken { + token0 + token1 +} + +enum NetworkConfigType { + SOLANA + EVM + SUI + APTOS + STARKNET +} + +type ExplorerConfig { + checksummed: Boolean! + icon: String! + name: String! + url: String! +} + +interface NetworkConfigBase { + id: ID! + networkId: Int! + baseTokenAddress: String! + baseTokenSymbol: String! + color: String + defaultPairAddress: String! + defaultPairQuoteToken: QuoteToken! + enabled: Boolean! + newTokensEnabled: Boolean + explorer: ExplorerConfig! + mainnet: Boolean! + name: String! + networkIconUrl: String! + networkName: String! + networkShortName: String! + networkType: NetworkConfigType! + wrappedBaseTokenSymbol: String! + stableCoinAddresses: [String!] +} + +union NetworkConfig = EvmNetworkConfig | SolanaNetworkConfig | SuiNetworkConfig | AptosNetworkConfig | StarknetNetworkConfig + +"""The type of webhook.""" +enum WebhookType { + PRICE_EVENT + TOKEN_PAIR_EVENT + RAW_TRANSACTION + MARKET_CAP_EVENT + TOKEN_PRICE_EVENT + TOKEN_TRANSFER_EVENT + PREDICTION_TRADE + PREDICTION_MARKET_METRICS_EVENT +} + +"""Input for deleting webhooks.""" +input DeleteWebhooksInput { + """A list of webhook IDs to delete.""" + webhookIds: [String!]! +} + +"""Result returned by `deleteWebhooks`.""" +type DeleteWebhooksOutput { + """The list of webhook IDs that were deleted.""" + deletedIds: [String] +} + +"""Input for creating webhooks.""" +input CreateWebhooksInput { + """Input for creating price webhooks.""" + priceWebhooksInput: CreatePriceWebhooksInput @deprecated(reason: "Use tokenPriceEventWebhooksInput instead.") + """Input for creating token pair event webhooks.""" + tokenPairEventWebhooksInput: CreateTokenPairEventWebhooksInput + """Input for creating raw transaction webhooks.""" + rawTransactionWebhooksInput: CreateRawTransactionWebhooksInput + """Input for creating market cap webhooks.""" + marketCapWebhooksInput: CreateMarketCapWebhooksInput + """Input for creating token price event webhooks.""" + tokenPriceEventWebhooksInput: CreateTokenPriceEventWebhooksInput + """Input for creating token transfer event webhooks.""" + tokenTransferEventWebhooksInput: CreateTokenTransferEventWebhooksInput + """Input for creating prediction trade webhooks.""" + predictionTradeWebhooksInput: CreatePredictionTradeWebhooksInput + """Input for creating prediction market metrics event webhooks.""" + predictionMarketMetricsEventWebhooksInput: CreatePredictionMarketMetricsEventWebhooksInput +} + +"""A bucket identifier for grouping and querying webhooks. Provide both fields together so bucket-based queries work correctly.""" +input BucketKeyInput { + """The bucket ID for the webhook.""" + bucketId: String! + """The bucket sort key for the webhook.""" + bucketSortKey: String! +} + +"""Input for creating price webhooks.""" +input CreatePriceWebhooksInput { + """A list of price webhooks to create.""" + webhooks: [CreatePriceWebhookArgs!]! +} + +"""Input for creating a price webhook.""" +input CreatePriceWebhookArgs { + """The name of the webhook (max 128 characters).""" + name: String! + """The url to which the webhook message should be sent.""" + callbackUrl: String! + """A string value to hash along with `deduplicationId` using SHA-256. Included in the webhook message for added security.""" + securityToken: String! + """The recurrence of the webhook. Can be `INDEFINITE` or `ONCE`.""" + alertRecurrence: AlertRecurrence! + """A webhook group ID (max 64 characters). Can be used to group webhooks so that their messages are kept in order as a group rather than by individual webhook.""" + groupId: String @deprecated(reason: "GroupId is deprecated and will be removed in the future. Messages will be grouped by webhookId") + """The conditions which must be met in order for the webhook to send a message.""" + conditions: PriceEventWebhookConditionInput! + """The settings for retrying failed webhook messages.""" + retrySettings: RetrySettingsInput + """An optional bucket key for grouping and querying webhooks. Prefer this over the deprecated flat bucket fields.""" + bucketKey: BucketKeyInput + """Deprecated. Use `bucketKey.bucketId` instead. Existing webhooks created with `bucketId` and `bucketSortkey` will continue to work.""" + bucketId: String @deprecated(reason: "Use bucketKey.bucketId instead.") + """Deprecated. Use `bucketKey.bucketSortKey` instead. Existing webhooks created with `bucketId` and `bucketSortkey` will continue to work.""" + bucketSortkey: String @deprecated(reason: "Use bucketKey.bucketSortKey instead.") + """The type of publishing for the webhook. If not set, it defaults to `SINGLE`.""" + publishingType: PublishingType + """If enabled, new webhooks won't be created if a webhook with the same parameters already exists. If callbackUrl, conditions, publishingType, and alertRecurrence all match, then we return the existing webhook.""" + deduplicate: Boolean +} + +"""Input for creating market cap webhooks.""" +input CreateMarketCapWebhooksInput { + """A list of market cap webhooks to create.""" + webhooks: [CreateMarketCapWebhookArgs!]! +} + +"""Input for creating a market cap webhook.""" +input CreateMarketCapWebhookArgs { + """The name of the webhook (max 128 characters).""" + name: String! + """The url to which the webhook message should be sent.""" + callbackUrl: String! + """A string value to hash along with `deduplicationId` using SHA-256. Included in the webhook message for added security.""" + securityToken: String! + """The recurrence of the webhook. Can be `INDEFINITE` or `ONCE`.""" + alertRecurrence: AlertRecurrence! + """A webhook group ID (max 64 characters). Can be used to group webhooks so that their messages are kept in order as a group rather than by individual webhook.""" + groupId: String @deprecated(reason: "GroupId is deprecated and will be removed in the future. Messages will be grouped by webhookId") + """The conditions which must be met in order for the webhook to send a message.""" + conditions: MarketCapEventWebhookConditionInput! + """The settings for retrying failed webhook messages.""" + retrySettings: RetrySettingsInput + """An optional bucket key for grouping and querying webhooks. Prefer this over the deprecated flat bucket fields.""" + bucketKey: BucketKeyInput + """Deprecated. Use `bucketKey.bucketId` instead. Existing webhooks created with `bucketId` and `bucketSortkey` will continue to work.""" + bucketId: String @deprecated(reason: "Use bucketKey.bucketId instead.") + """Deprecated. Use `bucketKey.bucketSortKey` instead. Existing webhooks created with `bucketId` and `bucketSortkey` will continue to work.""" + bucketSortkey: String @deprecated(reason: "Use bucketKey.bucketSortKey instead.") + """The type of publishing for the webhook. If not set, it defaults to `SINGLE`.""" + publishingType: PublishingType + """If enabled, new webhooks won't be created if a webhook with the same parameters already exists. If callbackUrl, conditions, publishingType, and alertRecurrence all match, then we return the existing webhook.""" + deduplicate: Boolean +} + +"""Config input for retrying failed webhook messages.""" +input RetrySettingsInput { + """The maximum time in seconds that the webhook will retry sending a message""" + maxTimeElapsed: Int + """The minimum time in seconds that the webhook will wait before retrying a failed message""" + minRetryDelay: Int + """The maximum time in seconds that the webhook will wait before retrying a failed message""" + maxRetryDelay: Int + """The maximum number of times the webhook will retry sending a message""" + maxRetries: Int +} + +"""Input conditions for a price event webhook.""" +input PriceEventWebhookConditionInput { + """The contract address of the token to listen for.""" + tokenAddress: StringEqualsConditionInput! + """The network ID to listen on.""" + networkId: IntEqualsConditionInput! + """The price conditions to listen for.""" + priceUsd: ComparisonOperatorInput! + """The contract address of the pair to listen for.""" + pairAddress: StringEqualsConditionInput + """The volume conditions to listen for.""" + volumeUsd: ComparisonOperatorInput + """The liquidity conditions to listen for.""" + liquidityUsd: ComparisonOperatorInput +} + +"""Input conditions for a market cap event webhook.""" +input MarketCapEventWebhookConditionInput { + """The contract address of the token to listen for.""" + tokenAddress: StringEqualsConditionInput! + """The network ID to listen on.""" + networkId: IntEqualsConditionInput! + """The price conditions to listen for.""" + fdvMarketCapUsd: ComparisonOperatorInput + """The circulating market cap conditions to listen for.""" + circulatingMarketCapUsd: ComparisonOperatorInput + """The contract address of the pair to listen for.""" + pairAddress: StringEqualsConditionInput + """The volume conditions to listen for.""" + volumeUsd: ComparisonOperatorInput + """The liquidity conditions to listen for.""" + liquidityUsd: ComparisonOperatorInput +} + +"""Input for creating token price event webhooks.""" +input CreateTokenPriceEventWebhooksInput { + """A list of token price event webhooks to create.""" + webhooks: [CreateTokenPriceEventWebhookArgs!]! +} + +"""Input for creating a token price event webhook.""" +input CreateTokenPriceEventWebhookArgs { + """The name of the webhook (max 128 characters).""" + name: String! + """The url to which the webhook message should be sent.""" + callbackUrl: String! + """A string value to hash along with `deduplicationId` using SHA-256. Included in the webhook message for added security.""" + securityToken: String! + """The recurrence of the webhook. Can be `INDEFINITE` or `ONCE`.""" + alertRecurrence: AlertRecurrence! + """The conditions which must be met in order for the webhook to send a message.""" + conditions: TokenPriceEventWebhookConditionInput! + """The settings for retrying failed webhook messages.""" + retrySettings: RetrySettingsInput + """An optional bucket key for grouping and querying webhooks. Prefer this over the deprecated flat bucket fields.""" + bucketKey: BucketKeyInput + """Deprecated. Use `bucketKey.bucketId` instead. Existing webhooks created with `bucketId` and `bucketSortkey` will continue to work.""" + bucketId: String @deprecated(reason: "Use bucketKey.bucketId instead.") + """Deprecated. Use `bucketKey.bucketSortKey` instead. Existing webhooks created with `bucketId` and `bucketSortkey` will continue to work.""" + bucketSortkey: String @deprecated(reason: "Use bucketKey.bucketSortKey instead.") + """The type of publishing for the webhook. If not set, it defaults to `SINGLE`.""" + publishingType: PublishingType + """If enabled, new webhooks won't be created if a webhook with the same parameters already exists. If callbackUrl, conditions, publishingType, and alertRecurrence all match, then we return the existing webhook.""" + deduplicate: Boolean +} + +"""Input conditions for a token price event webhook.""" +input TokenPriceEventWebhookConditionInput { + """The contract address of the token to listen for.""" + address: StringEqualsConditionInput! + """The network ID to listen on.""" + networkId: IntEqualsConditionInput! + """The price conditions to listen for.""" + priceUsd: ComparisonOperatorInput! +} + +"""Input for creating token transfer event webhooks.""" +input CreateTokenTransferEventWebhooksInput { + """A list of token transfer event webhooks to create.""" + webhooks: [CreateTokenTransferEventWebhookArgs!]! +} + +"""Input for creating a token transfer event webhook.""" +input CreateTokenTransferEventWebhookArgs { + """The name of the webhook (max 128 characters).""" + name: String! + """The url to which the webhook message should be sent.""" + callbackUrl: String! + """A string value to hash along with `deduplicationId` using SHA-256. Included in the webhook message for added security.""" + securityToken: String! + """The recurrence of the webhook. Can be `INDEFINITE` or `ONCE`.""" + alertRecurrence: AlertRecurrence! + """The conditions which must be met in order for the webhook to send a message.""" + conditions: TokenTransferEventWebhookConditionInput! + """The settings for retrying failed webhook messages.""" + retrySettings: RetrySettingsInput + """An optional bucket key for grouping and querying webhooks. Prefer this over the deprecated flat bucket fields.""" + bucketKey: BucketKeyInput + """Deprecated. Use `bucketKey.bucketId` instead. Existing webhofoks created with `bucketId` and `bucketSortkey` will continue to work.""" + bucketId: String @deprecated(reason: "Use bucketKey.bucketId instead.") + """Deprecated. Use `bucketKey.bucketSortKey` instead. Existing webhooks created with `bucketId` and `bucketSortkey` will continue to work.""" + bucketSortkey: String @deprecated(reason: "Use bucketKey.bucketSortKey instead.") + """The type of publishing for the webhook. If not set, it defaults to `SINGLE`.""" + publishingType: PublishingType + """If enabled, new webhooks won't be created if a webhook with the same parameters already exists. If callbackUrl, conditions, publishingType, and alertRecurrence all match, then we return the existing webhook.""" + deduplicate: Boolean +} + +"""Input conditions for a token transfer event webhook.""" +input TokenTransferEventWebhookConditionInput { + """The contract address of the token to listen for.""" + tokenAddress: StringEqualsConditionInput + """The list of network IDs to listen on.""" + networkId: OneOfNumberConditionInput + """The wallet address to listen for transfers from or to.""" + address: StringEqualsConditionInput + """The direction of the transfer (TO, FROM). Defaults to [TO, FROM] if not specified.""" + direction: OneOfTokenTransferDirectionConditionInput +} + +"""Input for token transfer direction list condition.""" +input OneOfTokenTransferDirectionConditionInput { + """The list of transfer directions to listen for.""" + oneOf: [TokenTransferDirection!]! +} + +"""Input for creating prediction trade webhooks.""" +input CreatePredictionTradeWebhooksInput { + """A list of prediction trade webhooks to create.""" + webhooks: [CreatePredictionTradeWebhookArgs!]! +} + +"""Input for creating a prediction trade webhook.""" +input CreatePredictionTradeWebhookArgs { + """The name of the webhook (max 128 characters).""" + name: String! + """The url to which the webhook message should be sent.""" + callbackUrl: String! + """A string value to hash along with `deduplicationId` using SHA-256. Included in the webhook message for added security.""" + securityToken: String! + """The recurrence of the webhook. Can be `INDEFINITE` or `ONCE`.""" + alertRecurrence: AlertRecurrence! + """The conditions which must be met in order for the webhook to send a message.""" + conditions: PredictionTradeWebhookConditionInput! + """The settings for retrying failed webhook messages.""" + retrySettings: RetrySettingsInput + """An optional bucket key for grouping and querying webhooks. Prefer this over the deprecated flat bucket fields.""" + bucketKey: BucketKeyInput +} + +"""Input conditions for a prediction trade webhook.""" +input PredictionTradeWebhookConditionInput { + """The trader ID to listen for.""" + traderId: StringEqualsConditionInput + """The market ID to listen for.""" + marketId: StringEqualsConditionInput + """The event ID to listen for.""" + eventId: StringEqualsConditionInput + """The trade event types to listen for.""" + eventType: PredictionTradeEventTypeConditionInput + """The trade value in USD condition.""" + tradeValueUsd: ComparisonOperatorInput + """The amount of tokens/shares traded condition.""" + amountToken: ComparisonOperatorInput +} + +"""Per-window stat thresholds for a PredictionMarketMetricsEvent webhook outcome. All present fields are ANDed.""" +input WindowedPredictionMarketMetricsEventOutcomeConditionInput { + price: ComparisonOperatorInput + priceChange: ComparisonOperatorInput + volumeUsd: ComparisonOperatorInput + volumeChange: ComparisonOperatorInput + trades: ComparisonOperatorInput + tradesChange: ComparisonOperatorInput +} + +"""Per-window market-level stat thresholds. All present fields ANDed.""" +input WindowedPredictionMarketMetricsEventMarketConditionInput { + volumeUsd: ComparisonOperatorInput + trades: ComparisonOperatorInput + volumeChange: ComparisonOperatorInput + tradesChange: ComparisonOperatorInput +} + +"""Per-window market-level conditions across all 6 windows.""" +input PredictionMarketMetricsEventMarketConditionInput { + min5: WindowedPredictionMarketMetricsEventMarketConditionInput + hour1: WindowedPredictionMarketMetricsEventMarketConditionInput + hour4: WindowedPredictionMarketMetricsEventMarketConditionInput + hour12: WindowedPredictionMarketMetricsEventMarketConditionInput + day1: WindowedPredictionMarketMetricsEventMarketConditionInput + week1: WindowedPredictionMarketMetricsEventMarketConditionInput +} + +"""Input conditions for a PredictionMarketMetricsEvent webhook.""" +input PredictionMarketMetricsEventWebhookConditionInput { + """The market ID to listen for.""" + marketId: StringEqualsConditionInput! + """Conditions evaluated against market-level aggregate stats. ANDed with other clauses when also present.""" + market: PredictionMarketMetricsEventMarketConditionInput + """Conditions evaluated against outcome 0's stats. ANDed with outcome1 and anyOutcome when also present.""" + outcome0: PredictionMarketMetricsEventOutcomeConditionInput + """Conditions evaluated against outcome 1's stats. ANDed with outcome0 and anyOutcome when also present.""" + outcome1: PredictionMarketMetricsEventOutcomeConditionInput + """Conditions evaluated against both outcomes; matches if at least one outcome satisfies. ANDed with outcome0 and outcome1 when also present.""" + anyOutcome: PredictionMarketMetricsEventOutcomeConditionInput +} + +"""Per-outcome conditions for a PredictionMarketMetricsEvent webhook.""" +input PredictionMarketMetricsEventOutcomeConditionInput { + """Conditions for the 5-minute window.""" + min5: WindowedPredictionMarketMetricsEventOutcomeConditionInput + """Conditions for the 1-hour window.""" + hour1: WindowedPredictionMarketMetricsEventOutcomeConditionInput + """Conditions for the 4-hour window.""" + hour4: WindowedPredictionMarketMetricsEventOutcomeConditionInput + """Conditions for the 12-hour window.""" + hour12: WindowedPredictionMarketMetricsEventOutcomeConditionInput + """Conditions for the 1-day window.""" + day1: WindowedPredictionMarketMetricsEventOutcomeConditionInput + """Conditions for the 1-week window.""" + week1: WindowedPredictionMarketMetricsEventOutcomeConditionInput +} + +"""Input for creating a prediction market metrics event webhook.""" +input CreatePredictionMarketMetricsEventWebhookArgs { + """The name of the webhook (max 128 characters).""" + name: String! + """The url to which the webhook message should be sent.""" + callbackUrl: String! + """A string value to hash along with `deduplicationId` using SHA-256. Included in the webhook message for added security.""" + securityToken: String! + """The recurrence of the webhook. Can be `INDEFINITE` or `ONCE`.""" + alertRecurrence: AlertRecurrence! + """The conditions which must be met in order for the webhook to send a message.""" + conditions: PredictionMarketMetricsEventWebhookConditionInput! + """The settings for retrying failed webhook messages.""" + retrySettings: RetrySettingsInput + """An optional bucket key for grouping and querying webhooks. Prefer this over the deprecated flat bucket fields.""" + bucketKey: BucketKeyInput + """The type of publishing for the webhook. If not set, it defaults to `SINGLE`.""" + publishingType: PublishingType + """If enabled, new webhooks won't be created if a webhook with the same parameters already exists. If callbackUrl, conditions, publishingType, and alertRecurrence all match, then we return the existing webhook.""" + deduplicate: Boolean +} + +"""Input for creating prediction market metrics event webhooks.""" +input CreatePredictionMarketMetricsEventWebhooksInput { + """A list of prediction market metrics event webhooks to create.""" + webhooks: [CreatePredictionMarketMetricsEventWebhookArgs!]! +} + +"""Input for prediction trade event type condition.""" +input PredictionTradeEventTypeConditionInput { + """The list of prediction trade event types to match.""" + oneOf: [PredictionTradeEventType!]! +} + +"""Prediction trade event types.""" +enum PredictionTradeEventType { + TRADE + BUY + SELL + BUY_COUNTERPARTY + SELL_COUNTERPARTY + PAYOUT_REDEMPTION @deprecated(reason: "PAYOUT_REDEMPTION is deprecated and will be removed in the future. Use POSITION_REDEEMED instead.") + POSITION_REDEEMED +} + +"""Input for creating token pair event webhooks.""" +input CreateTokenPairEventWebhooksInput { + """A list of token pair event webhooks to create.""" + webhooks: [CreateTokenPairEventWebhookArgs!]! +} + +"""Input for creating a token pair event webhook.""" +input CreateTokenPairEventWebhookArgs { + """The name of the webhook (max 128 characters).""" + name: String! + """The url to which the webhook message should be sent.""" + callbackUrl: String! + """A string value to hash along with `deduplicationId` using SHA-256. Included in the webhook message for added security.""" + securityToken: String! + """The recurrence of the webhook. Can be `INDEFINITE` or `ONCE`.""" + alertRecurrence: AlertRecurrence! + """A webhook group ID (max 64 characters). Can be used to group webhooks so that their messages are kept in order as a group rather than by individual webhook.""" + groupId: String @deprecated(reason: "GroupId is deprecated and will be removed in the future. Messages will be grouped by webhookId") + """The conditions which must be met in order for the webhook to send a message.""" + conditions: TokenPairEventWebhookConditionInput! + """The settings for retrying failed webhook messages.""" + retrySettings: RetrySettingsInput + """An optional bucket key for grouping and querying webhooks. Prefer this over the deprecated flat bucket fields.""" + bucketKey: BucketKeyInput + """Deprecated. Use `bucketKey.bucketId` instead. Existing webhooks created with `bucketId` and `bucketSortkey` will continue to work.""" + bucketId: String @deprecated(reason: "Use bucketKey.bucketId instead.") + """Deprecated. Use `bucketKey.bucketSortKey` instead. Existing webhooks created with `bucketId` and `bucketSortkey` will continue to work.""" + bucketSortkey: String @deprecated(reason: "Use bucketKey.bucketSortKey instead.") + """The type of publishing for the webhook. If not set, it defaults to `SINGLE`.""" + publishingType: PublishingType + """If enabled, new webhooks won't be created if a webhook with the same parameters already exists. If callbackUrl, conditions, publishingType, and alertRecurrence all match, then we return the existing webhook.""" + deduplicate: Boolean +} + +"""Input conditions for a token pair event webhook.""" +input TokenPairEventWebhookConditionInput { + """A list of network IDs to listen on.""" + networkId: OneOfNumberConditionInput + """The maker wallet address to listen for.""" + maker: StringEqualsConditionInput + """The pair contract address to listen for.""" + pairAddress: StringEqualsConditionInput + """The exchange contract address to listen for.""" + exchangeAddress: StringEqualsConditionInput + """The token contract address to listen for.""" + tokenAddress: StringEqualsConditionInput + """The swap values to listen for.""" + swapValue: ComparisonOperatorInput + """The token event type to listen for.""" + eventType: TokenPairEventTypeConditionInput +} + +"""Input for token pair event type condition.""" +input TokenPairEventTypeConditionInput { + """The list of token event types to equal.""" + oneOf: [TokenPairEventType!]! +} + +"""Token pair event types.""" +enum TokenPairEventType { + SWAP + MINT + BURN + SYNC + BUY + SELL + COLLECT + COLLECT_PROTOCOL +} + +"""The direction of a token transfer.""" +enum TokenTransferDirection { + """Tokens sent from the address.""" + FROM + """Tokens received to the address.""" + TO +} + +"""Input for creating Raw Transaction webhooks.""" +input CreateRawTransactionWebhooksInput { + """A list of Raw Transaction webhooks to create.""" + webhooks: [CreateRawTransactionWebhookArgs!]! +} + +"""Input for creating a Raw Transaction webhook.""" +input CreateRawTransactionWebhookArgs { + """The name of the webhook (max 128 characters).""" + name: String! + """The url to which the webhook message should be sent.""" + callbackUrl: String! + """A string value to hash along with `deduplicationId` using SHA-256. Included in the webhook message for added security.""" + securityToken: String! + """The recurrence of the webhook. Can be `INDEFINITE` or `ONCE`.""" + alertRecurrence: AlertRecurrence! + """A webhook group ID (max 64 characters). Can be used to group webhooks so that their messages are kept in order as a group rather than by individual webhook.""" + groupId: String @deprecated(reason: "GroupId is deprecated and will be removed in the future. Messages will be grouped by webhookId") + """The conditions which must be met in order for the webhook to send a message.""" + conditions: RawTransactionWebhookConditionInput! + """The settings for retrying failed webhook messages.""" + retrySettings: RetrySettingsInput + """An optional bucket key for grouping and querying webhooks. Prefer this over the deprecated flat bucket fields.""" + bucketKey: BucketKeyInput + """Deprecated. Use `bucketKey.bucketId` instead. Existing webhooks created with `bucketId` and `bucketSortkey` will continue to work.""" + bucketId: String @deprecated(reason: "Use bucketKey.bucketId instead.") + """Deprecated. Use `bucketKey.bucketSortKey` instead. Existing webhooks created with `bucketId` and `bucketSortkey` will continue to work.""" + bucketSortkey: String @deprecated(reason: "Use bucketKey.bucketSortKey instead.") + """The type of publishing for the webhook. If not set, it defaults to `SINGLE`.""" + publishingType: PublishingType + """If enabled, new webhooks won't be created if a webhook with the same parameters already exists. If callbackUrl, conditions, publishingType, and alertRecurrence all match, then we return the existing webhook.""" + deduplicate: Boolean +} + +"""Input conditions for a Raw Transaction webhook.""" +input RawTransactionWebhookConditionInput { + """A list of network IDs to listen on.""" + networkId: OneOfNumberConditionInput + """The to address to listen for.""" + to: StringEqualsConditionInput + """The from address to listen for.""" + from: StringEqualsConditionInput + """Trigger the webhook if either the to or the from address matches.""" + toOrFrom: StringEqualsConditionInput + """Trigger the webhook if the input contains or doesn't contain the specified string.""" + input: StringContainsConditionInput + """Do not trigger the webhook if the raw transaction is handled by the TokenPairEvent webhook.""" + ignoreTokenPairEvents: Boolean +} + +"""Input for string contains condition.""" +input StringContainsConditionInput { + """A list of substrings to be included within the string.""" + contains: [String!] + """A list of substrings not to be included within the string.""" + notContains: [String!] +} + +"""Input for integer list condition.""" +input OneOfNumberConditionInput { + """The list of integers.""" + oneOf: [Int!]! +} + +"""Input for comparison operators.""" +input ComparisonOperatorInput { + """Greater than.""" + gt: String + """Greater than or equal.""" + gte: String + """Less than.""" + lt: String + """Less than or equal.""" + lte: String + """Equal to.""" + eq: String +} + +"""Input for string equals condition.""" +input StringEqualsConditionInput { + """The string to equal.""" + eq: String! +} + +"""Input for integer equals condition.""" +input IntEqualsConditionInput { + """The integer to equal.""" + eq: Int! +} + +"""The recurrence of the webhook. Can be `INDEFINITE` or `ONCE`.""" +enum AlertRecurrence { + INDEFINITE + ONCE +} + +"""The type of publishing for the webhook. If not set, it defaults to `SINGLE`.""" +enum PublishingType { + BATCH + SINGLE +} + +"""Result returned by `createWebhooks`.""" +type CreateWebhooksOutput { + """The list of price webhooks that were created.""" + priceWebhooks: [Webhook]! + """The list of token pair event webhooks that were created.""" + tokenPairEventWebhooks: [Webhook]! + """The list of raw transaction webhooks that were created.""" + rawTransactionWebhooks: [Webhook]! + """The list of market cap event webhooks that were created.""" + marketCapWebhooks: [Webhook]! + """The list of token price event webhooks that were created.""" + tokenPriceEventWebhooks: [Webhook]! + """The list of token transfer event webhooks that were created.""" + tokenTransferEventWebhooks: [Webhook]! + """The list of prediction trade webhooks that were created.""" + predictionTradeWebhooks: [Webhook]! + """The list of prediction market metrics event webhooks that were created.""" + predictionMarketMetricsEventWebhooks: [Webhook]! +} + +"""Metadata for a webhook.""" +type Webhook { + """The ID of the webhook.""" + id: String! + """The type of webhook. Can be `PRICE_EVENT`, `TOKEN_PAIR_EVENT`, or `RAW_TRANSACTION`.""" + webhookType: WebhookType! + """The given name of the webhook.""" + name: String! + """The unix timestamp for the time the webhook was created.""" + created: Int! + """The recurrence of the webhook. Can be `INDEFINITE` or `ONCE`.""" + alertRecurrence: AlertRecurrence! + """The url to which the webhook message should be sent.""" + callbackUrl: String! + """The status of the webhook. Can be `ACTIVE` or `INACTIVE`.""" + status: String! + """The webhook group ID used to group webhooks together for ordered message sending.""" + groupId: String @deprecated(reason: "GroupId is deprecated and will be removed in the future. Messages will be grouped by webhookId") + """The conditions which must be met in order for the webhook to send a message.""" + conditions: WebhookCondition! + """The settings for retrying failed webhook messages.""" + retrySettings: RetrySettings + """An optional bucket ID (max 64 characters). Can be used to query for subgroups of webhooks (useful if you have a large number of webhooks).""" + bucketId: String + """An optional bucket sort key (max 64 characters). Can be used to query for subgroups of webhooks (useful if you have a large number of webhooks).""" + bucketSortkey: String + """The type of publishing for the webhook. If not set, it defaults to `SINGLE`.""" + publishingType: PublishingType +} + +"""Response returned by `getWebhooks`.""" +type GetWebhooksResponse { + """A list of webhooks belonging to a user.""" + items: [Webhook] + """A cursor for use in pagination.""" + cursor: String +} + +"""Config for retrying failed webhook messages.""" +type RetrySettings { + """The maximum time in seconds that the webhook will retry sending a message""" + maxTimeElapsed: Int + """The minimum time in seconds that the webhook will wait before retrying a failed message""" + minRetryDelay: Int + """The maximum time in seconds that the webhook will wait before retrying a failed message""" + maxRetryDelay: Int + """The maximum number of times the webhook will retry sending a message""" + maxRetries: Int +} + +"""Webhook conditions that must be met for each webhook type.""" +union WebhookCondition = PriceEventWebhookCondition | MarketCapEventWebhookCondition | TokenPairEventWebhookCondition | RawTransactionWebhookCondition | TokenPriceEventWebhookCondition | TokenTransferEventWebhookCondition | PredictionTradeWebhookCondition | PredictionMarketMetricsEventWebhookCondition + +"""Webhook conditions for a price event.""" +type PriceEventWebhookCondition { + """The token contract address the webhook is listening for.""" + tokenAddress: StringEqualsCondition! + """The network ID the webhook is listening on.""" + networkId: IntEqualsCondition! + """The price condition that must be met in order for the webhook to send.""" + priceUsd: ComparisonOperator! + """The pair contract address the webhook is listening for.""" + pairAddress: StringEqualsCondition + """The liquidity condition (for the source pair) that must be met in order for the webhook to send.""" + liquidityUsd: ComparisonOperator + """The volume condition (for the source pair) that must be met in order for the webhook to send.""" + volumeUsd: ComparisonOperator +} + +"""Webhook conditions for a market cap event.""" +type MarketCapEventWebhookCondition { + """The token contract address the webhook is listening for.""" + tokenAddress: StringEqualsCondition! + """The network ID the webhook is listening on.""" + networkId: IntEqualsCondition! + """The market cap condition that must be met in order for the webhook to send.""" + fdvMarketCapUsd: ComparisonOperator + """The circulating market cap condition that must be met in order for the webhook to send.""" + circulatingMarketCapUsd: ComparisonOperator + """The pair contract address the webhook is listening for.""" + pairAddress: StringEqualsCondition + """The liquidity condition (for the source pair) that must be met in order for the webhook to send.""" + liquidityUsd: ComparisonOperator + """The volume condition (for the source pair) that must be met in order for the webhook to send.""" + volumeUsd: ComparisonOperator +} + +"""Webhook conditions for a token price event.""" +type TokenPriceEventWebhookCondition { + """The token contract address the webhook is listening for.""" + address: StringEqualsCondition! + """The network ID the webhook is listening on.""" + networkId: IntEqualsCondition! + """The price condition that must be met in order for the webhook to send.""" + priceUsd: ComparisonOperator! +} + +"""Webhook conditions for a token transfer event.""" +type TokenTransferEventWebhookCondition { + """The token contract address the webhook is listening for.""" + tokenAddress: StringEqualsCondition + """The list of network IDs the webhook is listening on.""" + networkId: OneOfNumberCondition + """The wallet address the webhook is listening for transfers from or to.""" + address: StringEqualsCondition + """The directions of the transfer the webhook is listening for.""" + direction: OneOfTokenTransferDirectionCondition +} + +"""Token transfer direction list condition.""" +type OneOfTokenTransferDirectionCondition { + """The list of transfer directions.""" + oneOf: [TokenTransferDirection!]! +} + +"""Webhook conditions for a prediction trade event.""" +type PredictionTradeWebhookCondition { + """The trader ID the webhook is listening for.""" + traderId: StringEqualsCondition + """The market ID the webhook is listening for.""" + marketId: StringEqualsCondition + """The event ID the webhook is listening for.""" + eventId: StringEqualsCondition + """The trade event types the webhook is listening for.""" + eventType: PredictionTradeEventTypeCondition + """The trade value in USD condition.""" + tradeValueUsd: ComparisonOperator + """The amount of tokens/shares traded condition.""" + amountToken: ComparisonOperator +} + +"""Per-window outcome stat conditions for a prediction market metrics event webhook.""" +type WindowedPredictionMarketMetricsEventOutcomeCondition { + """The price condition.""" + price: ComparisonOperator + """The price change condition.""" + priceChange: ComparisonOperator + """The volume in USD condition.""" + volumeUsd: ComparisonOperator + """The volume change condition.""" + volumeChange: ComparisonOperator + """The number of trades condition.""" + trades: ComparisonOperator + """The trades change condition.""" + tradesChange: ComparisonOperator +} + +"""Per-window market-level stat conditions for a prediction market metrics event webhook.""" +type WindowedPredictionMarketMetricsEventMarketCondition { + """The volume in USD condition.""" + volumeUsd: ComparisonOperator + """The number of trades condition.""" + trades: ComparisonOperator + """The volume change condition.""" + volumeChange: ComparisonOperator + """The trades change condition.""" + tradesChange: ComparisonOperator +} + +"""Market-level conditions across all windows for a prediction market metrics event webhook.""" +type PredictionMarketMetricsEventMarketCondition { + """Conditions for the 5-minute window.""" + min5: WindowedPredictionMarketMetricsEventMarketCondition + """Conditions for the 1-hour window.""" + hour1: WindowedPredictionMarketMetricsEventMarketCondition + """Conditions for the 4-hour window.""" + hour4: WindowedPredictionMarketMetricsEventMarketCondition + """Conditions for the 12-hour window.""" + hour12: WindowedPredictionMarketMetricsEventMarketCondition + """Conditions for the 1-day window.""" + day1: WindowedPredictionMarketMetricsEventMarketCondition + """Conditions for the 1-week window.""" + week1: WindowedPredictionMarketMetricsEventMarketCondition +} + +"""Webhook conditions for a prediction market metrics event.""" +type PredictionMarketMetricsEventWebhookCondition { + """The market ID the webhook is listening for.""" + marketId: StringEqualsCondition! + """Conditions evaluated against market-level aggregate stats. ANDed with other clauses when also present.""" + market: PredictionMarketMetricsEventMarketCondition + """Conditions evaluated against outcome 0's stats. ANDed with outcome1 and anyOutcome when also present.""" + outcome0: PredictionMarketMetricsEventOutcomeCondition + """Conditions evaluated against outcome 1's stats. ANDed with outcome0 and anyOutcome when also present.""" + outcome1: PredictionMarketMetricsEventOutcomeCondition + """Conditions evaluated against both outcomes; matches if at least one outcome satisfies. ANDed with outcome0 and outcome1 when also present.""" + anyOutcome: PredictionMarketMetricsEventOutcomeCondition +} + +"""Per-outcome conditions for a prediction market metrics event webhook.""" +type PredictionMarketMetricsEventOutcomeCondition { + """Conditions for the 5-minute window.""" + min5: WindowedPredictionMarketMetricsEventOutcomeCondition + """Conditions for the 1-hour window.""" + hour1: WindowedPredictionMarketMetricsEventOutcomeCondition + """Conditions for the 4-hour window.""" + hour4: WindowedPredictionMarketMetricsEventOutcomeCondition + """Conditions for the 12-hour window.""" + hour12: WindowedPredictionMarketMetricsEventOutcomeCondition + """Conditions for the 1-day window.""" + day1: WindowedPredictionMarketMetricsEventOutcomeCondition + """Conditions for the 1-week window.""" + week1: WindowedPredictionMarketMetricsEventOutcomeCondition +} + +"""Prediction trade event type condition.""" +type PredictionTradeEventTypeCondition { + """The list of prediction trade event types.""" + oneOf: [PredictionTradeEventType!]! +} + +"""Webhook conditions for a token pair event.""" +type TokenPairEventWebhookCondition { + """The token contract address the webhook is listening for.""" + tokenAddress: StringEqualsCondition + """The list of network IDs the webhook is listening on.""" + networkId: OneOfNumberCondition + """The swap values the webhook is listening for.""" + swapValue: ComparisonOperator + """The maker wallet address the webhook is listening for.""" + maker: StringEqualsCondition + """The pair contract address the webhook is listening for.""" + pairAddress: StringEqualsCondition + """The exchange contract address the webhook is listening for.""" + exchangeAddress: StringEqualsCondition + """The event type the webhook is listening for.""" + eventType: TokenPairEventTypeCondition +} + +"""Webhook condition for token pair event type.""" +type TokenPairEventTypeCondition { + """The list of token pair event types.""" + oneOf: [TokenPairEventType!]! +} + +"""Webhook conditions for a raw transaction.""" +type RawTransactionWebhookCondition { + """A list of network IDs to listen on.""" + networkId: OneOfNumberCondition + """The to address to listen for.""" + to: StringEqualsCondition + """The from address to listen for.""" + from: StringEqualsCondition + """Trigger the webhook if either the to or the from address matches.""" + toOrFrom: StringEqualsCondition + """Trigger the webhook if the contains or doesn't contain the specified string.""" + input: StringContainsCondition + """Do not trigger the webhook if the raw transaction is handled by the TokenPairEvent webhook.""" + ignoreTokenPairEvents: Boolean +} + +"""String contains condition.""" +type StringContainsCondition { + """A list of substrings included within the string.""" + contains: [String!] + """A list of substrings not included within the string.""" + notContains: [String!] +} + +"""Integer list condition.""" +type OneOfNumberCondition { + """The list of integers.""" + oneOf: [Int!]! +} + +"""Comparison operators.""" +type ComparisonOperator { + """Greater than.""" + gt: String + """Greater than or equal to.""" + gte: String + """Less than.""" + lt: String + """Less than or equal to.""" + lte: String + """Equal to.""" + eq: String +} + +"""String equals condition.""" +type StringEqualsCondition { + """The string to equal.""" + eq: String! +} + +"""Integer equals condition.""" +type IntEqualsCondition { + """The integer to equal.""" + eq: Int! +} + +"""A network supported on Defined.""" +type Network { + """The name of the network. For example, `arbitrum`.""" + name: String! + """The network ID. For example, `42161` for `arbitrum`.""" + id: Int! + networkShortName: String +} + +"""The status for a network supported on Defined.""" +type MetadataResponse { + """The last processed block on the network.""" + lastProcessedBlock: Int + """The unix timestamp for the last processed block on the network.""" + lastProcessedTimestamp: Int + """The network ID.""" + networkId: Int! + """The name of the network.""" + networkName: String! +} + +input BlocksInput { + networkId: Int! + blockNumbers: [Int!] + timestamps: [Int!] +} + +type Block { + blockNumber: Int! + timestamp: Int! + hash: String! +} + +"""A wallet matching a filter.""" +type WalletFilterResult { + """The wallet address""" + address: String! + """The network ID of the wallet (only present if filtered by network)""" + networkId: Int + """The unix timestamp for the first transaction from this wallet""" + firstTransactionAt: Int + """The unix timestamp for the last transaction from this wallet""" + lastTransactionAt: Int! + """The labels associated with the wallet""" + labels: [String!]! + """Manual or proposal-derived identity vocabulary (e.g. WHALE, KOL). Distinct from behavioral `labels`.""" + identityLabels: [String!] + """Volume in USD in the past day""" + volumeUsd1d: String! + """Total volume in USD in the past day including all tokens""" + volumeUsdAll1d: String! + """Realized profit in USD in the past day""" + realizedProfitUsd1d: String! + """Average profit in USD per trade in the past day""" + averageProfitUsdPerTrade1d: String! + """Average swap amount in USD in the past day""" + averageSwapAmountUsd1d: String! + """Realized profit percentage in the past day""" + realizedProfitPercentage1d: Float! + """Average hold period, in seconds, for positions sold during the past day. Estimated with average-cost accounting: sells realize the age of the sold cost basis, so unsold holdings do not affect the result. A lower bound, capped at the window length. Returns null when under $1 of cost basis was sold.""" + avgHoldPeriodSec1d: Float + """Number of swaps in the past day""" + swaps1d: Int! + """Total number of swaps in the past day including all tokens""" + swapsAll1d: Int! + """Number of unique tokens traded in the past day""" + uniqueTokens1d: Int! + """Win rate in the past day""" + winRate1d: Float! + """Volume in USD in the past week""" + volumeUsd1w: String! + """Total volume in USD in the past week including all tokens""" + volumeUsdAll1w: String! + """Realized profit in USD in the past week""" + realizedProfitUsd1w: String! + """Average profit in USD per trade in the past week""" + averageProfitUsdPerTrade1w: String! + """Average swap amount in USD in the past week""" + averageSwapAmountUsd1w: String! + """Realized profit percentage in the past week""" + realizedProfitPercentage1w: Float! + """Average hold period, in seconds, for positions sold during the past week. Estimated with average-cost accounting: sells realize the age of the sold cost basis, so unsold holdings do not affect the result. A lower bound, capped at the window length. Returns null when under $1 of cost basis was sold.""" + avgHoldPeriodSec1w: Float + """Number of swaps in the past week""" + swaps1w: Int! + """Total number of swaps in the past week including all tokens""" + swapsAll1w: Int! + """Number of unique tokens traded in the past week""" + uniqueTokens1w: Int! + """Win rate in the past week""" + winRate1w: Float! + """Volume in USD in the past 30 days""" + volumeUsd30d: String! + """Total volume in USD in the past 30 days including all tokens""" + volumeUsdAll30d: String! + """Realized profit in USD in the past 30 days""" + realizedProfitUsd30d: String! + """Average profit in USD per trade in the past 30 days""" + averageProfitUsdPerTrade30d: String! + """Average swap amount in USD in the past 30 days""" + averageSwapAmountUsd30d: String! + """Realized profit percentage in the past 30 days""" + realizedProfitPercentage30d: Float! + """Average hold period, in seconds, for positions sold during the past 30 days. Estimated with average-cost accounting: sells realize the age of the sold cost basis, so unsold holdings do not affect the result. A lower bound, capped at the window length. Returns null when under $1 of cost basis was sold.""" + avgHoldPeriodSec30d: Float + """Number of swaps in the past 30 days""" + swaps30d: Int! + """Total number of swaps in the past 30 days including all tokens""" + swapsAll30d: Int! + """Number of unique tokens traded in the past 30 days""" + uniqueTokens30d: Int! + """Win rate in the past 30 days""" + winRate30d: Float! + """Volume in USD in the past year""" + volumeUsd1y: String! + """Total volume in USD in the past year including all tokens""" + volumeUsdAll1y: String! + """Realized profit in USD in the past year""" + realizedProfitUsd1y: String! + """Average profit in USD per trade in the past year""" + averageProfitUsdPerTrade1y: String! + """Average swap amount in USD in the past year""" + averageSwapAmountUsd1y: String! + """Realized profit percentage in the past year""" + realizedProfitPercentage1y: Float! + """Average hold period, in seconds, for positions sold during the past year. Estimated with average-cost accounting: sells realize the age of the sold cost basis, so unsold holdings do not affect the result. A lower bound, capped at the window length. Returns null when under $1 of cost basis was sold.""" + avgHoldPeriodSec1y: Float + """Number of swaps in the past year""" + swaps1y: Int! + """Total number of swaps in the past year including all tokens""" + swapsAll1y: Int! + """Number of unique tokens traded in the past year""" + uniqueTokens1y: Int! @deprecated(reason: "uniqueTokens1y is no longer available as a distinct 1-year value; it now reflects the 30-day value (uniqueTokens30d).") + """Win rate in the past year""" + winRate1y: Float! + """The scammer score for the wallet.""" + scammerScore: Int + """The bot score for the wallet.""" + botScore: Int + """Total number of tokens created by this wallet across all networks.""" + tokensCreatedCount: Int + """Total number of launchpad tokens migrated (graduated) by this wallet across all networks.""" + tokensMigratedCount: Int + """Wallet behavior classification. Null is equivalent to NORMIE.""" + category: WalletCategory + """The native token balance of the wallet (only present if filtered by network)""" + nativeTokenBalance: String + """The backfill state of the wallet.""" + backfillState: WalletAggregateBackfillState + """The wallet identity and profile data""" + wallet: Wallet +} + +enum SparklineAttribute { + PRICE +} + +enum SymbolType { + TOKEN + POOL +} + +enum QuoteCurrency { + USD + TOKEN +} + +"""The attribute to sort balances by.""" +enum BalancesSortAttribute { + """Sort by raw token balance amount (default).""" + BALANCE + """Sort by USD value (descending).""" + USD_VALUE +} + +"""Controls whether uiBalance returns the stored RPC UI balance or removes Token-2022 UI amount multipliers.""" +enum UiAmountMode { + """Return raw token amounts by removing Token-2022 UI amount multipliers where available.""" + RAW + """Return the stored RPC UI balance. This is the default.""" + SCALED +} + +enum HoldersSortAttribute { + BALANCE + DATE @deprecated(reason: "No longer supported. Use BALANCE instead.") +} + +"""The event label type.""" +enum EventLabelType { + FrontRun + Sandwiched +} + +"""The duration used to request detailed pair stats.""" +enum DetailedPairStatsDuration { + day30 + week1 + day1 + hour12 + hour4 + hour1 + min15 + min5 +} + +"""The duration used to request detailed token stats.""" +enum DetailedTokenStatsDuration { + day30 + week1 + day1 + hour12 + hour4 + hour1 + min15 + min5 +} + +"""The window size used to request detailed stats.""" +enum DetailedStatsWindowSize { + day1 + hour12 + hour4 + hour1 + min5 +} + +"""The token of interest within a pair. Can be `token0` or `token1`.""" +enum TokenOfInterest { + token0 + token1 +} + +"""The event type for a token transaction.""" +enum EventType { + Burn + Mint + Swap + Sync + Collect + CollectProtocol + PoolBalanceChanged + LiquidityLock +} + +"""The commitment level of a streamed event - only Solana and Base support values other than Confirmed. Processed returns Base Flashblocks. Preprocessed is Solana-only.""" +enum EventCommitmentLevel { + Preprocessed + Processed + Confirmed +} + +"""The commitment level of a streamed bar update - only Solana and Base support values other than Confirmed. Processed returns Base Flashblocks. Preprocessed is Solana-only.""" +enum BarCommitmentLevel { + Preprocessed + Processed + Confirmed +} + +"""A more specific breakdown of `EventType`. Splits `Swap` into `Buy` and `Sell`.""" +enum EventDisplayType { + Burn + Mint + Buy + Sell + Sync + Collect + CollectProtocol +} + +"""The attribute used to rank tokens.""" +enum PairRankingAttribute { + createdAt + lastTransaction + buyCount1 + buyCount4 + buyCount12 + buyCount24 + highPrice1 + highPrice4 + highPrice12 + highPrice24 + liquidity + lockedLiquidityPercentage + lowPrice1 + lowPrice4 + lowPrice12 + lowPrice24 + marketCap + price + priceChange1 + priceChange4 + priceChange12 + priceChange24 + volumeChange1 + volumeChange4 + volumeChange12 + volumeChange24 + sellCount1 + sellCount4 + sellCount12 + sellCount24 + trendingScore + trendingScore5m + trendingScore1 + trendingScore4 + trendingScore12 + trendingScore24 + txnCount1 + txnCount4 + txnCount12 + txnCount24 + uniqueBuys1 + uniqueBuys4 + uniqueBuys12 + uniqueBuys24 + uniqueSells1 + uniqueSells4 + uniqueSells12 + uniqueSells24 + uniqueTransactions1 + uniqueTransactions4 + uniqueTransactions12 + uniqueTransactions24 + volumeUSD1 + volumeUSD4 + volumeUSD12 + volumeUSD24 + buyVolumeUSD1 + buyVolumeUSD4 + buyVolumeUSD12 + buyVolumeUSD24 + sellVolumeUSD1 + sellVolumeUSD4 + sellVolumeUSD12 + sellVolumeUSD24 + walletAgeAvg + walletAgeStd + swapPct1dOldWallet + swapPct7dOldWallet +} + +"""The attribute used to rank networks.""" +enum NetworkRankingAttribute { + liquidity + volume5m + volume1 + volume4 + volume12 + volume24 + volumeChange5m + volumeChange1 + volumeChange4 + volumeChange12 + volumeChange24 + transactions5m + transactions1 + transactions4 + transactions12 + transactions24 +} + +"""The attribute used to rank exchanges.""" +enum ExchangeRankingAttribute { + txnCount1 + txnCount4 + txnCount12 + txnCount24 + volumeUSD1 + volumeUSD4 + volumeUSD12 + volumeUSD24 + volumeNBT1 + volumeNBT4 + volumeNBT12 + volumeNBT24 + dailyActiveUsers + monthlyActiveUsers +} + +"""The type of statistics returned. Can be `FILTERED` or `UNFILTERED`.""" +enum TokenPairStatisticsType { + FILTERED + UNFILTERED +} + +"""The reason a token has been flagged as a potential scam.""" +enum PotentialScamReason { + """The token does not meet the minimum liquidity threshold.""" + MinimumLiquidity + """The token has experienced a significant drop in liquidity.""" + LiquidityRugPull + """The token has suspicious wallet activity.""" + SuspiciousWalletActivity + """The token has an abnormal buyer ratio.""" + AbnormalBuyerRatio +} + +input OnPricesUpdatedInput { + """The token contract address.""" + address: String! + """The network ID the token is deployed on.""" + networkId: Int! + """The pair contract address from which to get pricing. Defaults to the top pair for the token.""" + sourcePairAddress: String +} + +input OnTokenEventsCreatedInput { + """The token address to filter by. Required unless you are on an enterprise plan including EventFeed features.""" + tokenAddress: String + """The network ID to filter by.""" + networkId: Int! +} + +"""Input type of `StringFilter`.""" +input StringFilter { + """Greater than or equal to.""" + gte: String + """Greater than.""" + gt: String + """Less than or equal to.""" + lte: String + """Less than.""" + lt: String +} + +"""Input type of `tokenLifecycleEvents` query.""" +input TokenLifecycleEventsQueryInput { + """The token contract address to filter events by. In conjunction with `networkId`, this will filter events for a specific token on a specific network.""" + address: String! + """The networkId to filter events by.""" + networkId: Int! +} + +"""Input type of `EventsQuery`.""" +input EventsQueryInput { + """The pair contract address to filter by. If you pass a token address in here, it will instead find the top pair for that token and use that.""" + address: String! + """The token of interest. Can be `token0` or `token1`.""" + quoteToken: QuoteToken + """The amount of `quoteToken` involved in the swap.""" + amountNonLiquidityToken: NumberFilter + """The list of event display types to filter by.""" + eventDisplayType: [EventDisplayType] + """The specific event type to filter by.""" + eventType: EventType + """The specific wallet address to filter by.""" + maker: String + """The network ID to filter by.""" + networkId: Int! + """The time range to filter by.""" + timestamp: EventQueryTimestampInput + """The price per `quoteToken` at the time of the swap in the network's base token.""" + priceBaseToken: NumberFilter + """The total amount of `quoteToken` involved in the swap in the network's base token (`amountNonLiquidityToken` x `priceBaseToken`).""" + priceBaseTokenTotal: NumberFilter + """The price per `quoteToken` at the time of the swap in USD.""" + priceUsd: NumberFilter + """The total amount of `quoteToken` involved in the swap in USD (`amountNonLiquidityToken` x `priceUsd`).""" + priceUsdTotal: NumberFilter + """Specify the type of symbol you want to fetch values for (TOKEN | POOL)""" + symbolType: SymbolType +} + +input MakerEventsQueryInput { + """The specific wallet address to filter by.""" + maker: String! + """The time range to filter by.""" + timestamp: EventQueryTimestampInput + """The network ID to filter by.""" + networkId: Int + """The total amount of `quoteToken` involved in the swap in USD (`amountNonLiquidityToken` x `priceUsd`).""" + priceUsdTotal: NumberFilter + """The specific event type to filter by.""" + eventType: EventType + """The token involved in the event.""" + tokenAddress: String +} + +"""Input type of `PairRanking`.""" +input PairRanking { + """The attribute to rank pairs by.""" + attribute: PairRankingAttribute + """The direction to apply to the ranking attribute.""" + direction: RankingDirection +} + +"""Input type of `NetworkRanking`.""" +input NetworkRanking { + """The attribute to rank networks by.""" + attribute: NetworkRankingAttribute + """The direction to apply to the ranking attribute.""" + direction: RankingDirection +} + +"""Event-specific data for a token transaction.""" +union EventData = BurnEventData | MintEventData | SwapEventData | PoolBalanceChangedEventData + +type BalancesResponse { + """The list of token balances that a wallet has.""" + items: [Balance!]! + """A cursor for use in pagination.""" + cursor: String +} + +input BalancesInput { + """The wallet address to filter by.""" + walletAddress: String + """The network IDs to filter by.""" + networks: [Int!] + """The token IDs (`address:networkId`) or addresses to request the balance for. Requires a list of `networks` if only passing addresses. Include native network balances using `native` as the token address. Only applied when using `walletAddress` (not `walletId`). Max 200 tokens.""" + tokens: [String!] + """Whether to include native network balances in the response (ID will be native:<networkId>). Requires a list of `networks`. Does not apply when using `tokens`.""" + includeNative: Boolean + """The maximum number of holdings to return. Does not apply when using `tokens`.""" + limit: Int + """A cursor for use in pagination.""" + cursor: String + """Whether to remove scam tokens from the response.""" + removeScams: Boolean + """The ID of the wallet (`walletAddress:networkId`).""" + walletId: String @deprecated(reason: "Use walletAddress and networkId instead") + """Optional token specifically request the balance for. Only works with `walletId`.""" + filterToken: String @deprecated(reason: "Use tokens list instead") + """The attribute to sort the list on. Defaults to BALANCE (raw token amount).""" + sortBy: BalancesSortAttribute + """The direction to sort the list. Defaults to DESC (highest value first).""" + sortDirection: RankingDirection + """Controls how uiBalance is expressed. SCALED returns the stored RPC UI amount. RAW removes the active Token-2022 UI amount multiplier when available. Defaults to SCALED.""" + uiAmountMode: UiAmountMode +} + +"""Wallet balance of a token.""" +type Balance { + """The ID of the wallet (`walletAddress:networkId`).""" + walletId: String! + """The ID of the token (`tokenAddress:networkId`).""" + tokenId: String! + """The wallet address.""" + address: String! + """The wallet network.""" + networkId: Int! + """The contract address of the token.""" + tokenAddress: String! + """The balance held by the wallet.""" + balance: String! + """The balance held by the wallet, adjusted by the number of decimals in the token.""" + shiftedBalance: Float! + """The wallet balance expressed for UI display. Defaults to shiftedBalance. When uiAmountMode is RAW, Token-2022 balances are divided by the active UI amount multiplier when available.""" + uiBalance: Float + """The balance held by the wallet in USD.""" + balanceUsd: String + """The token price in USD.""" + tokenPriceUsd: String + """The time that this address first held a token.""" + firstHeldTimestamp: Int + """Metadata for the token.""" + token: EnhancedToken + """The liquidity of the token in USD.""" + liquidityUsd: String + """Unix timestamp (seconds) of the token's most recent trade/market event across all pools we track. Token-level (not specific to this wallet). Useful for filtering out dead/worthless tokens, e.g. no activity in months.""" + tokenLastTradedTimestamp: Int + """Identity and profile metadata for the wallet holding this balance. Not always available.""" + wallet: Wallet +} + +"""Response returned by `holders`.""" +type HoldersResponse { + """The list of wallets holding the token.""" + items: [Balance!]! + """The unique count of holders for the token.""" + count: Int! + """A cursor for use in pagination.""" + cursor: String + """Status of holder. Disabled if on unsupported network or there is insufficient holder data.""" + status: HoldersStatus! + """What percentage of the total supply do the top 10 holders hold.""" + top10HoldersPercent: Float +} + +input HoldersInputSort { + """The attribute to sort the list on""" + attribute: HoldersSortAttribute + """The direction to apply to the ranking attribute.""" + direction: RankingDirection +} + +input HoldersInput { + """The ID of the token (`tokenAddress:networkId`).""" + tokenId: String! + """The maximum number of holders to return. Default is 50, maximum is 200.""" + limit: Int + """A cursor for use in pagination.""" + cursor: String + """The attribute to sort the list on""" + sort: HoldersInputSort + """When true, filters out known LP pairs and burn addresses. Defaults to false.""" + filterContracts: Boolean +} + +"""Third party token data sourced from off chain.""" +type ExplorerTokenData { + """The ID of the token (`address:networkId`).""" + id: String! + """Whether the token has been verified on CoinGecko.""" + blueCheckmark: Boolean + """A description of the token.""" + description: String + """The precision to which the token can be divided.""" + divisor: String + """The token price in USD.""" + tokenPriceUSD: String + """The token type.""" + tokenType: String +} + +type LaunchpadData { + """The name of the launchpad.""" + name: String @deprecated(reason: "Use launchpadName instead") + """The name of the launchpad.""" + launchpadName: String + """The percentage of the pool that was sold to the public.""" + graduationPercent: Float + """The address of the pool.""" + poolAddress: String + """The unix timestamp when the launchpad was completed.""" + completedAt: Int + """Indicates if the launchpad is completed.""" + completed: Boolean + """The slot number when the launchpad was completed.""" + completedSlot: Int + """The slot number when the launchpad was migrated.""" + migratedSlot: Int + """The unix timestamp when the launchpad was migrated.""" + migratedAt: Int + """Indicates if the launchpad was migrated.""" + migrated: Boolean + """The pool address after the launchpad was migrated.""" + migratedPoolAddress: String + """The launchpad protocol.""" + launchpadProtocol: String + """The icon URL of the launchpad.""" + launchpadIconUrl: String + """Whether cashback is enabled for this launchpad token (Pump V1/V2 only).""" + isCashbackEnabled: Boolean + """The token category assigned by the launchpad. Populated by launchpads that publish a category taxonomy (e.g. Scale/Creator, Eitherway). Values include platform, meme, utility, etc.""" + category: String +} + +"""Wallet pattern data showing suspicious or notable wallet activity for a token.""" +type TokenWalletActivity { + """The number of bundler wallets that hold this token.""" + bundlerCount: Int! + """The percentage of token supply held by bundler wallets.""" + bundlerHeldPercentage: Float! + """The percentage of token supply held by developer/creator wallet.""" + devHeldPercentage: Float! + """The number of insider wallets that hold this token.""" + insiderCount: Int! + """The percentage of token supply held by insider wallets.""" + insiderHeldPercentage: Float! + """The number of sniper wallets that hold this token.""" + sniperCount: Int! + """The percentage of token supply held by sniper wallets.""" + sniperHeldPercentage: Float! + """The number of suspicious wallets — the deduplicated union of snipers, bundlers, and insiders — that hold this token.""" + suspiciousCount: Int! + """The percentage of token supply held by suspicious wallets (deduplicated union of snipers, bundlers, and insiders).""" + suspiciousHeldPercentage: Float! +} + +"""Metadata for a token.""" +type TokenInfo { + """Uniquely identifies the token.""" + id: String! + """The contract address of the token.""" + address: String! + """The circulating supply of the token.""" + circulatingSupply: String + """The token ID on CoinMarketCap.""" + cmcId: Int + """The Grid asset ID, if this token is linked to a Grid asset.""" + gridAssetId: String + """The Grid bluechip rating for this token (e.g. `A+`, `B-`).""" + bluechipRating: String + """Whether the token has been flagged as a scam.""" + isScam: Boolean + """The token name. For example, `ApeCoin`.""" + name: String + """The network ID the token is deployed on.""" + networkId: Int! + """The token symbol. For example, `APE`.""" + symbol: String! + """The total supply of the token.""" + totalSupply: String + """The thumbhash of the token logo.""" + imageThumbHash: String + """The thumbnail token logo URL.""" + imageThumbUrl: String + """The small token logo URL.""" + imageSmallUrl: String + """The large token logo URL.""" + imageLargeUrl: String + """The token banner URL.""" + imageBannerUrl: String + """The original URL/URI for the video associated with the token.""" + videoExternalUrl: String + """A description of the token.""" + description: String +} + +"""A URL associated with a Grid organization.""" +type OrganizationUrl { + """The URL.""" + url: String! + """The type of URL (e.g. `website`, `docs`).""" + type: String +} + +"""A social link associated with a Grid organization.""" +type OrganizationSocial { + """The social URL.""" + url: String! + """The type of social link (e.g. `twitter`, `discord`).""" + type: String +} + +"""A Grid organization — the entity behind one or more on-chain assets.""" +type Organization { + """The organization name.""" + name: String! + """The founding date of the organization.""" + foundingDate: String + """A short description of the organization.""" + descriptionShort: String + """A detailed description of the organization.""" + descriptionLong: String + """The organization's tagline.""" + tagLine: String + """The type of organization (e.g. `protocol`, `company`).""" + type: String + """The sector the organization operates in.""" + sector: String + """URLs associated with the organization.""" + urls: [OrganizationUrl!]! + """Social links for the organization.""" + socials: [OrganizationSocial!]! + """The organization's logo URL.""" + logo: String + """The organization's icon URL.""" + icon: String + header: String + """The Grid root ID for the organization.""" + rootId: String! + """Assets managed by this organization.""" + assets: [Asset!]! +} + +"""A Grid asset — a canonical representation of an on-chain token or instrument.""" +type Asset { + """The Grid asset ID.""" + id: String! + """The asset name.""" + name: String + """A description of the asset.""" + description: String + """The asset ticker symbol.""" + ticker: String + """The asset type (e.g. `token`, `stablecoin`).""" + type: String + """The asset status.""" + status: String + """The asset icon URL.""" + icon: String + """The Grid root ID for the parent organization.""" + rootId: String! + """Deployments of this asset across chains.""" + assetDeployments: [AssetDeployment!]! +} + +"""A deployment of a Grid asset on a specific chain.""" +type AssetDeployment { + """The deployment ID.""" + id: String! + """The network ID the asset is deployed on.""" + networkId: Int! + """The contract address of the deployment.""" + address: String! + """The token standard (e.g. `ERC20`, `SPL`).""" + standard: String + """The Grid asset ID.""" + assetId: String! + """The Grid root ID for the parent organization.""" + rootId: String! + """The enhanced token this deployment represents.""" + token: EnhancedToken +} + +"""String metrics for detailed stats.""" +type DetailedStatsStringMetrics { + """The percent change between the `currentValue` and `previousValue`. Decimal format.""" + change: Float! + """The total value for the most recent window.""" + currentValue: String! + """The total value for the previous window.""" + previousValue: String! + """The list of aggregated values for each bucket.""" + buckets: [String]! +} + +"""Number metrics for detailed stats.""" +type DetailedStatsNumberMetrics { + """The percent change between the `currentValue` and `previousValue`. Decimal format.""" + change: Float! + """The total value for the most recent window.""" + currentValue: Int! + """The total value for the previous window.""" + previousValue: Int! + """The list of aggregated values for each bucket.""" + buckets: [Int]! +} + +"""The start/end timestamp for a given bucket within the window.""" +type DetailedStatsBucketTimestamp { + """The unix timestamp for the start of the bucket.""" + start: Int! + """The unix timestamp for the start of the bucket.""" + end: Int! +} + +"""Detailed stats over a window.""" +type WindowedDetailedStats { + """The window size used to request detailed stats.""" + windowSize: DetailedStatsWindowSize! + """The unix timestamp for the start of the window.""" + timestamp: Int! + """The unix timestamp for the end of the window.""" + endTimestamp: Int! + """The list of start/end timestamps broken down for each bucket within the window.""" + buckets: [DetailedStatsBucketTimestamp]! + """The transaction count over the window.""" + transactions: DetailedStatsNumberMetrics! + """The volume over the window.""" + volume: DetailedStatsStringMetrics! + """The number of buys over the window.""" + buys: DetailedStatsNumberMetrics! + """The number of sells over the window.""" + sells: DetailedStatsNumberMetrics! + """The number of unique buyers over the window.""" + buyers: DetailedStatsNumberMetrics! + """The number of unique sellers over the window.""" + sellers: DetailedStatsNumberMetrics! + """The number of unique traders over the window.""" + traders: DetailedStatsNumberMetrics + """The buy volume over the window.""" + buyVolume: DetailedStatsStringMetrics + """The sell volume over the window.""" + sellVolume: DetailedStatsStringMetrics +} + +"""Detailed stats for a token within a pair.""" +type DetailedStats { + """The ID of the pair (`pairAddress:networkId`).""" + pairId: String! + """The token of interest used to calculate token-specific stats.""" + tokenOfInterest: TokenOfInterest! + """The type of statistics returned. Can be `FILTERED` or `UNFILTERED`.""" + statsType: TokenPairStatisticsType! + """The breakdown of stats over a 5 minute window.""" + stats_min5: WindowedDetailedStats + """The breakdown of stats over an hour window.""" + stats_hour1: WindowedDetailedStats + """The breakdown of stats over a 4 hour window.""" + stats_hour4: WindowedDetailedStats + """The breakdown of stats over a 12 hour window.""" + stats_hour12: WindowedDetailedStats + """The breakdown of stats over a 24 hour window.""" + stats_day1: WindowedDetailedStats +} + +"""Detailed stats for a token within a pair.""" +type DetailedPairStats { + """The contract address of the pair.""" + pairAddress: String! + """The network ID the pair is deployed on.""" + networkId: Int! + """The token of interest used to calculate token-specific stats.""" + tokenOfInterest: TokenOfInterest + """The unix timestamp for the last transaction to happen on the pair.""" + lastTransaction: Int + """The type of statistics returned. Can be `FILTERED` or `UNFILTERED`.""" + statsType: TokenPairStatisticsType! + """The breakdown of stats over a 5 minute window.""" + stats_min5: WindowedDetailedPairStats + """The breakdown of stats over a 15 minute window.""" + stats_min15: WindowedDetailedPairStats + """The breakdown of stats over an hour window.""" + stats_hour1: WindowedDetailedPairStats + """The breakdown of stats over a 4 hour window.""" + stats_hour4: WindowedDetailedPairStats + """The breakdown of stats over a 12 hour window.""" + stats_hour12: WindowedDetailedPairStats + """The breakdown of stats over a 24 hour window.""" + stats_day1: WindowedDetailedPairStats + """The breakdown of stats over a 7 day window.""" + stats_week1: WindowedDetailedPairStats + """The breakdown of stats over a 30 day window.""" + stats_day30: WindowedDetailedPairStats + """Number of aggregated buckets specified in input""" + bucketCount: Int + """The timestamp specified as input to the query""" + queryTimestamp: Int + pair: Pair +} + +"""Detailed stats for a token.""" +type DetailedTokenStats { + """The ID of the token (`tokenAddress:networkId`).""" + tokenId: String! + """The contract address of the token.""" + tokenAddress: String! + """The network ID the token is deployed on.""" + networkId: Int! + """The unix timestamp for the last event to happen on the token.""" + lastTransactionAt: Int + """The type of statistics returned. Can be `FILTERED` or `UNFILTERED`.""" + statsType: TokenPairStatisticsType! + """The breakdown of stats over a 5 minute window.""" + stats_min5: WindowedDetailedTokenStats + """The breakdown of stats over an hour window.""" + stats_hour1: WindowedDetailedTokenStats + """The breakdown of stats over a 4 hour window.""" + stats_hour4: WindowedDetailedTokenStats + """The breakdown of stats over a 12 hour window.""" + stats_hour12: WindowedDetailedTokenStats + """The breakdown of stats over a 24 hour window.""" + stats_day1: WindowedDetailedTokenStats + """Number of aggregated buckets specified in input""" + bucketCount: Int + """The timestamp specified as input to the query""" + queryTimestamp: Int +} + +"""String metrics for detailed pair stats.""" +type DetailedPairStatsStringMetrics { + """The percent change between the `currentValue` and `previousValue`. Decimal format.""" + change: Float + """The total value for the most recent duration.""" + currentValue: String + """The total value for the previous duration.""" + previousValue: String + """The list of aggregated values for each bucket.""" + buckets: [String]! +} + +"""Number metrics for detailed pair stats.""" +type DetailedPairStatsNumberMetrics { + """The percent change between the `currentValue` and `previousValue`. Decimal format.""" + change: Float + """The total value for the most recent duration.""" + currentValue: Int + """The total value for the previous duration.""" + previousValue: Int + """The list of aggregated values for each bucket.""" + buckets: [Int]! +} + +"""The start/end timestamp for a given bucket within the window.""" +type DetailedPairStatsBucketTimestamp { + """The unix timestamp for the start of the bucket.""" + start: Int! + """The unix timestamp for the start of the bucket.""" + end: Int! +} + +"""Numerical stats for a pair over a time frame.""" +type WindowedDetailedNonCurrencyPairStats { + """The transaction count over the time frame.""" + transactions: DetailedPairStatsNumberMetrics + """The number of buys over the time frame.""" + buys: DetailedPairStatsNumberMetrics + """The number of sells over the time frame.""" + sells: DetailedPairStatsNumberMetrics + """The number of unique traders over the time frame.""" + traders: DetailedPairStatsNumberMetrics + """The number of unique buyers over the time frame.""" + buyers: DetailedPairStatsNumberMetrics + """The number of unique sellers over the time frame.""" + sellers: DetailedPairStatsNumberMetrics +} + +"""Price stats for a pair over a time frame.""" +type WindowedDetailedCurrencyPairStats { + """The volume over the time frame.""" + volume: DetailedPairStatsStringMetrics + """The buy volume over the time frame.""" + buyVolume: DetailedPairStatsStringMetrics + """The sell volume over the time frame.""" + sellVolume: DetailedPairStatsStringMetrics + """The opening price for the time frame.""" + open: DetailedPairStatsStringMetrics + """The highest price in USD in the time frame.""" + highest: DetailedPairStatsStringMetrics + """The lowest price in USD in the time frame.""" + lowest: DetailedPairStatsStringMetrics + """The closing price forr the time frame.""" + close: DetailedPairStatsStringMetrics + """The liquidity for the time frame.""" + liquidity: DetailedPairStatsStringMetrics +} + +"""Detailed pair stats over a time frame.""" +type WindowedDetailedPairStats { + """The duration used to request detailed pair stats.""" + duration: DetailedPairStatsDuration! + """The unix timestamp for the start of the window.""" + start: Int! + """The unix timestamp for the end of the window.""" + end: Int! + """The list of start/end timestamps broken down for each bucket within the window.""" + timestamps: [DetailedPairStatsBucketTimestamp]! + """The currency stats in USD, such as volume.""" + statsUsd: WindowedDetailedCurrencyPairStats! + """The numerical stats, such as number of buyers.""" + statsNonCurrency: WindowedDetailedNonCurrencyPairStats! +} + +"""Detailed token stats over a time frame.""" +type WindowedDetailedTokenStats { + """The duration used to request detailed token stats.""" + duration: DetailedTokenStatsDuration! + """The unix timestamp for the start of the window.""" + start: Int! + """The unix timestamp for the end of the window.""" + end: Int! + """The list of start/end timestamps broken down for each bucket within the window.""" + timestamps: [DetailedPairStatsBucketTimestamp]! + """The currency stats in USD, such as volume.""" + statsUsd: WindowedDetailedCurrencyPairStats! + """The numerical stats, such as number of buyers.""" + statsNonCurrency: WindowedDetailedNonCurrencyPairStats! +} + +"""Response returned by `getSymbol`.""" +type SymbolResponse { + """The currencyCode argument passed in (`TOKEN` or `USD`).""" + currency_code: String! + """The trading pair. If currencyCode is TOKEN, the base token will be used, otherwise USD.""" + description: String! + """The symbols of the pair.""" + name: String! + """The base token symbol.""" + original_currency_code: String! + """10^n, where n is the number of decimal places the price has. Max 16. Used for charting.""" + pricescale: Float! + """The ID of the pair (`address:networkId`).""" + ticker: String! + """The list of time frames supported for the symbol in other charting endpoints, eg. getBars.""" + supported_resolutions: [String!]! +} + +"""Response returned by `getNetworkStats`.""" +type GetNetworkStatsResponse { + """The network trade volume in USD over the past 24 hours.""" + volume24: Float! + """The network trade volume in USD over the past 12 hours.""" + volume12: Float! + """The network trade volume in USD over the past 4 hours.""" + volume4: Float! + """The network trade volume in USD over the past hour.""" + volume1: Float! + """The network trade volume in USD over the past 5 minutes.""" + volume5m: Float! + """The network trade volume change over the last 24 hours""" + volumeChange24: Float! + """The network trade volume change over the last 12 hours""" + volumeChange12: Float! + """The network trade volume change over the last 4 hours""" + volumeChange4: Float! + """The network trade volume change over the last hour""" + volumeChange1: Float! + """The network trade volume change over the last 5 minutes""" + volumeChange5m: Float! + """The network liquidity in USD.""" + liquidity: Float! + """The unique number of transactions in the past 24 hours.""" + transactions24: Int! + """The unique number of transactions in the past 12 hours.""" + transactions12: Int! + """The unique number of transactions in the past 4 hours.""" + transactions4: Int! + """The unique number of transactions in the past hour.""" + transactions1: Int! + """The unique number of transactions in the past 5 minutes.""" + transactions5m: Int! +} + +"""Event data for a token burn event.""" +type BurnEventData { + """The amount of `token0` removed from the pair.""" + amount0: String + """The amount of `token1` removed from the pair.""" + amount1: String + """The amount of `token0` removed from the pair, adjusted by the number of decimals in the token. For example, if `amount0` is in WEI, `amount0Shifted` will be in ETH.""" + amount0Shifted: String + """The amount of `token1` removed from the pair, adjusted by the number of decimals in the token. For example, USDC `amount1Shifted` will be by 6 decimals.""" + amount1Shifted: String + """The lower tick boundary of the position. Only applicable for UniswapV3 events.""" + tickLower: String + """The upper tick boundary of the position. Only applicable for UniswapV3 events.""" + tickUpper: String + """The type of token event, `Burn`.""" + type: EventType! +} + +"""Event data for a token mint event.""" +type MintEventData { + """The amount of `token0` added to the pair.""" + amount0: String + """The amount of `token1` added to the pair.""" + amount1: String + """The amount of `token0` added to the pair, adjusted by the number of decimals in the token. For example, if `amount0` is in WEI, `amount0Shifted` will be in ETH.""" + amount0Shifted: String + """The amount of `token1` added to the pair, adjusted by the number of decimals in the token. For example, USDC `amount1Shifted` will be by 6 decimals.""" + amount1Shifted: String + """The lower tick boundary of the position. Only applicable for UniswapV3 events.""" + tickLower: String + """The upper tick boundary of the position. Only applicable for UniswapV3 events.""" + tickUpper: String + """The type of token event, `Mint`.""" + type: EventType! +} + +"""Event data for a token swap event.""" +type SwapEventData { + """The amount of `token0` involved in the swap. Only applicable for UniswapV3 events.""" + amount0: String + """The amount of `token0` that was sold. Only applicable for UniswapV2 events.""" + amount0In: String + """The amount of `token0` that was bought. Only applicable for UniswapV2 events.""" + amount0Out: String + """The amount of `token1` involved in the swap. Only applicable for UniswapV3 events.""" + amount1: String + """The amount of `token1` that was sold. Only applicable for UniswapV2 events.""" + amount1In: String + """The amount of `token1` that was bought. Only applicable for UniswapV2 events.""" + amount1Out: String + """The amount of `quoteToken` involved in the swap. For example, if `quoteToken` is USDC for a USDC/WETH pair, `amountNonLiquidityToken` would be the amount of USDC involved in the swap.""" + amountNonLiquidityToken: String + """The price per `quoteToken` at the time of the swap in the network's base token. For example, if `quoteToken` is USDC for a USDC/WETH pair on ETH network, `priceBaseToken` would the price of USDC in ETH.""" + priceBaseToken: String + """The total amount of `quoteToken` involved in the swap in the network's base token (`amountNonLiquidityToken` x `priceBaseToken`).""" + priceBaseTokenTotal: String + """The price per `quoteToken` at the time of the swap in USD. For example, if `quoteToken` is USDC for a USDC/WETH pair on ETH network, `priceBaseToken` would the price of USDC in USD ($1.00).""" + priceUsd: String + """The total amount of `quoteToken` involved in the swap in USD (`amountNonLiquidityToken` x `priceUsd`).""" + priceUsdTotal: String + """The tick index that the swap occurred in. Only applicable for UniswapV3 events.""" + tick: String + """The type of token event, `Swap`.""" + type: EventType! +} + +"""Event data for a token swap event.""" +type UnconfirmedSwapEventData { + """The amount of `quoteToken` involved in the swap. For example, if `quoteToken` is USDC for a USDC/WETH pair, `amountNonLiquidityToken` would be the amount of USDC involved in the swap.""" + amountNonLiquidityToken: String + """The price per `quoteToken` at the time of the swap in the network's base token. For example, if `quoteToken` is USDC for a USDC/WETH pair on ETH network, `priceBaseToken` would the price of USDC in ETH.""" + priceBaseToken: String + """The total amount of `quoteToken` involved in the swap in the network's base token (`amountNonLiquidityToken` x `priceBaseToken`).""" + priceBaseTokenTotal: String + """The price per `quoteToken` at the time of the swap in USD. For example, if `quoteToken` is USDC for a USDC/WETH pair on ETH network, `priceBaseToken` would the price of USDC in USD ($1.00).""" + priceUsd: String + """The total amount of `quoteToken` involved in the swap in USD (`amountNonLiquidityToken` x `priceUsd`).""" + priceUsdTotal: String + """The type of token event, `Swap`.""" + type: EventType! + """The amount of `baseToken` involved in the swap""" + amountBaseToken: String +} + +"""Event data for a token liquidity change event.""" +type UnconfirmedLiquidityChangeEventData { + """The amount of `token0` added or removed from the pair.""" + amount0: String + """The amount of `token1` added or removed from the pair.""" + amount1: String + """The amount of `token0` added or removed from the pair, adjusted by the number of decimals in the token. For example, if `amount0` is in WEI, `amount0Shifted` will be in ETH.""" + amount0Shifted: String + """The amount of `token1` added or removed from the pair, adjusted by the number of decimals in the token. For example, USDC `amount1Shifted` will be by 6 decimals.""" + amount1Shifted: String + """The type of token event, `Mint` or 'Burn'.""" + type: EventType! +} + +"""Event data for a BalancerV2 Pool Balance Changed event.""" +type PoolBalanceChangedEventData { + """The amount of `token0` added or removed from the pair.""" + amount0: String + """The amount of `token1` added or from the pair.""" + amount1: String + """The amount of `token0` added or removed from the pair, adjusted by the number of decimals in the token. For example, if `amount0` is in WEI, `amount0Shifted` will be in ETH.""" + amount0Shifted: String + """The amount of `token1` added or removed from the pair, adjusted by the number of decimals in the token. For example, USDC `amount1Shifted` will be by 6 decimals.""" + amount1Shifted: String + """The address of `token0` in the pair.""" + token0: String + """The address of `token1` in the pair.""" + token1: String + """The address of account that added or removed liquidity.""" + sender: String + """The amount of token0 captured by the protocol.""" + protocolFeeAmount0: String + """The amount of token1 captured by the protocol.""" + protocolFeeAmount1: String + """The amount of token0 now in the pool.""" + liquidity0: String + """The amount of token1 now in the pool.""" + liquidity1: String + """The type of token event, `Burn`.""" + type: EventType! +} + +"""Response returned by `filterExchanges`.""" +type ExchangeFilterConnection { + """The list of exchanges matching the filter parameters.""" + results: [ExchangeFilterResult] + """The number of exchanges returned.""" + count: Int + """Where in the list the server started when returning items.""" + offset: Int +} + +"""Response returned by `getTokenEvents`.""" +type EventConnection { + """A list of transactions for a token's top pair.""" + items: [Event] + """A cursor for use in pagination. If non-null, more results are available; pages may be empty due to filtering.""" + cursor: String +} + +"""Response returned by `getTokenEventsForMaker`.""" +type MakerEventConnection { + """A list of transactions for a token's top pair.""" + items: [Event] + """A cursor for use in pagination. If non-null, more results are available; pages may be empty due to filtering.""" + cursor: String +} + +"""Response returned by `tokenLifecycleEvents`.""" +type TokenLifecycleEventConnection { + """A list of transactions for a token's top pair.""" + items: [TokenLifecycleEvent]! + """A cursor for use in pagination. If non-null, more results are available; pages may be empty due to filtering.""" + cursor: String +} + +"""Response returned by `filterPairs`.""" +type PairFilterConnection { + """The list of pairs matching the filter parameters.""" + results: [PairFilterResult] + """The number of pairs returned.""" + count: Int + """Where in the list the server started when returning items.""" + offset: Int +} + +"""A network matching a set of filter parameters.""" +type NetworkFilterResult { + """The ID of the network.""" + networkId: Int! + """The name of the network.""" + networkName: String + """The short name of the network.""" + networkShortName: String + """The URL for the network's icon.""" + networkIconUrl: String + """Whether the network is a mainnet.""" + mainnet: Boolean + """The unix timestamp for when the network stats were last updated.""" + timestamp: Int + """The total network liquidity in USD.""" + liquidity: String + """The network trade volume in USD in the past 5 minutes.""" + volume5m: String + """The network trade volume in USD in the past hour.""" + volume1: String + """The network trade volume in USD in the past 4 hours.""" + volume4: String + """The network trade volume in USD in the past 12 hours.""" + volume12: String + """The network trade volume in USD in the past 24 hours.""" + volume24: String + """The percent volume change in the past 5 minutes. Decimal format.""" + volumeChange5m: Float + """The percent volume change in the past hour. Decimal format.""" + volumeChange1: Float + """The percent volume change in the past 4 hours. Decimal format.""" + volumeChange4: Float + """The percent volume change in the past 12 hours. Decimal format.""" + volumeChange12: Float + """The percent volume change in the past 24 hours. Decimal format.""" + volumeChange24: Float + """The number of transactions in the past 5 minutes.""" + transactions5m: Int + """The number of transactions in the past hour.""" + transactions1: Int + """The number of transactions in the past 4 hours.""" + transactions4: Int + """The number of transactions in the past 12 hours.""" + transactions12: Int + """The number of transactions in the past 24 hours.""" + transactions24: Int +} + +"""Response returned by `filterNetworks`.""" +type NetworkFilterConnection { + """The list of networks matching the filter parameters.""" + results: [NetworkFilterResult] + """The number of networks returned.""" + count: Int + """Where in the list the server started when returning items.""" + offset: Int +} + +"""Metadata for an exchange.""" +type FilterExchange { + """The address for the exchange factory contract.""" + address: String! + """The ID of the exchange (`address:networkId`).""" + id: String! + """The name of the exchange.""" + name: String + """The version of the exchange. For example, `3` for UniswapV3.""" + exchangeVersion: String + """The URL for the exchange's icon.""" + iconUrl: String + """The network ID the factory is deployed on.""" + networkId: Int! + """The URL for the exchange's trading platform.""" + tradeUrl: String +} + +"""An exchange matching a set of filter parameters.""" +type ExchangeFilterResult { + """Exchange metadata.""" + exchange: FilterExchange + """The number of transactions on the exchange in the past hour.""" + txnCount1: String + """The number of transactions on the exchange in the past 4 hours.""" + txnCount4: String + """The number of transactions on the exchange in the past 12 hours.""" + txnCount12: String + """The number of transactions on the exchange in the past 24 hours.""" + txnCount24: String + """The trade volume in USD in the past hour.""" + volumeUSD1: String + """The trade volume in USD in the past 4 hours.""" + volumeUSD4: String + """The trade volume in USD in the past 12 hours.""" + volumeUSD12: String + """The trade volume in USD in the past 24 hours.""" + volumeUSD24: String + """The trade volume in the network's base token in the past hour.""" + volumeNBT1: String + """The trade volume in the network's base token in the past 4 hours.""" + volumeNBT4: String + """The trade volume in the network's base token in the past 12 hours.""" + volumeNBT12: String + """The trade volume in the network's base token in the past 24 hours.""" + volumeNBT24: String + """The total unique daily active users.""" + dailyActiveUsers: Int + """The total unique monthly active users (30 days).""" + monthlyActiveUsers: Int +} + +"""A pair matching a set of filter parameters.""" +type PairFilterResult { + """The unix timestamp for the creation of the pair.""" + createdAt: Int + """The unix timestamp for the last transaction to happen on the pair.""" + lastTransaction: Int + """The number of buys in the past hour.""" + buyCount1: Int + """The number of buys in the past 4 hours.""" + buyCount4: Int + """The number of buys in the past 12 hours.""" + buyCount12: Int + """The number of buys in the past 24 hours.""" + buyCount24: Int + """Exchange metadata for the pair.""" + exchange: FilterExchange + """The highest price in USD in the past hour.""" + highPrice1: String + """The highest price in USD in the past 4 hours.""" + highPrice4: String + """The highest price in USD in the past 12 hours.""" + highPrice12: String + """The highest price in USD in the past 24 hours.""" + highPrice24: String + """Amount of liquidity in the pair.""" + liquidity: String + """The locked liquidity percentage.""" + lockedLiquidityPercentage: Float! + """The token with higher liquidity in the pair. Can be `token0` or `token1`.""" + liquidityToken: String + """The token of interest. Can be `token0` or `token1`.""" + quoteToken: String + """The lowest price in USD in the past hour.""" + lowPrice1: String + """The lowest price in USD in the past 4 hours.""" + lowPrice4: String + """The lowest price in USD in the past 12 hours.""" + lowPrice12: String + """The lowest price in USD in the past 24 hours.""" + lowPrice24: String + """The fully diluted market cap.""" + marketCap: String + """Metadata for the pair.""" + pair: Pair + """The token price in USD.""" + price: String + """10^n, where n is the number of decimal places the price has. Max 16. Used for TradingView settings.""" + priceScale: String + """The percent price change in the past hour. Decimal format.""" + priceChange1: String + """The percent price change in the past 4 hours. Decimal format.""" + priceChange4: String + """The percent price change in the past 12 hours. Decimal format.""" + priceChange12: String + """The percent price change in the past 24 hours. Decimal format.""" + priceChange24: String + """The percent volume change in the past hour. Decimal format.""" + volumeChange1: String + """The percent volume change in the past 4 hours. Decimal format.""" + volumeChange4: String + """The percent volume change in the past 12 hours. Decimal format.""" + volumeChange12: String + """The percent volume change in the past 24 hours. Decimal format.""" + volumeChange24: String + """The number of sells in the past hour.""" + sellCount1: Int + """The number of sells in the past 4 hours.""" + sellCount4: Int + """The number of sells in the past 12 hours.""" + sellCount12: Int + """The number of sells in the past 24 hours.""" + sellCount24: Int + """Metadata for the first token in the pair.""" + token0: EnhancedToken + """Metadata for the second token in the pair.""" + token1: EnhancedToken + """The number of transactions in the past hour.""" + txnCount1: Int + """The number of transactions in the past 4 hours.""" + txnCount4: Int + """The number of transactions in the past 12 hours.""" + txnCount12: Int + """The number of transactions in the past 24 hours.""" + txnCount24: Int + """The unique number of buys in the past hour.""" + uniqueBuys1: Int + """The unique number of buys in the past 4 hours.""" + uniqueBuys4: Int + """The unique number of buys in the past 12 hours.""" + uniqueBuys12: Int + """The unique number of buys in the past 24 hours.""" + uniqueBuys24: Int + """The unique number of sells in the past hour.""" + uniqueSells1: Int + """The unique number of sells in the past 4 hours.""" + uniqueSells4: Int + """The unique number of sells in the past 12 hours.""" + uniqueSells12: Int + """The unique number of sells in the past 24 hours.""" + uniqueSells24: Int + """The unique number of transactions in the past hour.""" + uniqueTransactions1: Int + """The unique number of transactions in the past 4 hours.""" + uniqueTransactions4: Int + """The unique number of transactions in the past 12 hours.""" + uniqueTransactions12: Int + """The unique number of transactions in the past 24 hours.""" + uniqueTransactions24: Int + """The trade volume in USD in the past hour.""" + volumeUSD1: String + """The trade volume in USD in the past 4 hours.""" + volumeUSD4: String + """The trade volume in USD in the past 12 hours.""" + volumeUSD12: String + """The trade volume in USD in the past 24 hours.""" + volumeUSD24: String + """The buy volume in USD in the past hour.""" + buyVolumeUSD1: String + """The buy volume in USD in the past 12 hours.""" + buyVolumeUSD12: String + """The buy volume in USD in the past 24 hours.""" + buyVolumeUSD24: String + """The buy volume in USD in the past 4 hours.""" + buyVolumeUSD4: String + """The sell volume in USD in the past hour.""" + sellVolumeUSD1: String + """The sell volume in USD in the past 12 hours.""" + sellVolumeUSD12: String + """The sell volume in USD in the past 24 hours.""" + sellVolumeUSD24: String + """The sell volume in USD in the past 4 hours.""" + sellVolumeUSD4: String + """The average age of the wallets that traded in the last 24h""" + walletAgeAvg: String + """The standard deviation of age of the wallets that traded in the last 24h""" + walletAgeStd: String + """The percentage of wallets that are less than 1d old that have traded in the last 24h""" + swapPct1dOldWallet: String + """The percentage of wallets that are less than 7d old that have traded in the last 24h""" + swapPct7dOldWallet: String + """The reasons the token has been flagged as a potential scam.""" + potentialScamReasons: [PotentialScamReason] +} + +union UnconfirmedEventData = UnconfirmedSwapEventData | UnconfirmedLiquidityChangeEventData + +"""An unconfirmed token transaction.""" +type UnconfirmedEvent { + """The contract address of the token's top pair.""" + address: String! + """The hash of the block where the transaction occurred.""" + blockHash: String! + """The block number for the transaction.""" + blockNumber: Int! + """The type of transaction event. Can be `Burn`, `Mint`, `Swap`, `Sync`, `Collect`, or `CollectProtocol`.""" + eventType: EventType! + """The ID of the event (`address:networkId`). For example, `0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2:1`.""" + id: String! + """The index of the log in the block.""" + logIndex: Int! + """The wallet address that performed the transaction.""" + maker: String + """The network ID that the token is deployed on.""" + networkId: Int! + """The token of interest within the token's top pair. Can be `token0` or `token1`.""" + quoteToken: QuoteToken + """The unix timestamp for when the transaction occurred.""" + timestamp: Int! + """The unique hash for the transaction.""" + transactionHash: String! + """The index of the transaction within the block.""" + transactionIndex: Int! + """A optional unique identifier of where the event is within the transaction.""" + supplementalIndex: Int + """A more specific breakdown of `eventType`. Splits `Swap` into `Buy` or `Sell`.""" + eventDisplayType: EventDisplayType + """The event-specific data for the transaction.""" + data: UnconfirmedEventData +} + +"""Bar chart data to track price changes over time.""" +type BarsResponse { + """The opening price.""" + o: [Float]! + """The high price.""" + h: [Float]! + """The low price.""" + l: [Float]! + """The closing price.""" + c: [Float]! + """The volume.""" + v: [Int]! @deprecated(reason: "Use volume field instead") + """The timestamp for the bar.""" + t: [Int!]! + """The status code for the batch: `ok` for successful data retrieval and `no_data` for empty responses signaling the end of server data.""" + s: String! + """The volume with higher precision.""" + volume: [String] + """The volume in the native token for the network""" + volumeNativeToken: [String] + """The number of unique buyers""" + buyers: [Int]! + """The number of buys""" + buys: [Int]! + """The buy volume in USD""" + buyVolume: [String]! + """The number of unique sellers""" + sellers: [Int]! + """The number of sells""" + sells: [Int]! + """The sell volume in USD""" + sellVolume: [String]! + """Liquidity in USD""" + liquidity: [String]! + """The number of traders""" + traders: [Int]! + """The number of transactions""" + transactions: [Int]! + """The aggregate pool/DEX fees in USD""" + poolFees: [String] + """The aggregate base fees (gas) in USD""" + baseFees: [String] + """The aggregate priority fees in USD""" + priorityFees: [String] + """The aggregate builder tips (MEV) in USD""" + builderTips: [String] + """The aggregate L1 data posting fees in USD (L2 rollups only)""" + l1DataFees: [String] + """The total fees in USD (sum of poolFees + baseFees + priorityFees + builderTips + l1DataFees)""" + totalFees: [String] + """Ratio of total fees to volume (totalFees / volume). Null when volume is zero.""" + feeToVolumeRatio: [String] + """Ratio of builder tips (MEV) to total fees (builderTips / totalFees). Null when totalFees is zero.""" + mevToTotalFeesRatio: [String] + """Gas cost per dollar of volume ((baseFees + priorityFees + l1DataFees) / volume). Null when volume is zero.""" + gasPerVolume: [String] + """Average total fee cost per transaction in USD (totalFees / transactions). Null when there are no transactions.""" + averageCostPerTrade: [String] + """MEV risk level for this bar: low (<3% builder tips), medium (3-30%), or high (>30%). Null for pre-genesis bars.""" + mevRiskLevel: [String] + """Dominant fee component: gas-dominated (gas >50% of fees), mev-dominated (tips >20%), or pool-fee-dominated. Null when no fees.""" + feeRegimeClassification: [String] + """Rate of sandwich attacks per transaction (sandwichedEventCount / transactions). Null when no transaction data.""" + sandwichRate: [String] + """The pair that is being returned""" + pair: Pair! +} + +"""Bar chart data to track price changes over time.""" +type TokenBarsResponse { + """The opening price.""" + o: [Float]! + """The high price.""" + h: [Float]! + """The low price.""" + l: [Float]! + """The closing price.""" + c: [Float]! + """The timestamp for the bar.""" + t: [Int!]! + """The status code for the batch: `ok` for successful data retrieval and `no_data` for empty responses signaling the end of server data.""" + s: String! + """The volume with higher precision.""" + volume: [String] + """The volume in the native token for the network""" + volumeNativeToken: [String] + """The number of unique buyers""" + buyers: [Int]! + """The number of buys""" + buys: [Int]! + """The buy volume in USD""" + buyVolume: [String]! + """The number of unique sellers""" + sellers: [Int]! + """The number of sells""" + sells: [Int]! + """The sell volume in USD""" + sellVolume: [String]! + """Liquidity in USD""" + liquidity: [String]! + """The number of traders""" + traders: [Int]! + """The number of transactions""" + transactions: [Int]! + """The aggregate pool/DEX fees in USD""" + poolFees: [String] + """The aggregate base fees (gas) in USD""" + baseFees: [String] + """The aggregate priority fees in USD""" + priorityFees: [String] + """The aggregate builder tips (MEV) in USD""" + builderTips: [String] + """The aggregate L1 data posting fees in USD (L2 rollups only)""" + l1DataFees: [String] + """The total fees in USD (sum of poolFees + baseFees + priorityFees + builderTips + l1DataFees)""" + totalFees: [String] + """Ratio of total fees to volume (totalFees / volume). Null when volume is zero.""" + feeToVolumeRatio: [String] + """Ratio of builder tips (MEV) to total fees (builderTips / totalFees). Null when totalFees is zero.""" + mevToTotalFeesRatio: [String] + """Gas cost per dollar of volume ((baseFees + priorityFees + l1DataFees) / volume). Null when volume is zero.""" + gasPerVolume: [String] + """Average total fee cost per transaction in USD (totalFees / transactions). Null when there are no transactions.""" + averageCostPerTrade: [String] + """MEV risk level for this bar: low (<3% builder tips), medium (3-30%), or high (>30%). Null for pre-genesis bars.""" + mevRiskLevel: [String] + """Dominant fee component: gas-dominated (gas >50% of fees), mev-dominated (tips >20%), or pool-fee-dominated. Null when no fees.""" + feeRegimeClassification: [String] + """Rate of sandwich attacks per transaction (sandwichedEventCount / transactions). Null when no transaction data.""" + sandwichRate: [String] + """The token that is being returned""" + token: EnhancedToken! +} + +"""Boolean expression for combining token filters.""" +input TokenBoolFilter { + """All nested filters must match.""" + and: [TokenFilters!] + """At least one nested filter must match.""" + or: [TokenFilters!] + """The nested filter must not match.""" + not: TokenFilters +} + +input TokenCategoryFilter { + """Match tokens in any of these categories (OR).""" + anyOf: [String!] + """Match tokens in all of these categories (AND).""" + allOf: [String!] + """Exclude tokens in any of these categories.""" + noneOf: [String!] + """Match tokens that have at least one category (true) or none (false).""" + hasCategory: Boolean +} + +"""Input type of `TokenFilters`.""" +input TokenFilters { + """Recursive boolean expression for combining token filters.""" + boolFilter: TokenBoolFilter + categories: TokenCategoryFilter + """The unix timestamp for the creation of the token's first pair.""" + createdAt: NumberFilter + """The unix timestamp for the creation of the token.""" + tokenCreatedAt: NumberFilter + """The unix timestamp for the token's last transaction.""" + lastTransaction: NumberFilter + age: NumberFilter @deprecated(reason: "Age isn't supported - use createdAt instead") + """The number of buys in the past 5 minutes.""" + buyCount5m: NumberFilter + """The number of buys in the past hour.""" + buyCount1: NumberFilter + """The number of buys in the past 12 hours.""" + buyCount12: NumberFilter + """The number of buys in the past 24 hours.""" + buyCount24: NumberFilter + """The number of buys in the past 4 hours.""" + buyCount4: NumberFilter + """The percent price change in the past 5 minutes. Decimal format.""" + change5m: NumberFilter + """The percent price change in the past hour. Decimal format.""" + change1: NumberFilter + """The percent price change in the past 12 hours. Decimal format.""" + change12: NumberFilter + """The percent price change in the past 24 hours. Decimal format.""" + change24: NumberFilter + """The percent price change in the past 4 hours. Decimal format.""" + change4: NumberFilter + """The percent volume change in the past 5 minutes. Decimal format.""" + volumeChange5m: NumberFilter + """The percent volume change in the past hour. Decimal format.""" + volumeChange1: NumberFilter + """The percent volume change in the past 4 hours. Decimal format.""" + volumeChange4: NumberFilter + """The percent volume change in the past 12 hours. Decimal format.""" + volumeChange12: NumberFilter + """The percent volume change in the past 24 hours. Decimal format.""" + volumeChange24: NumberFilter + """The list of exchange contract IDs to filter by. Applied in conjunction with `network` filter using an OR condition. When used together, the query returns results that match either the specified exchanges or the specified network.""" + exchangeId: [String] + """The list of exchange contract addresses to filter by.""" + exchangeAddress: [String] + fdv: NumberFilter @deprecated(reason: "FDV isn't supported - use marketCap instead") + """The highest price in USD in the past 5 minutes.""" + high5m: NumberFilter + """The highest price in USD in the past hour.""" + high1: NumberFilter + """The highest price in USD in the past 12 hours.""" + high12: NumberFilter + """The highest price in USD in the past 24 hours.""" + high24: NumberFilter + """The highest price in USD in the past 4 hours.""" + high4: NumberFilter + """The amount of liquidity in the token's top pair.""" + liquidity: NumberFilter + """The lowest price in USD in the past hour.""" + low1: NumberFilter + """The lowest price in USD in the past 5 minutes.""" + low5m: NumberFilter + """The lowest price in USD in the past 12 hours.""" + low12: NumberFilter + """The lowest price in USD in the past 24 hours.""" + low24: NumberFilter + """The lowest price in USD in the past 4 hours.""" + low4: NumberFilter + """The fully diluted market cap.""" + marketCap: NumberFilter + """The circulating market cap.""" + circulatingMarketCap: NumberFilter + """The list of network IDs to filter by. Applied in conjunction with `exchangeId` filter using an OR condition. When used together, the query returns results that match either the specified exchanges or the specified network.""" + network: [Int] + """The number of different wallets holding the token.""" + holders: NumberFilter + """The token price in USD.""" + priceUSD: NumberFilter + """The number of sells in the past hour.""" + sellCount1: NumberFilter + """The number of sells in the past 5 minutes.""" + sellCount5m: NumberFilter + """The number of sells in the past 12 hours.""" + sellCount12: NumberFilter + """The number of sells in the past 24 hours.""" + sellCount24: NumberFilter + """The number of sells in the past 4 hours.""" + sellCount4: NumberFilter + """The number of transactions in the past 5 minutes.""" + txnCount5m: NumberFilter + """The number of transactions in the past hour.""" + txnCount1: NumberFilter + """The number of transactions in the past 12 hours.""" + txnCount12: NumberFilter + """The number of transactions in the past 24 hours.""" + txnCount24: NumberFilter + """The number of transactions in the past 4 hours.""" + txnCount4: NumberFilter + """The unique number of buys in the past hour.""" + uniqueBuys1: NumberFilter + """The unique number of buys in the past 5 minutes.""" + uniqueBuys5m: NumberFilter + """The unique number of buys in the past 12 hours.""" + uniqueBuys12: NumberFilter + """The unique number of buys in the past 24 hours.""" + uniqueBuys24: NumberFilter + """The unique number of buys in the past 4 hours.""" + uniqueBuys4: NumberFilter + """The unique number of sells in the past 5 minutes.""" + uniqueSells5m: NumberFilter + """The unique number of sells in the past hour.""" + uniqueSells1: NumberFilter + """The unique number of sells in the past 12 hours.""" + uniqueSells12: NumberFilter + """The unique number of sells in the past 24 hours.""" + uniqueSells24: NumberFilter + """The unique number of sells in the past 4 hours.""" + uniqueSells4: NumberFilter + """The unique number of transactions in the past hour.""" + uniqueTransactions1: NumberFilter + """The unique number of transactions in the past 5 minutes.""" + uniqueTransactions5m: NumberFilter + """The unique number of transactions in the past 12 hours.""" + uniqueTransactions12: NumberFilter + """The unique number of transactions in the past 24 hours.""" + uniqueTransactions24: NumberFilter + """The unique number of transactions in the past 4 hours.""" + uniqueTransactions4: NumberFilter + """The trade volume in USD in the past hour.""" + volume1: NumberFilter + """The trade volume in USD in the past 12 hours.""" + volume12: NumberFilter + """The trade volume in USD in the past 24 hours.""" + volume24: NumberFilter + """The trade volume in USD in the past 4 hours.""" + volume4: NumberFilter + """The trade volume in USD in the past 5 minutes.""" + volume5m: NumberFilter + """The buy volume in USD in the past hour.""" + buyVolume1: NumberFilter + """The buy volume in USD in the past 12 hours.""" + buyVolume12: NumberFilter + """The buy volume in USD in the past 24 hours.""" + buyVolume24: NumberFilter + """The buy volume in USD in the past 4 hours.""" + buyVolume4: NumberFilter + """The buy volume in USD in the past 5 minutes.""" + buyVolume5m: NumberFilter + """The sell volume in USD in the past hour.""" + sellVolume1: NumberFilter + """The sell volume in USD in the past 12 hours.""" + sellVolume12: NumberFilter + """The sell volume in USD in the past 24 hours.""" + sellVolume24: NumberFilter + """The sell volume in USD in the past 4 hours.""" + sellVolume4: NumberFilter + """The sell volume in USD in the past 5 minutes.""" + sellVolume5m: NumberFilter + """Whether to include tokens that have been flagged as scams. Default: false""" + includeScams: Boolean + """Whether to filter for tokens on testnet networks. Use `true` for testnet tokens only, `false` for mainnet tokens only and `undefined` (default) for both.""" + isTestnet: Boolean + """Only include verified tokens""" + isVerified: Boolean + """Filter potential Scams""" + potentialScam: Boolean + """Whether to ignore pairs/tokens not relevant to trending. This is done checking against a few factors and ignoring uninteresting tokens like stables / network tokens. If you want all tokens regardless of these checks, then don't include this field. (default) If you want only tokens that fail the trending ignore checks, then set it to `true`. (i.e. stablecoins, rugs, network base tokens) If you want only tokens that pass the trending ignore checks, then set it to `false`.""" + trendingIgnored: Boolean + """The address of the creator of the token.""" + creatorAddress: String @deprecated(reason: "Use creatorAddresses string array instead") + """The addresses of the token creators (supports multiple addresses). Max 25 addresses. You cannot provide both creatorAddress and creatorAddresses.""" + creatorAddresses: [String!] + """A list of launchpad protocols.""" + launchpadProtocol: [String!] + """A list of launchpad names. Any of the following: Pump.fun, Pump Mayhem, Bonk, BONAD.fun, Nad.Fun, Baseapp, Baseapp Creator, Zora, Zora Creator, Four.meme, Four.meme Fair, Believe, Moonshot, Jupiter Studio, boop, Heaven, TokenMill V2, Virtuals, Clanker, Clanker V4, ArenaTrade, Moonit, LaunchLab, MeteoraDBC, Meteora Alpha Vault, Zora Solana, Cooking.City, time.fun, BAGS, Circus, Dealr, OhFuckFun, PrintFun, Trend, shout.fun, xApple, Sendshot, DubDub, cults, OpenGameProtocol, AMERICA.fun, Kumbaya, Printr, Bankr, Liquid, Noice, Flaunch, Coinbarrel, Blowfish, MeMoo, Metaplex, Scale, Eitherway, Livo, Flap, EasyA Kickstart.""" + launchpadName: [String!] + """Indicates if the launchpad is completed.""" + launchpadCompleted: Boolean + """Indicates if the launchpad has migrated.""" + launchpadMigrated: Boolean + """The graduation percentage.""" + launchpadGraduationPercent: NumberFilter + """The timestamp when the launchpad was completed.""" + launchpadCompletedAt: NumberFilter + """The timestamp when the launchpad was migrated.""" + launchpadMigratedAt: NumberFilter + """The token is freezable.""" + freezable: Boolean + """The token is mintable.""" + mintable: Boolean + """Whether the token name or symbol contains profanity.""" + profanity: Boolean + """The average age of the wallets that traded in the last 24h.""" + walletAgeAvg: NumberFilter + """The standard deviation of age of the wallets that traded in the last 24h.""" + walletAgeStd: NumberFilter + """The percentage of wallets that are less than 1d old that have traded in the last 24h.""" + swapPct1dOldWallet: NumberFilter + """The percentage of wallets that are less than 7d old that have traded in the last 24h.""" + swapPct7dOldWallet: NumberFilter + """Filter by total fees in the past 5 minutes.""" + totalFees5m: NumberFilter + """Filter by total fees in the past hour.""" + totalFees1: NumberFilter + """Filter by total fees in the past 4 hours.""" + totalFees4: NumberFilter + """Filter by total fees in the past 12 hours.""" + totalFees12: NumberFilter + """Filter by total fees in the past 24 hours.""" + totalFees24: NumberFilter + """Filter by pool fees in the past 24 hours.""" + poolFees24: NumberFilter + """Filter by fee to volume ratio in the past 24 hours.""" + feeToVolumeRatio24: NumberFilter + """Filter by number of wallets that have sniped the token""" + sniperCount: NumberFilter + """Filter by percentage of tokens held by snipers""" + sniperHeldPercentage: NumberFilter + """Filter by number of wallets that have bundled the token""" + bundlerCount: NumberFilter + """Filter by percentage of tokens held by bundlers""" + bundlerHeldPercentage: NumberFilter + """Filter by number of wallets that have been an insider of the token""" + insiderCount: NumberFilter + """Filter by percentage of tokens held by insiders""" + insiderHeldPercentage: NumberFilter + """Filter by number of suspicious wallets (deduplicated union of snipers, bundlers, and insiders)""" + suspiciousCount: NumberFilter + """Filter by percentage of tokens held by suspicious wallets""" + suspiciousHeldPercentage: NumberFilter + """Filter by percentage of tokens held by the dev""" + devHeldPercentage: NumberFilter + """Filter by top 10 holders percentage.""" + top10HoldersPercent: NumberFilter + """Filter by number of posts in the token's coin community.""" + coinCommunityPostCount: NumberFilter + """Filter by number of members in the token's coin community.""" + coinCommunityMemberCount: NumberFilter + """Filter by number of likes in the token's coin community.""" + coinCommunityLikeCount: NumberFilter + """Filter by unix timestamp for the most recent post in the token's coin community.""" + coinCommunityLastPostAt: NumberFilter + """Filter by whether the token has linked Grid asset data.""" + hasGridData: Boolean + """Filter by Grid bluechip ratings. Returns tokens matching any of the provided ratings.""" + bluechipRatings: [String!] + """Filter by all-time high price.""" + athPrice: NumberFilter + """Filter by all-time low price.""" + atlPrice: NumberFilter + """Filter by all-time high FDV.""" + athFdv: NumberFilter + """Filter by all-time low FDV.""" + atlFdv: NumberFilter + """Filter by all-time high circulating market cap.""" + athCircMc: NumberFilter + """Filter by all-time low circulating market cap.""" + atlCircMc: NumberFilter +} + +"""Input type of `ExchangeRanking`.""" +input ExchangeRanking { + """The attribute to rank exchanges by.""" + attribute: ExchangeRankingAttribute + """The direction to apply to the ranking attribute.""" + direction: RankingDirection +} + +"""Response returned by `filterTokens`.""" +type TokenFilterConnection { + """The list of tokens matching the filter parameters.""" + results: [TokenFilterResult] + """The number of tokens returned.""" + count: Int + """Where in the list the server started when returning items.""" + page: Int +} + +enum CategoryType { + """Objective, long-lived groupings (DeFi, L1, stablecoins).""" + CANONICAL + """Trend-driven groupings (AI, RWA, memes).""" + NARRATIVE +} + +enum CategoryStatus { + DRAFT + ACTIVE + ARCHIVED +} + +type Category { + """The category id — a stable slug (also the value stored on tokens).""" + id: String! + """The display name. For example, `Artificial Intelligence`.""" + name: String! + """An optional short name/abbreviation for compact surfaces (pills, badges). For example, `AI`. Null when unset — the API does not fall back to `name`; clients decide whether to.""" + shortName: String + """The URL slug (same value as `id`).""" + slug: String! + """A short description of the category.""" + description: String + """Whether the category is canonical or narrative.""" + type: CategoryType! + """The lifecycle status of the category.""" + status: CategoryStatus! + """The category icon URL.""" + iconUrl: String @deprecated(reason: "Categories no longer carry imagery. Will be null.") + """The category banner image URL.""" + bannerUrl: String @deprecated(reason: "Categories no longer carry imagery. Will be null.") + """The parent category id, for hierarchical categories.""" + parentId: String + """The number of tokens currently assigned to the category.""" + memberCount: Int +} + +type CategoryTokenConnection { + """The list of tokens in the category matching the filter parameters.""" + results: [TokenFilterResult] + """The number of tokens returned.""" + count: Int + """Where in the list the server started when returning items.""" + page: Int +} + +"""Response returned by `onFilterTokensUpdated`.""" +type FilterTokenUpdates { + """The IDs of tokens that no longer match the subscription parameters, sent when the subscription's result set is refreshed.""" + removedTokenIds: [String] + """The list of updated token results matching the subscription parameters. When the subscription's result set is refreshed, also includes full results for tokens that newly match.""" + updates: [TokenFilterResult] +} + +"""A token with metadata.""" +type TokenWithMetadata { + """The contract address of the token.""" + address: String! + """The precision to which the token can be divided. For example, the smallest unit for USDC is 0.000001 (6 decimals).""" + decimals: Int + """The exchanges the token is listed on.""" + exchanges: [Exchange!]! + """The ID of the token (`address:networkId`). For example, `0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2:1`.""" + id: String! + """The total liquidity of the token's top pair in USD.""" + liquidity: String! + """The name of the token.""" + name: String! + """The network ID the token is deployed on.""" + networkId: Int! + """The token price in USD.""" + price: Float! + """The percent price change for the time frame requested. Decimal format.""" + priceChange: Float! + """Whether the token has been flagged as a scam.""" + isScam: Boolean + """The percent price change in the past hour. Decimal format.""" + priceChange1: Float + """The percent price change in the past 12 hours. Decimal format.""" + priceChange12: Float + """The percent price change in the past 24 hours. Decimal format.""" + priceChange24: Float + """The percent price change in the past 4 hours. Decimal format.""" + priceChange4: Float + """The token of interest. Can be `token0` or `token1`.""" + quoteToken: QuoteToken + """The fully diluted market cap.""" + marketCap: String + """The number of transactions in the past hour.""" + txnCount1: Int + """The number of transactions in the past 12 hours.""" + txnCount12: Int + """The number of transactions in the past 24 hours.""" + txnCount24: Int + """The number of transactions in the past 4 hours.""" + txnCount4: Int + """The unique number of buys in the past hour.""" + uniqueBuys1: Int + """The unique number of buys in the past 12 hours.""" + uniqueBuys12: Int + """The unique number of buys in the past 24 hours.""" + uniqueBuys24: Int + """The unique number of buys in the past 4 hours.""" + uniqueBuys4: Int + """The unique number of sells in the past hour.""" + uniqueSells1: Int + """The unique number of sells in the past 12 hours.""" + uniqueSells12: Int + """The unique number of sells in the past 24 hours.""" + uniqueSells24: Int + """The unique number of sells in the past 4 hours.""" + uniqueSells4: Int + """The time frame for the results.""" + resolution: String! + """The symbol for the token.""" + symbol: String! + """The ID of the token's top pair (`pairAddress:networkId`).""" + topPairId: String! + """The volume over the time frame requested in USD.""" + volume: String! + """The token logo URL.""" + imageThumbUrl: String + """The token logo URL.""" + imageSmallUrl: String + """The token logo URL.""" + imageLargeUrl: String + """The token banner URL.""" + imageBannerUrl: String + """The unix timestamp for the creation of the token's first pair.""" + createdAt: Int + """The unix timestamp for the token's last transaction.""" + lastTransaction: Int +} + +"""Custom metadata sourced from a token standard's on-chain metadata mechanism — currently the ERC-7572 `contractURI()` fields used by Base B20 tokens.""" +type Erc7572CustomInfo { + """Token-standard discriminant for this custom data (currently always `erc7572`).""" + type: String! + """Featured/showcase image URL from the contract metadata.""" + featuredImage: String + """Collaborator wallet addresses listed in the contract metadata.""" + collaborators: [String!] +} + +type TokenExtensions { + """Solana Token-2022 extension metadata.""" + token2022: Token2022Extensions + """Base B20 extension metadata.""" + b20: B20Extensions +} + +type B20Extensions { + """Current rebasing multiplier as a decimal string (e.g. "1.5"); absent means 1.0×.""" + multiplier: String + """Unix-seconds timestamp when this multiplier value was observed (the MultiplierUpdated block time, or the enrichment read time when seeded).""" + multiplierObservedAt: String +} + +type Token2022Extensions { + """Scaled UI amount configuration for Token-2022 mints.""" + scaledUiAmountConfig: Token2022ScaledUiAmountConfig +} + +type Token2022ScaledUiAmountConfig { + """Authority allowed to update the scaled UI amount multiplier.""" + authority: String + """Current multiplier applied to decimal-adjusted UI amounts.""" + multiplier: Float! + """Unix timestamp when the pending multiplier becomes effective.""" + newMultiplierEffectiveTimestamp: String + """Pending multiplier, if one has been scheduled.""" + newMultiplier: Float +} + +type CoinCommunity { + """The id of the coin community""" + id: String! + """The unix timestamp for the creation of the coin community.""" + createdAt: Int! + """The number of posts in the coin community.""" + postCount: Int! + """The number of members in the coin community.""" + memberCount: Int! + """The number of likes in the coin community.""" + likeCount: Int! + """The unix timestamp for the most recent post in the coin community.""" + lastPostAt: Int +} + +"""All-time high and low price and market cap data for a token.""" +type TokenExtrema { + """The token ID (`address:networkId`).""" + id: String! + """The contract address of the token.""" + address: String! + """The network ID the token is deployed on.""" + networkId: Int! + """The all-time high price in USD.""" + athPrice: String! + """The unix timestamp when the all-time high price was reached.""" + athPriceTimestamp: Int! + """The all-time low price in USD.""" + atlPrice: String! + """The unix timestamp when the all-time low price was reached.""" + atlPriceTimestamp: Int! + """The all-time high fully diluted market cap.""" + athFdv: String! + """The unix timestamp when the all-time high FDV was reached.""" + athFdvTimestamp: Int! + """The all-time low fully diluted market cap.""" + atlFdv: String! + """The unix timestamp when the all-time low FDV was reached.""" + atlFdvTimestamp: Int! + """The all-time high circulating market cap.""" + athCircMc: String! + """The unix timestamp when the all-time high circulating market cap was reached.""" + athCircMcTimestamp: Int! + """The all-time low circulating market cap.""" + atlCircMc: String! + """The unix timestamp when the all-time low circulating market cap was reached.""" + atlCircMcTimestamp: Int! +} + +"""Input type of `getTokenPrices`.""" +input GetPriceInput { + """The contract address of the token.""" + address: String! + """The network ID the token is deployed on.""" + networkId: Int! + """The unix timestamp for the price.""" + timestamp: Int + """The address of the pool, when omitted the top pool is used.""" + poolAddress: String + """The block number for the price. It must be provided in addition to the timestamp to get a per block breakdown at a specific timestamp.""" + blockNumber: Int + """The maximum number of deviations from the token's Liquidity-Weighted Mean Price. This is used to mitigate low liquidity pairs producing prices that are not representative of reality. Default is `1`.""" + maxDeviations: Float @deprecated(reason: "This isn't taken into account anymore.") +} + +type PooledTokenValues { + token0: String + token1: String +} + +"""Input type of `getTokensInfo`.""" +input GetTokensInfoInput { + """The contract address of the token.""" + address: String! + """The network ID the token is deployed on.""" + networkId: Int! +} + +"""Input type of `getDetailedPairsStats`.""" +input GetDetailedPairsStatsInput { + """The contract address of the pair.""" + pairAddress: String! + """The network ID the pair is deployed on.""" + networkId: Int! + """The token of interest used to calculate token-specific stats for the pair. Can be `token0` or `token1`.""" + tokenOfInterest: TokenOfInterest + """The unix timestamp for the stats. Defaults to current.""" + timestamp: Int + """The list of durations to get detailed pair stats for.""" + durations: [DetailedPairStatsDuration] + """The number of aggregated values to receive. Note: Each duration has predetermined bucket sizes. The first n-1 buckets are historical. The last bucket is a snapshot of current data. duration `day1`: 6 buckets (4 hours each) plus 1 partial bucket duration `hour12`: 12 buckets (1 hour each) plus 1 partial bucket duration `hour4`: 8 buckets (30 min each) plus 1 partial bucket duration `hour1`: 12 buckets (5 min each) plus 1 partial bucket duration `min5`: 5 buckets (1 min each) plus 1 partial bucket For example, requesting 11 buckets for a `min5` duration will return the last 10 minutes worth of data plus a snapshot for the current minute.""" + bucketCount: Int + """The type of statistics returned. Can be `FILTERED` or `UNFILTERED`.""" + statsType: TokenPairStatisticsType +} + +"""Input type of `ExchangeFilters`.""" +input ExchangeFilters { + """The number of transactions on the exchange in the past hour.""" + txnCount1: StringFilter + """The number of transactions on the exchange in the past 4 hours.""" + txnCount4: StringFilter + """The number of transactions on the exchange in the past 12 hours.""" + txnCount12: StringFilter + """The number of transactions on the exchange in the past 24 hours.""" + txnCount24: StringFilter + """The trade volume in USD in the past hour.""" + volumeUSD1: StringFilter + """The trade volume in USD in the past 4 hours.""" + volumeUSD4: StringFilter + """The trade volume in USD in the past 12 hours.""" + volumeUSD12: StringFilter + """The trade volume in USD in the past 24 hours.""" + volumeUSD24: StringFilter + """The trade volume in the network's base token in the past hour.""" + volumeNBT1: StringFilter + """The trade volume in the network's base token in the past 4 hours.""" + volumeNBT4: StringFilter + """The trade volume in the network's base token in the past 12 hours.""" + volumeNBT12: StringFilter + """The trade volume in the network's base token in the past 24 hours.""" + volumeNBT24: StringFilter + """The total unique daily active users.""" + dailyActiveUsers: NumberFilter + """The total unique monthly active users (30 days).""" + monthlyActiveUsers: NumberFilter + """The list of exchange contract addresses to filter by.""" + address: [String] + """The list of network IDs to filter by.""" + network: [Int] + """Scope to only verified exchanges""" + verified: Boolean +} + +"""Input type of `PairFilters`.""" +input PairFilters { + """The unix timestamp for the creation of the pair.""" + createdAt: NumberFilter + """The unix timestamp for the last transaction to happen on the pair.""" + lastTransaction: NumberFilter + """The number of buys in the past hour.""" + buyCount1: NumberFilter + """The number of buys in the past 12 hours.""" + buyCount12: NumberFilter + """The number of buys in the past 24 hours.""" + buyCount24: NumberFilter + """The number of buys in the past 4 hours.""" + buyCount4: NumberFilter + """The list of exchange contract addresses to filter by.""" + exchangeAddress: [String] + """The highest price in USD in the past hour.""" + highPrice1: NumberFilter + """The highest price in USD in the past 12 hours.""" + highPrice12: NumberFilter + """The highest price in USD in the past 24 hours.""" + highPrice24: NumberFilter + """The highest price in USD in the past 4 hours.""" + highPrice4: NumberFilter + """The amount of liquidity in the pair.""" + liquidity: NumberFilter + """The percent amount of liquidity that is locked""" + lockedLiquidityPercentage: NumberFilter + """The lowest price in USD in the past hour.""" + lowPrice1: NumberFilter + """The lowest price in USD in the past 12 hours.""" + lowPrice12: NumberFilter + """The lowest price in USD in the past 24 hours.""" + lowPrice24: NumberFilter + """The lowest price in USD in the past 4 hours.""" + lowPrice4: NumberFilter + """The list of network IDs to filter by.""" + network: [Int] + """The token price in USD.""" + price: NumberFilter + """The percent price change in the past hour. Decimal format.""" + priceChange1: NumberFilter + """The percent price change in the past 12 hours. Decimal format.""" + priceChange12: NumberFilter + """The percent price change in the past 24 hours. Decimal format.""" + priceChange24: NumberFilter + """The percent price change in the past 4 hours. Decimal format.""" + priceChange4: NumberFilter + """The percent volume change in the past hour. Decimal format.""" + volumeChange1: NumberFilter + """The percent volume change in the past 4 hours. Decimal format.""" + volumeChange4: NumberFilter + """The percent volume change in the past 12 hours. Decimal format.""" + volumeChange12: NumberFilter + """The percent volume change in the past 24 hours. Decimal format.""" + volumeChange24: NumberFilter + """The number of sells in the past hour.""" + sellCount1: NumberFilter + """The number of sells in the past 12 hours.""" + sellCount12: NumberFilter + """The number of sells in the past 24 hours.""" + sellCount24: NumberFilter + """The number of sells in the past 4 hours.""" + sellCount4: NumberFilter + """The list of token contract addresses to filter by.""" + tokenAddress: [String] + """The number of transactions in the past hour.""" + txnCount1: NumberFilter + """The number of transactions in the past 12 hours.""" + txnCount12: NumberFilter + """The number of transactions in the past 24 hours.""" + txnCount24: NumberFilter + """The number of transactions in the past 4 hours.""" + txnCount4: NumberFilter + """The unique number of buys in the past hour.""" + uniqueBuys1: NumberFilter + """The unique number of buys in the past 12 hours.""" + uniqueBuys12: NumberFilter + """The unique number of buys in the past 24 hours.""" + uniqueBuys24: NumberFilter + """The unique number of buys in the past 4 hours.""" + uniqueBuys4: NumberFilter + """The unique number of sells in the past hour.""" + uniqueSells1: NumberFilter + """The unique number of sells in the past 12 hours.""" + uniqueSells12: NumberFilter + """The unique number of sells in the past 24 hours.""" + uniqueSells24: NumberFilter + """The unique number of sells in the past 4 hours.""" + uniqueSells4: NumberFilter + """The unique number of transactions in the past hour.""" + uniqueTransactions1: NumberFilter + """The unique number of transactions in the past 12 hours.""" + uniqueTransactions12: NumberFilter + """The unique number of transactions in the past 24 hours.""" + uniqueTransactions24: NumberFilter + """The unique number of transactions in the past 4 hours.""" + uniqueTransactions4: NumberFilter + """The trade volume in USD in the past hour.""" + volumeUSD1: NumberFilter + """The trade volume in USD in the past 12 hours.""" + volumeUSD12: NumberFilter + """The trade volume in USD in the past 24 hours.""" + volumeUSD24: NumberFilter + """The trade volume in USD in the past 4 hours.""" + volumeUSD4: NumberFilter + """The buy volume in USD in the past hour.""" + buyVolumeUSD1: NumberFilter + """The buy volume in USD in the past 12 hours.""" + buyVolumeUSD12: NumberFilter + """The buy volume in USD in the past 24 hours.""" + buyVolumeUSD24: NumberFilter + """The buy volume in USD in the past 4 hours.""" + buyVolumeUSD4: NumberFilter + """The sell volume in USD in the past hour.""" + sellVolumeUSD1: NumberFilter + """The sell volume in USD in the past 12 hours.""" + sellVolumeUSD12: NumberFilter + """The sell volume in USD in the past 24 hours.""" + sellVolumeUSD24: NumberFilter + """The sell volume in USD in the past 4 hours.""" + sellVolumeUSD4: NumberFilter + """Filter potential Scams""" + potentialScam: Boolean + """Whether to ignore pairs/tokens not relevant to trending""" + trendingIgnored: Boolean + """Whether to filter for pairs on testnet networks. Use `true` for testnet pairs only, `false` for mainnet pairs only and `undefined` (default) for both.""" + isTestnet: Boolean + """The address of the hook contract for applicable protocols.""" + hookAddress: [String] + """The average age of the wallets that traded in the last 24h""" + walletAgeAvg: NumberFilter + """The standard deviation of age of the wallets that traded in the last 24h""" + walletAgeStd: NumberFilter + """The percentage of wallets that are less than 1d old that have traded in the last 24h""" + swapPct1dOldWallet: NumberFilter + """The percentage of wallets that are less than 7d old that have traded in the last 24h""" + swapPct7dOldWallet: NumberFilter +} + +"""Input type of `filterNetworks`.""" +input NetworkFilters { + """Whether the network is a mainnet.""" + mainnet: Boolean + """The total network liquidity in USD.""" + liquidity: NumberFilter + """The network trade volume in USD in the past 5 minutes.""" + volume5m: NumberFilter + """The network trade volume in USD in the past hour.""" + volume1: NumberFilter + """The network trade volume in USD in the past 4 hours.""" + volume4: NumberFilter + """The network trade volume in USD in the past 12 hours.""" + volume12: NumberFilter + """The network trade volume in USD in the past 24 hours.""" + volume24: NumberFilter + """The percent volume change in the past 5 minutes. Decimal format.""" + volumeChange5m: NumberFilter + """The percent volume change in the past hour. Decimal format.""" + volumeChange1: NumberFilter + """The percent volume change in the past 4 hours. Decimal format.""" + volumeChange4: NumberFilter + """The percent volume change in the past 12 hours. Decimal format.""" + volumeChange12: NumberFilter + """The percent volume change in the past 24 hours. Decimal format.""" + volumeChange24: NumberFilter + """The number of transactions in the past 5 minutes.""" + transactions5m: NumberFilter + """The number of transactions in the past hour.""" + transactions1: NumberFilter + """The number of transactions in the past 4 hours.""" + transactions4: NumberFilter + """The number of transactions in the past 12 hours.""" + transactions12: NumberFilter + """The number of transactions in the past 24 hours.""" + transactions24: NumberFilter +} + +"""Input type of `PairFilterMatchTokens`.""" +input PairFilterMatchTokens { + """The contract address of `token0` to filter by.""" + token0: String + """The contract address of `token1` to filter by.""" + token1: String +} + +"""Input type of `chartUrls`.""" +input ChartInput { + """The input required to fetch a pair chart.""" + pair: PairChartInput +} + +"""Input type of `PairChartInput`.""" +input PairChartInput { + """Options that pertain to the image itself.""" + imageOptions: ChartImageOptions + """Settings that pertain to the chart.""" + chartSettings: PairChartSettings! +} + +"""Input options for the chart image.""" +input ChartImageOptions { + """The expiry time of the image in seconds. Max: 172800 (2 days). Default: 900 (15 minutes).""" + expirationSeconds: Int + """The width of the image in pixels. Max: 1200. Default: 800.""" + width: Int + """The height of the image in pixels. Max: 1200. Default: 450.""" + height: Int +} + +"""Input options for the chart.""" +input PairChartSettings { + """The contract address of the pair.""" + pairAddress: String! + """The network ID the pair is deployed on.""" + networkId: Int! + """The unix timestamp for the start of the requested range.""" + from: Int + """The unix timestamp for the end of the requested range.""" + to: Int + """The token of interest within the token's top pair. Can be `token0` or `token1`.""" + quoteToken: QuoteToken + """The time frame for each candle. Available options are `1S`, `5S`, `15S`, `30S`, `1`, `5`, `15`, `30`, `60`, `240`, `720`, `1D`, `7D`.""" + resolution: String + """The color theme of the chart.""" + theme: ChartTheme +} + +"""The color theme of the chart.""" +enum ChartTheme { + LIGHT + DARK +} + +"""The response type for a chart url query.""" +type ChartUrlsResponse { + """The pair chart url.""" + pair: ChartUrl! +} + +"""The chart url.""" +type ChartUrl { + """The chart url.""" + url: String! +} + +"""Specific data for an event label.""" +union EventLabelData = FrontRunLabelData | SandwichedLabelData + +"""Metadata for a front-run label.""" +type FrontRunLabelData { + """The index of the front-run label. Can be 0 or 1.""" + index: Int + """The amount of `token0` drained in the attack.""" + token0DrainedAmount: String! + """The amount of `token1` drained in the attack.""" + token1DrainedAmount: String! +} + +"""Metadata for a sandwich label.""" +type SandwichedLabelData { + """The amount of `token0` drained in the attack.""" + token0DrainedAmount: String + """The amount of `token1` drained in the attack.""" + token1DrainedAmount: String +} + +"""Fee breakdown for a single event. All wei-denominated fields are in the network's native token smallest unit.""" +type EventFeeData { + """Pool fee rate in the protocol's native encoding.""" + poolFeeRateRaw: String + """Pool fee rate normalized to basis points (1 bps = 0.01%).""" + poolFeeBps: Float + """Pool fee absolute amount in the fee token's smallest unit.""" + poolFeeAmountRaw: String + """True when the pool fee is dynamic (e.g. UniswapV4 hooks, AlgebraIntegral plugins).""" + dynamicFee: Boolean + """True when poolFeeBps is a protocol-level estimate rather than an exact per-pool or per-swap value (e.g. MintClub averaged mint/burn royalties).""" + estimatedPoolFee: Boolean + """Base fee portion of gas cost in native token smallest unit (wei for EVM, lamports for Solana). baseFeePerGas * gasUsed on EVM, 5000 lamports * signatures on Solana.""" + baseFeeNativeUnit: String + """Priority fee / gas tip in native token smallest unit. (effectiveGasPrice - baseFeePerGas) * gasUsed on EVM, meta.fee - baseFee on Solana.""" + priorityFeeNativeUnit: String + """Gas units consumed by the transaction (EVM gas units or Solana compute units).""" + gasUsed: String + """Direct payment to the block builder in native token smallest unit. Sum of ETH transfers to block.coinbase on EVM, or Jito tip on Solana.""" + builderTipNativeUnit: String + """L1 data posting fee in native token smallest unit (L2 rollups only: Base, Optimism, etc.).""" + l1DataFeeNativeUnit: String + """Number of DEX events in this transaction. Used to pro-rate transaction-level fees per event.""" + txEventCount: Int + """Protocol-specific supplemental fee data (e.g. Pump cashback).""" + supplementalFeeData: SupplementalFeeData +} + +"""Cashback fee data for Pump V1 swaps.""" +type PumpCashbackFeeData { + """Discriminant for the SupplementalFeeData union.""" + type: String! + """Cashback fee rate in basis points.""" + cashbackFeeBps: Int! + """Cashback amount in lamports.""" + cashbackAmountLamports: String! +} + +"""Cashback fee data for Pump AMM swaps.""" +type PumpAmmCashbackFeeData { + """Discriminant for the SupplementalFeeData union.""" + type: String! + """Cashback fee rate in basis points.""" + cashbackFeeBps: Int! + """Cashback amount in lamports.""" + cashbackAmountLamports: String! +} + +"""Protocol-specific supplemental fee data.""" +union SupplementalFeeData = PumpCashbackFeeData | PumpAmmCashbackFeeData + +"""Event labels. Can be `sandwich` or `washtrade`.""" +type LabelsForEvent { + sandwich: SandwichLabelForEvent + washtrade: WashtradeLabelForEvent +} + +"""Sandwich event label types.""" +enum SandwichLabelForEventType { + sandwiched + frontrun + backrun +} + +"""Metadata for a sandwich label.""" +type SandwichLabelForEvent { + """The label type, 'sandwiched'.""" + label: String! + """The sandwich event label types.""" + sandwichType: SandwichLabelForEventType! + """The amount of `token0` drained in the attack.""" + token0DrainedAmount: String! + """The amount of `token1` drained in the attack.""" + token1DrainedAmount: String! +} + +"""Metadata for a washtrade label.""" +type WashtradeLabelForEvent { + """The label type, 'washtrade'""" + label: String! +} + +"""Metadata for an event label.""" +type EventLabel { + """Specific data for the event label type.""" + data: EventLabelData! + """The ID of the pair (`address:networkId`).""" + id: String! + """The event label type.""" + label: EventLabelType! + """The index of the log in the block.""" + logIndex: Int! + """The network ID the pair is deployed on.""" + networkId: Int! + """The unix timestamp for the transaction.""" + timestamp: Int! + """The index of the transaction within the block.""" + transactionIndex: Int! + """The unique hash for the transaction.""" + transactionHash: String! +} + +"""Response returned by `getEventLabels`.""" +type EventLabelConnection { + """A list of event labels for a pair.""" + items: [EventLabel] + """The cursor to use for pagination.""" + cursor: String +} + +"""Input type of `token` and `tokens`.""" +input TokenInput { + """The contract address of the token.""" + address: String! + """The network ID the token is deployed on.""" + networkId: Int! +} + +"""Metadata for a token in a pair.""" +type PairMetadataToken { + address: String! + decimals: Int + name: String! + networkId: Int! + pooled: String! + price: String! + symbol: String! + labels: [ContractLabel] +} + +type PairMetadata { + """The exchange contract ID.""" + exchangeId: String + """The exchange fee for swaps.""" + fee: Int + """The ID for the pair (`address:networkId`).""" + id: String! + """The token of interest within the pair. Can be `token0` or `token1`.""" + quoteToken: QuoteToken + """The network ID the pair is deployed on.""" + networkId: Int + """The total liquidity in the pair.""" + liquidity: String! + """The token with higher liquidity within the pair. Can be `token0` or `token1`.""" + liquidityToken: String + """The token with lower liquidity within the pair. Can be `token0` or `token1`.""" + nonLiquidityToken: String + """The contract address of the pair.""" + pairAddress: String! + """The type of statistics returned. Can be `FILTERED` or `UNFILTERED`.""" + statsType: TokenPairStatisticsType! + """The quote token price in USD.""" + price: String! + """The non-quote token price in USD.""" + priceNonQuoteToken: String! + """The percent price change in the past 5 minutes. Decimal format.""" + priceChange5m: Float + """The percent price change in the past hour. Decimal format.""" + priceChange1: Float + """The percent price change in the past 4 hours. Decimal format.""" + priceChange4: Float + """The percent price change in the past 12 hours. Decimal format.""" + priceChange12: Float + """The percent price change in the past 24 hours. Decimal format.""" + priceChange24: Float + """The percent price change in the past week. Decimal format.""" + priceChange1w: Float @deprecated(reason: "Inaccurate") + """The amount of required tick separation. Only applicable for pairs on UniswapV3.""" + tickSpacing: Int + """Pair metadata for the first token in the pair.""" + token0: PairMetadataToken! + """Pair metadata for the second token in the pair.""" + token1: PairMetadataToken! + """The trade volume in USD in the past hour.""" + volume1: String + """The trade volume in USD in the past 4 hours.""" + volume4: String + """The trade volume in USD in the past 12 hours.""" + volume12: String + """The trade volume in USD in the past 24 hours.""" + volume24: String + """The trade trade volume in USD in the past week.""" + volume1w: String @deprecated(reason: "Inaccurate") + """The trade volume in USD in the past 5 minutes.""" + volume5m: String + """The highest price in USD in the past 5 minutes.""" + highPrice5m: String + """The highest price in USD in the past hour.""" + highPrice1: String + """The highest price in USD in the past 4 hours.""" + highPrice4: String + """The highest price in USD in the past 12 hours.""" + highPrice12: String + """The highest price in USD in the past 24 hours.""" + highPrice24: String + """The highest price in USD in the past week.""" + highPrice1w: String @deprecated(reason: "Inaccurate") + """The lowest price in USD in the past 5 minutes.""" + lowPrice5m: String + """The lowest price in USD in the past hour.""" + lowPrice1: String + """The lowest price in USD in the past 12 hours.""" + lowPrice12: String + """The lowest price in USD in the past 24 hours.""" + lowPrice24: String + """The lowest price in USD in the past 4 hours.""" + lowPrice4: String + """The lowest price in USD in the past week.""" + lowPrice1w: String @deprecated(reason: "Inaccurate") + """Token metadata for the first token in the pair.""" + enhancedToken0: EnhancedToken + """Token metadata for the second token in the pair.""" + enhancedToken1: EnhancedToken + """Wallet pattern data for the quote token, if available. Only populated for launchpad tokens.""" + walletActivity: TokenWalletActivity + """The unix timestamp for the creation of the pair.""" + createdAt: Int + """The percentage of total supply held by the top 10 holders.""" + top10HoldersPercent: Float +} + +"""Response returned by `listPairsWithMetadataForToken`.""" +type ListPairsForTokenResponse { + """A list of pairs containing a given token.""" + results: [ListPairsForTokenValue!]! +} + +"""Metadata for a pair containing a given token.""" +type ListPairsForTokenValue { + """The volume for the pair in USD.""" + volume: String! + """The total liquidity in the pair.""" + liquidity: String! + """Metadata for token with higher liquidity within the pair.""" + token: EnhancedToken! + """Metadata for token with lower liquidity within the pair.""" + backingToken: EnhancedToken! + """Metadata for the pair.""" + pair: Pair! + """Exchange metadata for the pair.""" + exchange: Exchange! + """The token of interest within the pair. Can be `token0` or `token1`.""" + quoteToken: QuoteToken +} + +type PairProtocolCustomData { + """The address of the hook contract for Uniswap V4 pools.""" + uniswapV4HookAddress: String +} + +type UniswapV4Data { + """The address of the hook contract for Uniswap V4 pools.""" + uniswapV4HookAddress: String + """Whether the token is the network token for the Uniswap V4 pool.""" + isToken0NetworkToken: Boolean + """Whether the pool uses a dynamic fee. A fee of 0x80000 is used by Uniswap V4 to indicate a dynamic pool -- in such cases, the fee percentage on the pair should be disregarded.""" + isDynamicFee: Boolean + type: String! +} + +type ArenaTradeData { + """Protocol specific token ID""" + tokenId: String + type: String! +} + +type PumpData { + """Creator from create instruction data""" + creator: String + type: String! +} + +union ProtocolData = UniswapV4Data | ArenaTradeData | PumpData + +"""Metadata for a token pair.""" +type Pair { + """The contract address of the pair.""" + address: String! + """The address for the exchange factory contract.""" + exchangeHash: String! + """The exchange fee for swaps.""" + fee: Int + """The ID for the pair (`address:networkId`).""" + id: String! + """The network ID the pair is deployed on.""" + networkId: Int! + """The protocol of the pair. E.g. UniswapV4, RaydiumV4, PumpV1, etc.""" + protocol: String + """The amount of required tick separation. Only applicable for pairs on UniswapV3.""" + tickSpacing: Int + """The contract address of `token0`.""" + token0: String! + """The contract address of `token1`.""" + token1: String! + """The unix timestamp for the creation of the pair.""" + createdAt: Int + """Metadata for the first token in the pair.""" + token0Data: EnhancedToken + """Metadata for the second token in the pair.""" + token1Data: EnhancedToken + """The pooled amounts of each token in the pair.""" + pooled: PooledTokenValues + """The virtual pooled amounts of each token in the pair.""" + virtualPooled: PooledTokenValues + """Custom data for the pair, only certain protocols have this. (uniswapv4, arenatrade for example)""" + protocolData: ProtocolData + """The per-protocol data for the pair, if applicable""" + protocolCustomData: PairProtocolCustomData @deprecated(reason: "Use protocolData instead") +} + +"""A value in a sparkline.""" +type SparklineValue { + timestamp: Int! + value: Float! +} + +"""A sparkline for a token.""" +type TokenSparkline { + """The token id""" + id: String! + """The timeframe of the sparkline.""" + resolution: String! + """Which attribute the sparkline is charting. Defaults to `PRICE`""" + attribute: SparklineAttribute + """List of sparkline values to chart""" + sparkline: [SparklineValue!]! +} + +"""Input type of `tokenSparkline`.""" +input TokenSparklineInput { + """The contract address & networkId of the token, joined by a colon. ex: 0xbe042e9d09cb588331ff911c2b46fd833a3e5bd6:1""" + ids: [String!]! + """The unix timestamp for the start of the requested range. Defaults to 1 week ago.""" + from: Int + """The unix timestamp for the end of the requested range. Defaults to current time.""" + to: Int + """The time frame for each candle. Available options are `1S`, `5S`, `15S`, `30S`, `1`, `5`, `15`, `30`, `60`, `240`, `720`, `1D`, `7D`. Defaults to `60` (1 hour)""" + resolution: String + """Whether to add empty bars to the response, populated with the previous bar's value. Default is `false`""" + fillMissingBars: Boolean +} + +"""Response returned by `getLatestTokens`.""" +type LatestTokenConnection { + """A list of newly created tokens.""" + items: [LatestToken!]! +} + +"""Metadata for a newly created token.""" +type LatestToken { + """The id of the new token. (tokenAddress:networkId)""" + id: String! + """The contract address of the new token.""" + tokenAddress: String! + """The network ID the token is deployed on.""" + networkId: Int! + """The block number of the token contract's creation.""" + blockNumber: Int! + """The index of the transaction within the block.""" + transactionIndex: Int! + """The index of the trace within the token contract's creation transaction.""" + traceIndex: Int! + """The unique hash for the token contract's creation transaction.""" + transactionHash: String! + """The unique hash for the token contract's creation block.""" + blockHash: String! + """The unix timestamp for the creation of the token.""" + timeCreated: Int! + """The address of the token creator.""" + creatorAddress: String! + """The token creator's network token balance.""" + creatorBalance: String! + """The name of the token.""" + tokenName: String! + """The total supply of the token.""" + totalSupply: String! + """The symbol of the token.""" + tokenSymbol: String! + """The token's number of decimals.""" + decimals: Int! + """Simulated token contract results, if available.""" + simulationResults: [LatestTokenSimResults!]! +} + +"""Metadata for a newly created token.""" +type LatestTokenSimResults { + """Whether or not a token was able to be succesfully bought during simulation.""" + buySuccess: Boolean + """Tax paid for a buy transaction during simulation.""" + buyTax: String + """Gas used for a buy transaction during simulation.""" + buyGasUsed: String + """The maximum token amount an address can buy during simulation.""" + maxBuyAmount: String + """Whether or not a token was able to be succesfully sold during simulation.""" + sellSuccess: Boolean + """Tax paid for a sell transaction during simulation.""" + sellTax: String + """Gas used for a sell transaction during simulation.""" + sellGasUsed: String + """The maximum token amount an address can sell during simulation.""" + maxSellAmount: String + """Whether or not the contract ownership was able to be transferred during simulation.""" + canTransferOwnership: Boolean + """Whether or not the contract ownership was able to be renounced during simulation.""" + canRenounceOwnership: Boolean + """Whether or not the contract ownership is already renounced during simulation (owner is 0x0).""" + isOwnerRenounced: Boolean + """If a call was found to trigger liquidity & trading, this is the call name.""" + openTradingCall: String +} + +input RefreshBalancesInput { + """The wallet address(es) in question""" + walletId: String! + """The token to check balance of""" + tokenId: String! +} + +"""Response returned by `onEventsCreated`.""" +type AddEventsOutput { + """The contract address of the pair.""" + address: String! + """The network ID that the token is deployed on.""" + networkId: Int! + """The ID of the event (`address`:`networkId`). For example, `0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2:1`.""" + id: String! + """The token of interest within the pair. Can be `token0` or `token1`.""" + quoteToken: QuoteToken + """A list of transactions for the token.""" + events: [Event]! +} + +"""Response returned by `onEventsCreatedByMaker`.""" +type AddEventsByMakerOutput { + """The address of the maker.""" + makerAddress: String! + """A list of transactions for the maker.""" + events: [Event!]! +} + +"""Response returned by `onTokenEventsCreated`.""" +type AddTokenEventsOutput { + """The ID of the event (`address`:`networkId`). For example, `0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2:1`.""" + id: String! + """A list of transactions for the token.""" + events: [Event!]! +} + +"""Response returned by deprecated `onUnconfirmedEventsCreated`. Prefer `onEventsCreated`.""" +type AddUnconfirmedEventsOutput { + """The contract address of the pair.""" + address: String! + """The network ID that the token is deployed on.""" + networkId: Int! + """The ID of the event (`address`:`networkId`). For example, `0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2:1`.""" + id: String! + """The token of interest within the pair. Can be `token0` or `token1`.""" + quoteToken: QuoteToken + """A list of transactions for the token.""" + events: [UnconfirmedEvent]! +} + +"""Response returned by deprecated `onUnconfirmedEventsCreatedByMaker`. Prefer `onEventsCreatedByMaker`.""" +type AddUnconfirmedEventsByMakerOutput { + """The wallet address of the maker.""" + makerAddress: String! + """A list of transactions for the maker.""" + events: [UnconfirmedEvent!]! +} + +"""The protocol of the token.""" +enum LaunchpadTokenProtocol { + """Protocol name for Pump.fun.""" + Pump + """Protocol Name for Pump Mayhem""" + PumpMayhem + """Protocol name for Four.meme.""" + FourMeme + """Protocol name for LaunchLab and Bonk.""" + RaydiumLaunchpad + """Protocol name for boop.fun.""" + BoopFun + """Protocol name for Vertigo.""" + Vertigo + """Protocol name for Rainbow.""" + Rainbow + """Protocol name for EgoTech.""" + EgoTech + """Protocol name for ArenaTrade.""" + ArenaTrade + """Protocol name for Moonit (formerly Moonshot).""" + Moonit + """Protocol name for MeteoraDBC.""" + MeteoraDBC + """Protocol name for Baseapp.""" + Baseapp + """Protocol Name for Baseapp Creator""" + BaseappCreator + """Protocol name for Zora.""" + ZoraV4 + """Protocol name for ZoraCreator.""" + ZoraCreatorV4 + """Protocol name for Virtuals.""" + Virtuals + """Protocol name for Clanker.""" + Clanker + """Protocol name for Heaven.""" + HeavenAMM + """Protocol name for TokenMill V2 (SVM).""" + TokenMillV2 + """Protocol name for TokenMill V2 (EVM).""" + TokenMillEVM + """Protocol name for Clanker V4.""" + ClankerV4 + """Protocol name for Printr (EVM only - Printr tokens on Solana should be queried with launchpadName as Printr uses MeteoraDBC on Solana).""" + Printr + """Protocol name for BONAD.fun.""" + BonadFun + """Protocol name for NadFun.""" + NadFun + """Protocol name for Kumbaya.""" + Kumbaya + """Protocol name for Doppler.""" + Doppler + """Protocol name for Flaunch.""" + Flaunch + """Protocol name for Liquid.""" + Liquid +} + +"""The type of event. Note that associated statistics such as `buyCount1`, `price`, etc. are only available for `Updated` events.""" +enum LaunchpadTokenEventType { + """The token has been discovered""" + Deployed + """The token has been created with metadata""" + Created + """The token's statistics have been updated""" + Updated + """The token has been completed""" + Completed + """The token has been migrated""" + Migrated + """The token has been discovered (not finalized)""" + UnconfirmedDeployed + """The token's metadata has been processed (not finalized)""" + UnconfirmedMetadata + """The token has graduated off its bonding curve (not finalized)""" + UnconfirmedCompleted +} + +"""Response returned by `onLaunchpadTokenEvent`.""" +type LaunchpadTokenEventOutput { + """The contract address of the token.""" + address: String! + """The network ID that the token is deployed on.""" + networkId: Int! + """The protocol of the token.""" + protocol: String! + """The name of the launchpad.""" + launchpadName: String! + """Metadata for the token.""" + token: EnhancedToken! + """The number of buys in the last hour.""" + buyCount1: Int + """The type of event.""" + eventType: LaunchpadTokenEventType! + """The number of holders.""" + holders: Int + """The market cap of the token.""" + marketCap: String + """The price of the token.""" + price: Float + """The number of sells in the last hour.""" + sellCount1: Int + """The volume of the token in the last hour.""" + volume1: Int + """The number of transactions in the last hour.""" + transactions1: Int + """The liquidity of the token's top pair.""" + liquidity: String + """Pool fees (DEX protocol revenue) in the last hour, USD.""" + poolFees1: String + """Network base fees in the last hour, USD.""" + baseFees1: String + """EIP-1559 priority fees (tips to validators) in the last hour, USD.""" + priorityFees1: String + """Builder tips (MEV activity indicator) in the last hour, USD.""" + builderTips1: String + """L1 data fees (cost of posting rollup data to L1, applies to all L2 rollups) in the last hour, USD.""" + l1DataFees1: String + """The total fees (pool + base + priority + builder tips + L1 data) in the last hour, denominated in USD.""" + totalFees1: String + """The ratio of total fees to volume in the last hour.""" + feeToVolumeRatio1: Float + """The number of snipers that bought the token""" + sniperCount: Float + """The percentage of the token that is held by snipers""" + sniperHeldPercentage: Float + """The number of bundlers that bought the token""" + bundlerCount: Float + """The percentage of the token that is held by bundlers""" + bundlerHeldPercentage: Float + """The number of insiders that bought the token""" + insiderCount: Float + """The percentage of the token that is held by insiders""" + insiderHeldPercentage: Float + """The number of suspicious wallets (deduplicated union of snipers, bundlers, and insiders) that bought the token""" + suspiciousCount: Float + """The percentage of the token that is held by suspicious wallets""" + suspiciousHeldPercentage: Float + """The percentage of the token that is held by developers""" + devHeldPercentage: Float + """The percentage of total supply held by the top 10 holders.""" + top10HoldersPercent: Float + """Resolved profile and token-creator stats for the deployer wallet.""" + devWallet: Wallet +} + +"""Input for `onLaunchpadTokenEvent`.""" +input OnLaunchpadTokenEventInput { + """The launchpad protocol.""" + protocol: LaunchpadTokenProtocol + """A list of launchpad protocols.""" + protocols: [LaunchpadTokenProtocol!] + """The name of the launchpad. One of the following: Pump.fun, Pump Mayhem, Bonk, BONAD.fun, Nad.Fun, Baseapp, Baseapp Creator, Zora, Zora Creator, Four.meme, Four.meme Fair, Believe, Moonshot, Jupiter Studio, boop, Heaven, TokenMill V2, Virtuals, Clanker, Clanker V4, ArenaTrade, Moonit, LaunchLab, MeteoraDBC, Meteora Alpha Vault, Zora Solana, Cooking.City, time.fun, BAGS, Circus, Dealr, OhFuckFun, PrintFun, Trend, shout.fun, xApple, Sendshot, DubDub, cults, OpenGameProtocol, AMERICA.fun, Kumbaya, Printr, Bankr, Liquid, Noice, Flaunch, Coinbarrel, Blowfish, MeMoo, Metaplex, Scale, Eitherway, Livo, Flap, EasyA Kickstart.""" + launchpadName: String + """A list of launchpad names. Any of the following: Pump.fun, Pump Mayhem, Bonk, BONAD.fun, Nad.Fun, Baseapp, Baseapp Creator, Zora, Zora Creator, Four.meme, Four.meme Fair, Believe, Moonshot, Jupiter Studio, boop, Heaven, TokenMill V2, Virtuals, Clanker, Clanker V4, ArenaTrade, Moonit, LaunchLab, MeteoraDBC, Meteora Alpha Vault, Zora Solana, Cooking.City, time.fun, BAGS, Circus, Dealr, OhFuckFun, PrintFun, Trend, shout.fun, xApple, Sendshot, DubDub, cults, OpenGameProtocol, AMERICA.fun, Kumbaya, Printr, Bankr, Liquid, Noice, Flaunch, Coinbarrel, Blowfish, MeMoo, Metaplex, Scale, Eitherway, Livo, Flap, EasyA Kickstart.""" + launchpadNames: [String!] + """The type of event.""" + eventType: LaunchpadTokenEventType + """The contract address of the token. Requires `networkId`.""" + address: String + """The network ID that the token is deployed on.""" + networkId: Int +} + +"""Response returned by `onBarsUpdated`.""" +type OnBarsUpdatedResponse { + """The contract address for the pair.""" + pairAddress: String! + """The network ID the pair is deployed on.""" + networkId: Int! + """The ID for the pair (`pairAddress`:`networkId`).""" + pairId: String! + """The unix timestamp for the new bar.""" + timestamp: Int! + """The type of statistics used. Can be `FILTERED` or `UNFILTERED`.""" + statsType: TokenPairStatisticsType! + """The sortKey for the bar (`blockNumber`#`transactionIndex`#`logIndex`, zero padded). For example, `0000000016414564#00000224#00000413`.""" + eventSortKey: String! + """The commitment level of the bar update within the live stream.""" + commitmentLevel: BarCommitmentLevel! + """Price data broken down by resolution. For processed updates, this is a confirmed-shaped compatibility projection.""" + aggregates: ResolutionBarData! + """The quote token within the pair.""" + quoteToken: QuoteToken + """The address of the token being quoted""" + quoteTokenAddress: String! +} + +"""Response returned by `onBarsUpdated`.""" +type OnTokenBarsUpdatedResponse { + """The commitment level of the bar within the live stream.""" + commitmentLevel: BarCommitmentLevel! + """The contract address for the pair.""" + pairAddress: String @deprecated(reason: "pairs are no longer used for pricing") + """The network ID the pair is deployed on.""" + networkId: Int! + """The ID for the pair (`pairAddress`:`networkId`).""" + pairId: String @deprecated(reason: "pairs are no longer used for pricing") + """The unix timestamp for the new bar.""" + timestamp: Int! + """The type of statistics used. Only `FILTERED`.""" + statsType: TokenPairStatisticsType! + """The sortKey for the bar (`blockNumber`#`transactionIndex`#`logIndex`, zero padded). For example, `0000000016414564#00000224#00000413`.""" + eventSortKey: String! + """Price data broken down by resolution.""" + aggregates: ResolutionBarData! + """The quote token within the pair.""" + quoteToken: QuoteToken @deprecated(reason: "pairs are no longer used for pricing") + """The address of the token being quoted""" + tokenAddress: String! + """The address of the token being quoted""" + tokenId: String! +} + +"""Price data for each supported resolution.""" +type ResolutionBarData { + """1 second resolution.""" + r1S: CurrencyBarData + """5 second resolution.""" + r5S: CurrencyBarData + """15 second resolution.""" + r15S: CurrencyBarData + """30 second resolution.""" + r30S: CurrencyBarData + """1 minute resolution.""" + r1: CurrencyBarData + """5 minute resolution.""" + r5: CurrencyBarData + """15 minute resolution.""" + r15: CurrencyBarData + """30 minute resolution.""" + r30: CurrencyBarData + """60 minute resolution.""" + r60: CurrencyBarData + """4 hour resolution.""" + r240: CurrencyBarData + """12 hour resolution.""" + r720: CurrencyBarData + """1 day resolution.""" + r1D: CurrencyBarData + """1 week resolution.""" + r7D: CurrencyBarData +} + +"""Price data for a bar at a specific resolution.""" +type CurrencyBarData { + """The timestamp for the bar.""" + t: Int! + """Bar chart data in USD.""" + usd: IndividualBarData! + """Bar chart data in the network's base token.""" + token: IndividualBarData! +} + +"""Bar chart data.""" +type IndividualBarData { + """The opening price.""" + o: Float! + """The high price.""" + h: Float! + """The low price.""" + l: Float! + """The closing price.""" + c: Float! + """The volume.""" + v: Int + """The timestamp for the bar.""" + t: Int! + """The volume with higher precision.""" + volume: String! + """The volume in the network's base token""" + volumeNativeToken: String! + """The number of unique buyers""" + buyers: Int! + """The number of buys""" + buys: Int! + """The buy volume in USD""" + buyVolume: String! + """The number of unique sellers""" + sellers: Int! + """The number of sells""" + sells: Int! + """The sell volume in USD""" + sellVolume: String! + """Liquidity in USD""" + liquidity: String! + """The number of traders""" + traders: Int! + """The number of transactions""" + transactions: Int! + """The USD value of pool fees collected""" + poolFees: String + """The USD value of base fees (gas) paid""" + baseFees: String + """The USD value of priority fees (tips) paid""" + priorityFees: String + """The USD value of builder tips (MEV) paid""" + builderTips: String + """The USD value of L1 data posting fees (L2 rollups only)""" + l1DataFees: String +} + +"""Response returned by deprecated `onUnconfirmedBarsUpdated`. Prefer `onBarsUpdated`.""" +type OnUnconfirmedBarsUpdated { + """The contract address for the pair.""" + pairAddress: String! + """The network ID the pair is deployed on.""" + networkId: Int! + """The ID for the pair (`pairAddress`:`networkId`).""" + pairId: String! + """The unix timestamp for the new bar.""" + timestamp: Int! + """The sortKey for the bar (`blockNumber`#`transactionIndex`#`logIndex`, zero padded). For example, `0000000016414564#00000224#00000413`.""" + eventSortKey: String! + """Price data broken down by resolution.""" + aggregates: UnconfirmedResolutionBarData! + """The quote token within the pair.""" + quoteToken: QuoteToken + """The address of the token being quoted""" + quoteTokenAddress: String! +} + +"""Unconfirmed price data for each supported resolution.""" +type UnconfirmedResolutionBarData { + """1 second resolution.""" + r1S: UnconfirmedIndividualBarData + """5 second resolution.""" + r5S: UnconfirmedIndividualBarData + """15 second resolution.""" + r15S: UnconfirmedIndividualBarData + """1 minute resolution.""" + r1: UnconfirmedIndividualBarData + """5 minute resolution.""" + r5: UnconfirmedIndividualBarData + """15 minute resolution.""" + r15: UnconfirmedIndividualBarData + """60 minute resolution.""" + r60: UnconfirmedIndividualBarData + """4 hour resolution.""" + r240: UnconfirmedIndividualBarData + """12 hour resolution.""" + r720: UnconfirmedIndividualBarData + """1 day resolution.""" + r1D: UnconfirmedIndividualBarData + """1 week resolution.""" + r7D: UnconfirmedIndividualBarData +} + +"""Unconfirmed bar chart data.""" +type UnconfirmedIndividualBarData { + """The opening price.""" + o: Float! + """The high price.""" + h: Float! + """The low price.""" + l: Float! + """The closing price.""" + c: Float! + """The volume.""" + v: Int + """The volume with higher precision.""" + volume: String! + """The timestamp for the bar.""" + t: Int! +} + +input OnLaunchpadTokenEventBatchInput { + """The launchpad protocol.""" + protocol: LaunchpadTokenProtocol + """A list of launchpad protocols.""" + protocols: [LaunchpadTokenProtocol!] + """The network ID that the token is deployed on.""" + networkId: Int + """The name of the launchpad. One of the following: Pump.fun, Pump Mayhem, Bonk, BONAD.fun, Nad.Fun, Baseapp, Baseapp Creator, Zora, Zora Creator, Four.meme, Four.meme Fair, Believe, Moonshot, Jupiter Studio, boop, Heaven, TokenMill V2, Virtuals, Clanker, Clanker V4, ArenaTrade, Moonit, LaunchLab, MeteoraDBC, Meteora Alpha Vault, Zora Solana, Cooking.City, time.fun, BAGS, Circus, Dealr, OhFuckFun, PrintFun, Trend, shout.fun, xApple, Sendshot, DubDub, cults, OpenGameProtocol, AMERICA.fun, Kumbaya, Printr, Bankr, Liquid, Noice, Flaunch, Coinbarrel, Blowfish, MeMoo, Metaplex, Scale, Eitherway, Livo, Flap, EasyA Kickstart.""" + launchpadName: String + """A list of launchpad names. Any of the following: Pump.fun, Pump Mayhem, Bonk, BONAD.fun, Nad.Fun, Baseapp, Baseapp Creator, Zora, Zora Creator, Four.meme, Four.meme Fair, Believe, Moonshot, Jupiter Studio, boop, Heaven, TokenMill V2, Virtuals, Clanker, Clanker V4, ArenaTrade, Moonit, LaunchLab, MeteoraDBC, Meteora Alpha Vault, Zora Solana, Cooking.City, time.fun, BAGS, Circus, Dealr, OhFuckFun, PrintFun, Trend, shout.fun, xApple, Sendshot, DubDub, cults, OpenGameProtocol, AMERICA.fun, Kumbaya, Printr, Bankr, Liquid, Noice, Flaunch, Coinbarrel, Blowfish, MeMoo, Metaplex, Scale, Eitherway, Livo, Flap, EasyA Kickstart.""" + launchpadNames: [String!] + """The type of event.""" + eventType: LaunchpadTokenEventType +} + +"""Input for `onEventsCreatedByMaker`.""" +input OnEventsCreatedByMakerInput { + """The wallet address of the maker.""" + makerAddress: String! +} + +"""Input for deprecated `onUnconfirmedEventsCreatedByMaker`.""" +input OnUnconfirmedEventsCreatedByMakerInput { + """The wallet address of the maker.""" + makerAddress: String! +} + +"""Wallet labels. Used for filtering wallets with `includeLabels` and `excludeLabels`.""" +enum WalletLabel { + """Wallet is interesting (based on a number of factors).""" + INTERESTING + """Wallet holds $5M+ in assets.""" + MEDIUM_WEALTHY + """Wallet holds $10M+ in assets.""" + MEGA_WEALTHY + """Wallet has made over $7.5K profit in the last 90 days trading tokens that are older than 2 days.""" + SMART_TRADER_TOKENS_OVER_TWO_DAYS_OLD + """Wallet has made over $5K profit in the last 90 days trading tokens that are between 1 hour and 2 days old.""" + SMART_TRADER_TOKENS_UNDER_TWO_DAYS_OLD + """Wallet has made over $3K profit in the last 90 days trading tokens that were launched within their first hour.""" + SNIPER + """Wallet holds $1M+ in assets.""" + WEALTHY +} + +"""Response returned by `onHoldersUpdated`.""" +type HoldersUpdate { + """The number of different wallets holding the token.""" + holders: Int! + """The ID of the token (`tokenAddress:networkId`).""" + tokenId: String! + """The token's contract address.""" + tokenAddress: String! + """The network ID that the token is deployed on.""" + networkId: Int! + """The list of wallets holding the token.""" + balances: [Balance!]! +} + +"""Response returned by `liquidityLocks`.""" +type LiquidityLockConnection { + """A list of liquidity locks.""" + items: [LiquidityLock!]! + """A cursor for use in pagination.""" + cursor: String + """Liquidity data for each unique pair in the locks.""" + pairLiquidityData: [PairLiquidityData!]! +} + +"""Liquidity data for a specific pair.""" +type PairLiquidityData { + """The ID of the pair (`address:networkId`).""" + pairId: String! + """The address of the pair.""" + pairAddress: String! + """The network ID the pair is deployed on.""" + networkId: Int! + """The total liquidity in the pair.""" + totalLiquidity: String! +} + +"""A record of locked liquidity.""" +type LiquidityLock { + """The pair address.""" + pairAddress: String! + """The network ID the pair is deployed on.""" + networkId: Int! + """The wallet address of the owner.""" + ownerAddress: String! + """The address of the locker contract.""" + lockerAddress: String! + """The unix timestamp for when the lock was created.""" + createdAt: Int! + """The unix timestamp for when the lock expires.""" + unlockAt: Int + """The protocol with which the liquidity is locked.""" + lockProtocol: LiquidityLockProtocol! + """The protocol that created the pair""" + liquidityProtocol: LiquidityProtocol! @deprecated(reason: "Use liquidityProtocolV2 instead") + """The protocol that created the pair""" + liquidityProtocolV2: String! + """The amount of liquidity locked.""" + liquidityAmount: String! + """The inital amount of token0 locked.""" + initialAmountToken0: String! + """The inital amount of token1 locked.""" + initialAmountToken1: String! + """If the liquidity position is represented by an NFT, this will contain the NFT data.""" + liquidityNftData: LiquidityNftData +} + +"""Protocols that can lock liquidity.""" +enum LiquidityLockProtocol { + BASECAMP_V1 + UNCX_V2 + UNCX_V3 + BURN + BITBOND + METEORA_DAMM_V2 +} + +"""Protocols that create trading pairs.""" +enum LiquidityProtocol { + UNISWAP_V3 + UNISWAP_V2 + RAYDIUM_V4 + PUMP_V1 + USE_LIQUIDITY_PROTOCOL_V2 +} + +"""Liquidity NFT position data.""" +type LiquidityNftData { + """The tokenId of the liquidity position nft.""" + nftTokenId: String! + """The address of the nft position manager contract.""" + nftPositionManagerAddress: String! +} + +"""Metadata about a token's liquidity. Includes locked liquidity data for up to 100 pairs that the token is in.""" +type LiquidityMetadataByToken { + """The address of the token.""" + tokenAddress: String! + """The network ID the token is deployed on.""" + networkId: Int! + """The total liquidity in USD.""" + totalLiquidityUsd: String! + """The locked liquidity in USD.""" + lockedLiquidityUsd: String! + """The total amount of tokens in pairs.""" + totalTokenLiquidity: String! + """The total amount of tokens in pairs shifted by number of decimals the token has.""" + totalTokenLiquidityShifted: String! + """The locked amount of tokens in pairs.""" + lockedTokenLiquidity: String! + """The locked amount of tokens in pairs shifted by number of decimals the token has.""" + lockedTokenLiquidityShifted: String! + """The percentage of liquidity that is locked.""" + lockedLiquidityPercentage: Float! + """A breakdown of how much and where liquidity is locked.""" + lockBreakdown: [LiquidityLockBreakdownForToken]! +} + +"""A breakdown of how much and where liquidity is locked.""" +type LiquidityLockBreakdownForToken { + """The protocol with which the liquidity is locked.""" + lockProtocol: LiquidityLockProtocol! + """The amount of liquidity locked in USD.""" + amountLockedUsd: String! + """The amount of tokens locked in the protocol.""" + amountLockedTokens: String! + """The amount of tokens locked in the protocol shifted by number of decimals the token has.""" + amountLockedTokensShifted: String! +} + +"""Metadata about a pair's liquidity. Includes locked liquidity data.""" +type LiquidityMetadata { + """Data about locked liquidity.""" + lockedLiquidity: LockedLiquidityData! + """Data about unlocked liquidity.""" + liquidity: LiquidityData! +} + +"""Data about liquidity in a pair.""" +type LiquidityData { + """The active liquidity in the pair.""" + active: String! + """The inactive liquidity in the pair.""" + inactive: String! +} + +"""Data about locked liquidity.""" +type LockedLiquidityData { + """The amount of active liquidity locked.""" + active: String! + """The amount of inactive liquidity locked.""" + inactive: String! + """A breakdown of how much and where liquidity is locked.""" + lockBreakdown: [LockBreakdown]! +} + +"""Breakdown of how much and where liquidity is locked.""" +type LockBreakdown { + """The protocol with which the liquidity is locked.""" + lockProtocol: LiquidityLockProtocol! + """The amount of active liquidity locked.""" + active: String! + """The amount of inactive liquidity locked.""" + inactive: String! +} + +"""Response returned by `onTokenLifecycleEventsCreated`.""" +type AddTokenLifecycleEventsOutput { + id: String! + events: [TokenLifecycleEvent!]! +} + +"""Event types for a token. Mint or Burn.""" +enum TokenLifecycleEventType { + MINT + BURN +} + +"""Events that occur during a token's lifecycle. Only Mint and Burn events right now.""" +type TokenLifecycleEvent { + """The token's contract address.""" + tokenAddress: String! + """The network ID that the token is deployed on.""" + networkId: Int! + """The hash of the block where the transaction occurred.""" + blockHash: String! + """The block number for the transaction.""" + blockNumber: Int! + """The ID of the event (`address:networkId`). For example, `0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2:1`.""" + id: String! + """The index of the log in the block.""" + logIndex: Int! + """The wallet address that performed the transaction.""" + maker: String + """The unix timestamp for when the transaction occurred.""" + timestamp: Int! + """The unique hash for the transaction.""" + transactionHash: String! + """The index of the transaction within the block.""" + transactionIndex: Int! + """The type of event.""" + eventType: TokenLifecycleEventType! + """The event data, depends on the type of event""" + data: TokenLifecycleEventData! +} + +"""Event data for a token's lifecycle.""" +union TokenLifecycleEventData = TokenBurnEventData | TokenMintEventData + +"""Token burn event data.""" +type TokenBurnEventData { + """The amount of tokens burned.""" + amount: String! + """The new total supply for the token.""" + totalSupply: String + """The new circulating supply for the token.""" + circulatingSupply: String +} + +"""Token mint event data.""" +type TokenMintEventData { + """The amount of tokens minted.""" + amount: String! + """The new total supply for the token.""" + totalSupply: String + """The new circulating supply for the token.""" + circulatingSupply: String +} + +"""A top trader for a token.""" +type TokenTopTrader { + """The wallet address of the trader.""" + walletAddress: String! + """The token address.""" + tokenAddress: String! + """The network ID.""" + networkId: Int! + """The amount of tokens bought.""" + tokenAmountBought: String! + """The amount of tokens sold.""" + tokenAmountSold: String! + """The amount of tokens bought in USD.""" + amountBoughtUsd: String! + """The amount of tokens sold in USD.""" + amountSoldUsd: String! + """The volume of tokens bought and sold in USD.""" + volumeUsd: String! + """The realized profit in USD.""" + realizedProfitUsd: String! + """The realized profit percentage.""" + realizedProfitPercentage: Float! + """The single token acquisition cost in USD.""" + singleTokenAcquisitionCostUsd: String! + """The number of buys.""" + buys: Int! + """The number of sells.""" + sells: Int! + """The token balance of the trader.""" + tokenBalance: String! + """The unix timestamp for the first transaction from this wallet.""" + firstTransactionAt: Int + """The unix timestamp for the last transaction from this wallet.""" + lastTransactionAt: Int! +} + +"""A time period used when calculating wallet trading data.""" +enum TradingPeriod { + DAY + WEEK + MONTH + YEAR +} + +"""A paginated list of top traders for a token.""" +type TokenTopTradersConnection { + """The token address.""" + tokenAddress: String! + """The network ID.""" + networkId: Int! + """The trading period.""" + tradingPeriod: TradingPeriod! + """The list of top traders.""" + items: [TokenTopTrader]! + """The offset of the first trader in the connection.""" + offset: Int +} + +"""Filters for a wallet.""" +input WalletFilters { + """The unix timestamp for the last transaction from this wallet.""" + lastTransactionAt: NumberFilter + """The unix timestamp for the first transaction from this wallet.""" + firstTransactionAt: NumberFilter + """Volume in USD in the past day""" + volumeUsd1d: NumberFilter + """Total volume in USD in the past day including all tokens""" + volumeUsdAll1d: NumberFilter + """Realized profit in USD in the past day""" + realizedProfitUsd1d: NumberFilter + """Average profit in USD per trade in the past day""" + averageProfitUsdPerTrade1d: NumberFilter + """Average swap amount in USD in the past day""" + averageSwapAmountUsd1d: NumberFilter + """Realized profit percentage in the past day""" + realizedProfitPercentage1d: NumberFilter + """Average hold period, in seconds, for positions sold during the past day. Estimated with average-cost accounting: sells realize the age of the sold cost basis, so unsold holdings do not affect the result. A lower bound, capped at the window length. Returns null when under $1 of cost basis was sold.""" + avgHoldPeriodSec1d: NumberFilter + """Number of swaps in the past day""" + swaps1d: NumberFilter + """Total number of swaps in the past day including all tokens""" + swapsAll1d: NumberFilter + """Number of unique tokens traded in the past day""" + uniqueTokens1d: NumberFilter + """Win rate in the past day""" + winRate1d: NumberFilter + """Volume in USD in the past week""" + volumeUsd1w: NumberFilter + """Total volume in USD in the past week including all tokens""" + volumeUsdAll1w: NumberFilter + """Realized profit in USD in the past week""" + realizedProfitUsd1w: NumberFilter + """Average profit in USD per trade in the past week""" + averageProfitUsdPerTrade1w: NumberFilter + """Average swap amount in USD in the past week""" + averageSwapAmountUsd1w: NumberFilter + """Realized profit percentage in the past week""" + realizedProfitPercentage1w: NumberFilter + """Average hold period, in seconds, for positions sold during the past week. Estimated with average-cost accounting: sells realize the age of the sold cost basis, so unsold holdings do not affect the result. A lower bound, capped at the window length. Returns null when under $1 of cost basis was sold.""" + avgHoldPeriodSec1w: NumberFilter + """Number of swaps in the past week""" + swaps1w: NumberFilter + """Total number of swaps in the past week including all tokens""" + swapsAll1w: NumberFilter + """Number of unique tokens traded in the past week""" + uniqueTokens1w: NumberFilter + """Win rate in the past week""" + winRate1w: NumberFilter + """Volume in USD in the past 30 days""" + volumeUsd30d: NumberFilter + """Total volume in USD in the past 30 days including all tokens""" + volumeUsdAll30d: NumberFilter + """Realized profit in USD in the past 30 days""" + realizedProfitUsd30d: NumberFilter + """Average profit in USD per trade in the past 30 days""" + averageProfitUsdPerTrade30d: NumberFilter + """Average swap amount in USD in the past 30 days""" + averageSwapAmountUsd30d: NumberFilter + """Realized profit percentage in the past 30 days""" + realizedProfitPercentage30d: NumberFilter + """Average hold period, in seconds, for positions sold during the past 30 days. Estimated with average-cost accounting: sells realize the age of the sold cost basis, so unsold holdings do not affect the result. A lower bound, capped at the window length. Returns null when under $1 of cost basis was sold.""" + avgHoldPeriodSec30d: NumberFilter + """Number of swaps in the past 30 days""" + swaps30d: NumberFilter + """Total number of swaps in the past 30 days including all tokens""" + swapsAll30d: NumberFilter + """Number of unique tokens traded in the past 30 days""" + uniqueTokens30d: NumberFilter + """Win rate in the past 30 days""" + winRate30d: NumberFilter + """Volume in USD in the past year""" + volumeUsd1y: NumberFilter + """Total volume in USD in the past year including all tokens""" + volumeUsdAll1y: NumberFilter + """Realized profit in USD in the past year""" + realizedProfitUsd1y: NumberFilter + """Average profit in USD per trade in the past year""" + averageProfitUsdPerTrade1y: NumberFilter + """Average swap amount in USD in the past year""" + averageSwapAmountUsd1y: NumberFilter + """Realized profit percentage in the past year""" + realizedProfitPercentage1y: NumberFilter + """Average hold period, in seconds, for positions sold during the past year. Estimated with average-cost accounting: sells realize the age of the sold cost basis, so unsold holdings do not affect the result. A lower bound, capped at the window length. Returns null when under $1 of cost basis was sold.""" + avgHoldPeriodSec1y: NumberFilter + """Number of swaps in the past year""" + swaps1y: NumberFilter + """Total number of swaps in the past year including all tokens""" + swapsAll1y: NumberFilter + """Number of unique tokens traded in the past year""" + uniqueTokens1y: NumberFilter @deprecated(reason: "uniqueTokens1y is no longer available as a distinct 1-year value; it now reflects the 30-day value (uniqueTokens30d).") + """Win rate in the past year""" + winRate1y: NumberFilter + """The scammer score for the wallet.""" + scammerScore: NumberFilter + """The bot score for the wallet.""" + botScore: NumberFilter + """Ethos credibility score (0-2800)""" + ethosScore: NumberFilter + """Number of tokens created by this wallet across all networks.""" + tokensCreatedCount: NumberFilter + """Number of launchpad tokens migrated (graduated) by this wallet across all networks.""" + tokensMigratedCount: NumberFilter + """Filter by wallet behavior category. Wallets with no category are treated as NORMIE.""" + categories: [WalletCategory!] + """The network ID to filter by.""" + networkId: Int + """The native token balance of the wallet. Can only be used in conjunction with `networkId` filter.""" + nativeTokenBalance: NumberFilter + """Filter by whether the wallet has a Twitter/X account""" + hasTwitter: Boolean + """Filter by whether the wallet has a Discord account""" + hasDiscord: Boolean + """Filter by whether the wallet has a Telegram account""" + hasTelegram: Boolean + """Filter by whether the wallet has a Farcaster account""" + hasFarcaster: Boolean + """Filter by whether the wallet has a GitHub account""" + hasGithub: Boolean + """Filter by whether the wallet has a display name set""" + hasDisplayName: Boolean + """Filter by whether the wallet has any linked social account""" + hasSocials: Boolean +} + +"""Attributes for a wallet ranking.""" +enum WalletRankingAttribute { + firstTransactionAt + lastTransactionAt + volumeUsd1d + volumeUsdAll1d + realizedProfitUsd1d + averageProfitUsdPerTrade1d + averageSwapAmountUsd1d + realizedProfitPercentage1d + avgHoldPeriodSec1d + swaps1d + swapsAll1d + uniqueTokens1d + winRate1d + volumeUsd1w + volumeUsdAll1w + realizedProfitUsd1w + averageProfitUsdPerTrade1w + averageSwapAmountUsd1w + realizedProfitPercentage1w + avgHoldPeriodSec1w + swaps1w + swapsAll1w + uniqueTokens1w + winRate1w + volumeUsd30d + volumeUsdAll30d + realizedProfitUsd30d + averageProfitUsdPerTrade30d + averageSwapAmountUsd30d + realizedProfitPercentage30d + avgHoldPeriodSec30d + swaps30d + swapsAll30d + uniqueTokens30d + winRate30d + volumeUsd1y + volumeUsdAll1y + realizedProfitUsd1y + averageProfitUsdPerTrade1y + averageSwapAmountUsd1y + realizedProfitPercentage1y + avgHoldPeriodSec1y + swaps1y + swapsAll1y + uniqueTokens1y @deprecated(reason: "uniqueTokens1y is no longer available as a distinct 1-year value; it now reflects the 30-day value (uniqueTokens30d).") + winRate1y + nativeTokenBalance + scammerScore + botScore + ethosScore +} + +"""A wallet ranking.""" +input WalletRanking { + """The attribute to rank wallets by.""" + attribute: WalletRankingAttribute + """The direction to apply to the ranking attribute.""" + direction: RankingDirection +} + +"""Filters for a wallet on a specific network.""" +input WalletNetworkFilters { + """The unix timestamp for the last transaction from this wallet.""" + lastTransactionAt: NumberFilter + """The unix timestamp for the first transaction from this wallet.""" + firstTransactionAt: NumberFilter + """Volume in USD in the past day""" + volumeUsd1d: NumberFilter + """Total volume in USD in the past day including all tokens""" + volumeUsdAll1d: NumberFilter + """Realized profit in USD in the past day""" + realizedProfitUsd1d: NumberFilter + """Average profit in USD per trade in the past day""" + averageProfitUsdPerTrade1d: NumberFilter + """Average swap amount in USD in the past day""" + averageSwapAmountUsd1d: NumberFilter + """Realized profit percentage in the past day""" + realizedProfitPercentage1d: NumberFilter + """Average hold period, in seconds, for positions sold during the past day. Estimated with average-cost accounting: sells realize the age of the sold cost basis, so unsold holdings do not affect the result. A lower bound, capped at the window length. Returns null when under $1 of cost basis was sold.""" + avgHoldPeriodSec1d: NumberFilter + """Number of swaps in the past day""" + swaps1d: NumberFilter + """Total number of swaps in the past day including all tokens""" + swapsAll1d: NumberFilter + """Number of unique tokens traded in the past day""" + uniqueTokens1d: NumberFilter + """Win rate in the past day""" + winRate1d: NumberFilter + """Volume in USD in the past week""" + volumeUsd1w: NumberFilter + """Total volume in USD in the past week including all tokens""" + volumeUsdAll1w: NumberFilter + """Realized profit in USD in the past week""" + realizedProfitUsd1w: NumberFilter + """Average profit in USD per trade in the past week""" + averageProfitUsdPerTrade1w: NumberFilter + """Average swap amount in USD in the past week""" + averageSwapAmountUsd1w: NumberFilter + """Realized profit percentage in the past week""" + realizedProfitPercentage1w: NumberFilter + """Average hold period, in seconds, for positions sold during the past week. Estimated with average-cost accounting: sells realize the age of the sold cost basis, so unsold holdings do not affect the result. A lower bound, capped at the window length. Returns null when under $1 of cost basis was sold.""" + avgHoldPeriodSec1w: NumberFilter + """Number of swaps in the past week""" + swaps1w: NumberFilter + """Total number of swaps in the past week including all tokens""" + swapsAll1w: NumberFilter + """Number of unique tokens traded in the past week""" + uniqueTokens1w: NumberFilter + """Win rate in the past week""" + winRate1w: NumberFilter + """Volume in USD in the past 30 days""" + volumeUsd30d: NumberFilter + """Total volume in USD in the past 30 days including all tokens""" + volumeUsdAll30d: NumberFilter + """Realized profit in USD in the past 30 days""" + realizedProfitUsd30d: NumberFilter + """Average profit in USD per trade in the past 30 days""" + averageProfitUsdPerTrade30d: NumberFilter + """Average swap amount in USD in the past 30 days""" + averageSwapAmountUsd30d: NumberFilter + """Realized profit percentage in the past 30 days""" + realizedProfitPercentage30d: NumberFilter + """Average hold period, in seconds, for positions sold during the past 30 days. Estimated with average-cost accounting: sells realize the age of the sold cost basis, so unsold holdings do not affect the result. A lower bound, capped at the window length. Returns null when under $1 of cost basis was sold.""" + avgHoldPeriodSec30d: NumberFilter + """Number of swaps in the past 30 days""" + swaps30d: NumberFilter + """Total number of swaps in the past 30 days including all tokens""" + swapsAll30d: NumberFilter + """Number of unique tokens traded in the past 30 days""" + uniqueTokens30d: NumberFilter + """Win rate in the past 30 days""" + winRate30d: NumberFilter + """Volume in USD in the past year""" + volumeUsd1y: NumberFilter + """Total volume in USD in the past year including all tokens""" + volumeUsdAll1y: NumberFilter + """Realized profit in USD in the past year""" + realizedProfitUsd1y: NumberFilter + """Average profit in USD per trade in the past year""" + averageProfitUsdPerTrade1y: NumberFilter + """Average swap amount in USD in the past year""" + averageSwapAmountUsd1y: NumberFilter + """Realized profit percentage in the past year""" + realizedProfitPercentage1y: NumberFilter + """Average hold period, in seconds, for positions sold during the past year. Estimated with average-cost accounting: sells realize the age of the sold cost basis, so unsold holdings do not affect the result. A lower bound, capped at the window length. Returns null when under $1 of cost basis was sold.""" + avgHoldPeriodSec1y: NumberFilter + """Number of swaps in the past year""" + swaps1y: NumberFilter + """Total number of swaps in the past year including all tokens""" + swapsAll1y: NumberFilter + """Number of unique tokens traded in the past year""" + uniqueTokens1y: NumberFilter @deprecated(reason: "uniqueTokens1y is no longer available as a distinct 1-year value; it now reflects the 30-day value (uniqueTokens30d).") + """Win rate in the past year""" + winRate1y: NumberFilter + """The native token balance of the wallet.""" + nativeTokenBalance: NumberFilter + """The scammer score for the wallet. Indicates the likelihood of the wallet being a scammer. Zero being not a scammer and 100 being a definite scammer.""" + scammerScore: NumberFilter + """The bot score for the wallet. Indicates the likelihood of the wallet being a bot. Zero being not a bot and 100 being a definite bot.""" + botScore: NumberFilter + """Ethos credibility score (0-2800)""" + ethosScore: NumberFilter + """Filter by whether the wallet has a Twitter/X account""" + hasTwitter: Boolean + """Filter by whether the wallet has a Discord account""" + hasDiscord: Boolean + """Filter by whether the wallet has a Telegram account""" + hasTelegram: Boolean + """Filter by whether the wallet has a Farcaster account""" + hasFarcaster: Boolean + """Filter by whether the wallet has a GitHub account""" + hasGithub: Boolean + """Filter by whether the wallet has a display name set""" + hasDisplayName: Boolean + """Filter by whether the wallet has any linked social account""" + hasSocials: Boolean +} + +"""Attributes for a wallet ranking on a specific network.""" +enum WalletNetworkRankingAttribute { + firstTransactionAt + lastTransactionAt + volumeUsd1d + volumeUsdAll1d + realizedProfitUsd1d + averageProfitUsdPerTrade1d + averageSwapAmountUsd1d + realizedProfitPercentage1d + """Average hold period, in seconds, for positions sold during the past day.""" + avgHoldPeriodSec1d + swaps1d + swapsAll1d + uniqueTokens1d + winRate1d + volumeUsd1w + volumeUsdAll1w + realizedProfitUsd1w + averageProfitUsdPerTrade1w + averageSwapAmountUsd1w + realizedProfitPercentage1w + """Average hold period, in seconds, for positions sold during the past week.""" + avgHoldPeriodSec1w + swaps1w + swapsAll1w + uniqueTokens1w + winRate1w + volumeUsd30d + volumeUsdAll30d + realizedProfitUsd30d + averageProfitUsdPerTrade30d + averageSwapAmountUsd30d + realizedProfitPercentage30d + """Average hold period, in seconds, for positions sold during the past 30 days.""" + avgHoldPeriodSec30d + swaps30d + swapsAll30d + uniqueTokens30d + winRate30d + volumeUsd1y + volumeUsdAll1y + realizedProfitUsd1y + averageProfitUsdPerTrade1y + averageSwapAmountUsd1y + realizedProfitPercentage1y + """Average hold period, in seconds, for positions sold during the past year.""" + avgHoldPeriodSec1y + swaps1y + swapsAll1y + uniqueTokens1y @deprecated(reason: "uniqueTokens1y is no longer available as a distinct 1-year value; it now reflects the 30-day value (uniqueTokens30d).") + winRate1y + nativeTokenBalance + scammerScore + botScore + ethosScore +} + +"""A wallet ranking on a specific network.""" +input WalletNetworkRanking { + """The attribute to rank wallets by.""" + attribute: WalletNetworkRankingAttribute + """The direction to apply to the ranking attribute.""" + direction: RankingDirection +} + +"""Attributes for a wallet ranking on a specific token.""" +enum WalletTokenRankingAttribute { + """The first transaction timestamp""" + firstTransactionAt + """The last transaction timestamp""" + lastTransactionAt + """Token amount bought in the past day""" + tokenAmountBought1d + """Token amount sold in the past day""" + tokenAmountSold1d + """Amount bought in USD in the past day""" + amountBoughtUsd1d + """Amount sold in USD in the past day""" + amountSoldUsd1d + """Realized profit in USD in the past day""" + realizedProfitUsd1d + """Realized profit percentage in the past day""" + realizedProfitPercentage1d + """Average hold period, in seconds, for positions sold during the past day.""" + avgHoldPeriodSec1d + """Number of buys in the past day""" + buys1d + """Number of sells in the past day""" + sells1d + """Token amount bought in the past week""" + tokenAmountBought1w + """Token amount sold in the past week""" + tokenAmountSold1w + """Amount bought in USD in the past week""" + amountBoughtUsd1w + """Amount sold in USD in the past week""" + amountSoldUsd1w + """Realized profit in USD in the past week""" + realizedProfitUsd1w + """Realized profit percentage in the past week""" + realizedProfitPercentage1w + """Average hold period, in seconds, for positions sold during the past week.""" + avgHoldPeriodSec1w + """Number of buys in the past week""" + buys1w + """Number of sells in the past week""" + sells1w + """Token amount bought in the past 30 days""" + tokenAmountBought30d + """Token amount sold in the past 30 days""" + tokenAmountSold30d + """Amount bought in USD in the past 30 days""" + amountBoughtUsd30d + """Amount sold in USD in the past 30 days""" + amountSoldUsd30d + """Realized profit in USD in the past 30 days""" + realizedProfitUsd30d + """Realized profit percentage in the past 30 days""" + realizedProfitPercentage30d + """Average hold period, in seconds, for positions sold during the past 30 days.""" + avgHoldPeriodSec30d + """Number of buys in the past 30 days""" + buys30d + """Number of sells in the past 30 days""" + sells30d + """Token amount bought in the past year""" + tokenAmountBought1y + """Token amount sold in the past year""" + tokenAmountSold1y + """Amount bought in USD in the past year""" + amountBoughtUsd1y + """Amount sold in USD in the past year""" + amountSoldUsd1y + """Realized profit in USD in the past year""" + realizedProfitUsd1y + """Realized profit percentage in the past year""" + realizedProfitPercentage1y + """Average hold period, in seconds, for positions sold during the past year.""" + avgHoldPeriodSec1y + """Number of buys in the past year""" + buys1y + """Number of sells in the past year""" + sells1y + """The total balance of tokens held by the user, reflecting the most recent update to the record. This balance includes all tokens, even those transferred in through unsupported methods or DEXs that are not tracked by our system.""" + tokenBalance + """The total balance of tokens that the user has bought or sold. This value does not include tokens acquired through external transfers or unsupported methods.""" + purchasedTokenBalance + """Token acquisition cost in USD""" + tokenAcquisitionCostUsd + """The scammer score for the wallet.""" + scammerScore + """The bot score for the wallet.""" + botScore +} + +"""A wallet ranking on a specific token.""" +input WalletTokenRanking { + """The attribute to rank wallets by""" + attribute: WalletTokenRankingAttribute! + """The direction to apply to the ranking attribute""" + direction: RankingDirection! +} + +"""A range for a wallet token filter.""" +input WalletTokenFilterRange { + """The minimum value (inclusive)""" + min: String + """The maximum value (inclusive)""" + max: String +} + +"""Filters for a wallet on a specific token.""" +input WalletTokenFilters { + """Filter by last transaction timestamp""" + lastTransactionAt: WalletTokenFilterRange + """Filter by first transaction timestamp""" + firstTransactionAt: WalletTokenFilterRange + """Filter by token amount bought in the past day""" + tokenAmountBought1d: WalletTokenFilterRange + """Filter by token amount sold in the past day""" + tokenAmountSold1d: WalletTokenFilterRange + """Filter by amount bought in USD in the past day""" + amountBoughtUsd1d: WalletTokenFilterRange + """Filter by amount sold in USD in the past day""" + amountSoldUsd1d: WalletTokenFilterRange + """Filter by realized profit in USD in the past day""" + realizedProfitUsd1d: WalletTokenFilterRange + """Filter by realized profit percentage in the past day""" + realizedProfitPercentage1d: WalletTokenFilterRange + """Average hold period, in seconds, for positions sold during the past day. Estimated with average-cost accounting: sells realize the age of the sold cost basis, so unsold holdings do not affect the result. A lower bound, capped at the window length. Returns null when under $1 of cost basis was sold.""" + avgHoldPeriodSec1d: WalletTokenFilterRange + """Filter by number of buys in the past day""" + buys1d: WalletTokenFilterRange + """Filter by number of sells in the past day""" + sells1d: WalletTokenFilterRange + """Filter by token amount bought in the past week""" + tokenAmountBought1w: WalletTokenFilterRange + """Filter by token amount sold in the past week""" + tokenAmountSold1w: WalletTokenFilterRange + """Filter by amount bought in USD in the past week""" + amountBoughtUsd1w: WalletTokenFilterRange + """Filter by amount sold in USD in the past week""" + amountSoldUsd1w: WalletTokenFilterRange + """Filter by realized profit in USD in the past week""" + realizedProfitUsd1w: WalletTokenFilterRange + """Filter by realized profit percentage in the past week""" + realizedProfitPercentage1w: WalletTokenFilterRange + """Average hold period, in seconds, for positions sold during the past week. Estimated with average-cost accounting: sells realize the age of the sold cost basis, so unsold holdings do not affect the result. A lower bound, capped at the window length. Returns null when under $1 of cost basis was sold.""" + avgHoldPeriodSec1w: WalletTokenFilterRange + """Filter by number of buys in the past week""" + buys1w: WalletTokenFilterRange + """Filter by number of sells in the past week""" + sells1w: WalletTokenFilterRange + """Filter by token amount bought in the past 30 days""" + tokenAmountBought30d: WalletTokenFilterRange + """Filter by token amount sold in the past 30 days""" + tokenAmountSold30d: WalletTokenFilterRange + """Filter by amount bought in USD in the past 30 days""" + amountBoughtUsd30d: WalletTokenFilterRange + """Filter by amount sold in USD in the past 30 days""" + amountSoldUsd30d: WalletTokenFilterRange + """Filter by realized profit in USD in the past 30 days""" + realizedProfitUsd30d: WalletTokenFilterRange + """Filter by realized profit percentage in the past 30 days""" + realizedProfitPercentage30d: WalletTokenFilterRange + """Average hold period, in seconds, for positions sold during the past 30 days. Estimated with average-cost accounting: sells realize the age of the sold cost basis, so unsold holdings do not affect the result. A lower bound, capped at the window length. Returns null when under $1 of cost basis was sold.""" + avgHoldPeriodSec30d: WalletTokenFilterRange + """Filter by number of buys in the past 30 days""" + buys30d: WalletTokenFilterRange + """Filter by number of sells in the past 30 days""" + sells30d: WalletTokenFilterRange + """Filter by token amount bought in the past year""" + tokenAmountBought1y: WalletTokenFilterRange + """Filter by token amount sold in the past year""" + tokenAmountSold1y: WalletTokenFilterRange + """Filter by amount bought in USD in the past year""" + amountBoughtUsd1y: WalletTokenFilterRange + """Filter by amount sold in USD in the past year""" + amountSoldUsd1y: WalletTokenFilterRange + """Filter by realized profit in USD in the past year""" + realizedProfitUsd1y: WalletTokenFilterRange + """Filter by realized profit percentage in the past year""" + realizedProfitPercentage1y: WalletTokenFilterRange + """Average hold period, in seconds, for positions sold during the past year. Estimated with average-cost accounting: sells realize the age of the sold cost basis, so unsold holdings do not affect the result. A lower bound, capped at the window length. Returns null when under $1 of cost basis was sold.""" + avgHoldPeriodSec1y: WalletTokenFilterRange + """Filter by number of buys in the past year""" + buys1y: WalletTokenFilterRange + """Filter by number of sells in the past year""" + sells1y: WalletTokenFilterRange + """Filter by token balance""" + tokenBalance: WalletTokenFilterRange + """Filter by purchased token balance""" + purchasedTokenBalance: WalletTokenFilterRange + """Filter by token acquisition cost in USD""" + tokenAcquisitionCostUsd: WalletTokenFilterRange + """Filter by scammer score""" + scammerScore: WalletTokenFilterRange + """Filter by bot score""" + botScore: WalletTokenFilterRange +} + +"""Filters for a wallet on a specific token.""" +input WalletTokenFiltersV2 { + """Filter by last transaction timestamp""" + lastTransactionAt: NumberFilter + """Filter by first transaction timestamp""" + firstTransactionAt: NumberFilter + """Filter by token amount bought in the past day""" + tokenAmountBought1d: NumberFilter + """Filter by token amount sold in the past day""" + tokenAmountSold1d: NumberFilter + """Filter by amount bought in USD in the past day""" + amountBoughtUsd1d: NumberFilter + """Filter by amount sold in USD in the past day""" + amountSoldUsd1d: NumberFilter + """Filter by realized profit in USD in the past day""" + realizedProfitUsd1d: NumberFilter + """Filter by realized profit percentage in the past day""" + realizedProfitPercentage1d: NumberFilter + """Average hold period, in seconds, for positions sold during the past day. Estimated with average-cost accounting: sells realize the age of the sold cost basis, so unsold holdings do not affect the result. A lower bound, capped at the window length. Returns null when under $1 of cost basis was sold.""" + avgHoldPeriodSec1d: NumberFilter + """Filter by number of buys in the past day""" + buys1d: NumberFilter + """Filter by number of sells in the past day""" + sells1d: NumberFilter + """Filter by token amount bought in the past week""" + tokenAmountBought1w: NumberFilter + """Filter by token amount sold in the past week""" + tokenAmountSold1w: NumberFilter + """Filter by amount bought in USD in the past week""" + amountBoughtUsd1w: NumberFilter + """Filter by amount sold in USD in the past week""" + amountSoldUsd1w: NumberFilter + """Filter by realized profit in USD in the past week""" + realizedProfitUsd1w: NumberFilter + """Filter by realized profit percentage in the past week""" + realizedProfitPercentage1w: NumberFilter + """Average hold period, in seconds, for positions sold during the past week. Estimated with average-cost accounting: sells realize the age of the sold cost basis, so unsold holdings do not affect the result. A lower bound, capped at the window length. Returns null when under $1 of cost basis was sold.""" + avgHoldPeriodSec1w: NumberFilter + """Filter by number of buys in the past week""" + buys1w: NumberFilter + """Filter by number of sells in the past week""" + sells1w: NumberFilter + """Filter by token amount bought in the past 30 days""" + tokenAmountBought30d: NumberFilter + """Filter by token amount sold in the past 30 days""" + tokenAmountSold30d: NumberFilter + """Filter by amount bought in USD in the past 30 days""" + amountBoughtUsd30d: NumberFilter + """Filter by amount sold in USD in the past 30 days""" + amountSoldUsd30d: NumberFilter + """Filter by realized profit in USD in the past 30 days""" + realizedProfitUsd30d: NumberFilter + """Filter by realized profit percentage in the past 30 days""" + realizedProfitPercentage30d: NumberFilter + """Average hold period, in seconds, for positions sold during the past 30 days. Estimated with average-cost accounting: sells realize the age of the sold cost basis, so unsold holdings do not affect the result. A lower bound, capped at the window length. Returns null when under $1 of cost basis was sold.""" + avgHoldPeriodSec30d: NumberFilter + """Filter by number of buys in the past 30 days""" + buys30d: NumberFilter + """Filter by number of sells in the past 30 days""" + sells30d: NumberFilter + """Filter by token amount bought in the past year""" + tokenAmountBought1y: NumberFilter + """Filter by token amount sold in the past year""" + tokenAmountSold1y: NumberFilter + """Filter by amount bought in USD in the past year""" + amountBoughtUsd1y: NumberFilter + """Filter by amount sold in USD in the past year""" + amountSoldUsd1y: NumberFilter + """Filter by realized profit in USD in the past year""" + realizedProfitUsd1y: NumberFilter + """Filter by realized profit percentage in the past year""" + realizedProfitPercentage1y: NumberFilter + """Average hold period, in seconds, for positions sold during the past year. Estimated with average-cost accounting: sells realize the age of the sold cost basis, so unsold holdings do not affect the result. A lower bound, capped at the window length. Returns null when under $1 of cost basis was sold.""" + avgHoldPeriodSec1y: NumberFilter + """Filter by number of buys in the past year""" + buys1y: NumberFilter + """Filter by number of sells in the past year""" + sells1y: NumberFilter + """Filter by token balance""" + tokenBalance: NumberFilter + """Filter by purchased token balance""" + purchasedTokenBalance: NumberFilter + """Filter by token acquisition cost in USD""" + tokenAcquisitionCostUsd: NumberFilter + """Filter by scammer score""" + scammerScore: NumberFilter + """Filter by bot score""" + botScore: NumberFilter +} + +"""A connection of wallets matching a filter.""" +type WalletFilterConnection { + """The list of wallets matching the filter parameters.""" + results: [WalletFilterResult!]! + """The number of wallets returned.""" + count: Int! + """Where in the list the server started when returning items.""" + offset: Int! +} + +"""A wallet matching a filter on a specific network.""" +type NetworkWalletFilterResult { + """The wallet address""" + address: String! + """The network ID of the wallet""" + networkId: Int! + """The unix timestamp for the first transaction from this wallet""" + firstTransactionAt: Int + """The unix timestamp for the last transaction from this wallet""" + lastTransactionAt: Int! + """The native token balance of the wallet""" + nativeTokenBalance: String! + """The labels associated with the wallet""" + labels: [String!]! + """Manual or proposal-derived identity vocabulary (e.g. WHALE, KOL). Distinct from behavioral `labels`.""" + identityLabels: [String!] + """Volume in USD in the past day""" + volumeUsd1d: String! + """Total volume in USD in the past day including all tokens""" + volumeUsdAll1d: String! + """Realized profit in USD in the past day""" + realizedProfitUsd1d: String! + """Average profit in USD per trade in the past day""" + averageProfitUsdPerTrade1d: String! + """Average swap amount in USD in the past day""" + averageSwapAmountUsd1d: String! + """Realized profit percentage in the past day""" + realizedProfitPercentage1d: Float! + """Average hold period, in seconds, for positions sold during the past day. Estimated with average-cost accounting: sells realize the age of the sold cost basis, so unsold holdings do not affect the result. A lower bound, capped at the window length. Returns null when under $1 of cost basis was sold.""" + avgHoldPeriodSec1d: Float + """Number of swaps in the past day""" + swaps1d: Int! + """Total number of swaps in the past day including all tokens""" + swapsAll1d: Int! + """Number of unique tokens traded in the past day""" + uniqueTokens1d: Int! + """Win rate in the past day""" + winRate1d: Float! + """Volume in USD in the past week""" + volumeUsd1w: String! + """Total volume in USD in the past week including all tokens""" + volumeUsdAll1w: String! + """Realized profit in USD in the past week""" + realizedProfitUsd1w: String! + """Average profit in USD per trade in the past week""" + averageProfitUsdPerTrade1w: String! + """Average swap amount in USD in the past week""" + averageSwapAmountUsd1w: String! + """Realized profit percentage in the past week""" + realizedProfitPercentage1w: Float! + """Average hold period, in seconds, for positions sold during the past week. Estimated with average-cost accounting: sells realize the age of the sold cost basis, so unsold holdings do not affect the result. A lower bound, capped at the window length. Returns null when under $1 of cost basis was sold.""" + avgHoldPeriodSec1w: Float + """Number of swaps in the past week""" + swaps1w: Int! + """Total number of swaps in the past week including all tokens""" + swapsAll1w: Int! + """Number of unique tokens traded in the past week""" + uniqueTokens1w: Int! + """Win rate in the past week""" + winRate1w: Float! + """Volume in USD in the past 30 days""" + volumeUsd30d: String! + """Total volume in USD in the past 30 days including all tokens""" + volumeUsdAll30d: String! + """Realized profit in USD in the past 30 days""" + realizedProfitUsd30d: String! + """Average profit in USD per trade in the past 30 days""" + averageProfitUsdPerTrade30d: String! + """Average swap amount in USD in the past 30 days""" + averageSwapAmountUsd30d: String! + """Realized profit percentage in the past 30 days""" + realizedProfitPercentage30d: Float! + """Average hold period, in seconds, for positions sold during the past 30 days. Estimated with average-cost accounting: sells realize the age of the sold cost basis, so unsold holdings do not affect the result. A lower bound, capped at the window length. Returns null when under $1 of cost basis was sold.""" + avgHoldPeriodSec30d: Float + """Number of swaps in the past 30 days""" + swaps30d: Int! + """Total number of swaps in the past 30 days including all tokens""" + swapsAll30d: Int! + """Number of unique tokens traded in the past 30 days""" + uniqueTokens30d: Int! + """Win rate in the past 30 days""" + winRate30d: Float! + """Volume in USD in the past year""" + volumeUsd1y: String! + """Total volume in USD in the past year including all tokens""" + volumeUsdAll1y: String! + """Realized profit in USD in the past year""" + realizedProfitUsd1y: String! + """Average profit in USD per trade in the past year""" + averageProfitUsdPerTrade1y: String! + """Average swap amount in USD in the past year""" + averageSwapAmountUsd1y: String! + """Realized profit percentage in the past year""" + realizedProfitPercentage1y: Float! + """Average hold period, in seconds, for positions sold during the past year. Estimated with average-cost accounting: sells realize the age of the sold cost basis, so unsold holdings do not affect the result. A lower bound, capped at the window length. Returns null when under $1 of cost basis was sold.""" + avgHoldPeriodSec1y: Float + """Number of swaps in the past year""" + swaps1y: Int! + """Total number of swaps in the past year including all tokens""" + swapsAll1y: Int! + """Number of unique tokens traded in the past year""" + uniqueTokens1y: Int! @deprecated(reason: "uniqueTokens1y is no longer available as a distinct 1-year value; it now reflects the 30-day value (uniqueTokens30d).") + """Win rate in the past year""" + winRate1y: Float! + """The scammer score for the wallet.""" + scammerScore: Int + """The bot score for the wallet.""" + botScore: Int + """The backfill state of the wallet.""" + backfillState: WalletAggregateBackfillState + """The wallet identity and profile data""" + wallet: Wallet +} + +"""A connection of wallets matching a filter on a specific network.""" +type NetworkWalletFilterConnection { + """The list of wallets matching the filter parameters.""" + results: [NetworkWalletFilterResult!]! + """The number of wallets returned.""" + count: Int! + """Where in the list the server started when returning items.""" + offset: Int! +} + +"""A connection of wallets matching a filter on a specific token.""" +type TokenWalletFilterConnection { + """The list of wallets matching the filter parameters.""" + results: [TokenWalletFilterResult!]! + """The number of wallets returned.""" + count: Int! + """Where in the list the server started when returning items.""" + offset: Int! +} + +"""The result for filtering wallets for a token.""" +type TokenWalletFilterResult { + """The wallet address""" + address: String! + """The token address""" + tokenAddress: String! + """The network ID""" + networkId: Int! + """The unix timestamp for the first transaction from this wallet""" + firstTransactionAt: Int + """The unix timestamp for the last transaction from this wallet""" + lastTransactionAt: Int! + """The labels associated with the wallet""" + labels: [String!]! + """Token amount bought in the past day""" + tokenAmountBought1d: String! + """Token amount sold in the past day""" + tokenAmountSold1d: String! + """Token amount sold all in the past day""" + tokenAmountSoldAll1d: String! + """Amount bought in USD in the past day""" + amountBoughtUsd1d: String! + """Amount sold in USD in the past day""" + amountSoldUsd1d: String! + """Amount sold USD all in the past day""" + amountSoldUsdAll1d: String! + """Realized profit in USD in the past day""" + realizedProfitUsd1d: String! + """Realized profit percentage in the past day""" + realizedProfitPercentage1d: Float! + """Average hold period, in seconds, for positions sold during the past day. Estimated with average-cost accounting: sells realize the age of the sold cost basis, so unsold holdings do not affect the result. A lower bound, capped at the window length. Returns null when under $1 of cost basis was sold.""" + avgHoldPeriodSec1d: Float + """Number of buys in the past day""" + buys1d: Int! + """Number of sells in the past day""" + sells1d: Int! + """Number of sells all in the past day""" + sellsAll1d: Int! + """Token amount bought in the past week""" + tokenAmountBought1w: String! + """Token amount sold in the past week""" + tokenAmountSold1w: String! + """Token amount sold all in the past week""" + tokenAmountSoldAll1w: String! + """Amount bought in USD in the past week""" + amountBoughtUsd1w: String! + """Amount sold in USD in the past week""" + amountSoldUsd1w: String! + """Amount sold USD all in the past week""" + amountSoldUsdAll1w: String! + """Realized profit in USD in the past week""" + realizedProfitUsd1w: String! + """Realized profit percentage in the past week""" + realizedProfitPercentage1w: Float! + """Average hold period, in seconds, for positions sold during the past week. Estimated with average-cost accounting: sells realize the age of the sold cost basis, so unsold holdings do not affect the result. A lower bound, capped at the window length. Returns null when under $1 of cost basis was sold.""" + avgHoldPeriodSec1w: Float + """Number of buys in the past week""" + buys1w: Int! + """Number of sells in the past week""" + sells1w: Int! + """Number of sells all in the past week""" + sellsAll1w: Int! + """Token amount bought in the past 30 days""" + tokenAmountBought30d: String! + """Token amount sold in the past 30 days""" + tokenAmountSold30d: String! + """Token amount sold all in the past 30 days""" + tokenAmountSoldAll30d: String! + """Amount bought in USD in the past 30 days""" + amountBoughtUsd30d: String! + """Amount sold in USD in the past 30 days""" + amountSoldUsd30d: String! + """Amount sold USD all in the past 30 days""" + amountSoldUsdAll30d: String! + """Realized profit in USD in the past 30 days""" + realizedProfitUsd30d: String! + """Realized profit percentage in the past 30 days""" + realizedProfitPercentage30d: Float! + """Average hold period, in seconds, for positions sold during the past 30 days. Estimated with average-cost accounting: sells realize the age of the sold cost basis, so unsold holdings do not affect the result. A lower bound, capped at the window length. Returns null when under $1 of cost basis was sold.""" + avgHoldPeriodSec30d: Float + """Number of buys in the past 30 days""" + buys30d: Int! + """Number of sells in the past 30 days""" + sells30d: Int! + """Number of sells all in the past 30 days""" + sellsAll30d: Int! + """Token amount bought in the past year""" + tokenAmountBought1y: String! + """Token amount sold in the past year""" + tokenAmountSold1y: String! + """Token amount sold all in the past year""" + tokenAmountSoldAll1y: String! + """Amount bought in USD in the past year""" + amountBoughtUsd1y: String! + """Amount sold in USD in the past year""" + amountSoldUsd1y: String! + """Amount sold USD all in the past year""" + amountSoldUsdAll1y: String! + """Realized profit in USD in the past year""" + realizedProfitUsd1y: String! + """Realized profit percentage in the past year""" + realizedProfitPercentage1y: Float! + """Average hold period, in seconds, for positions sold during the past year. Estimated with average-cost accounting: sells realize the age of the sold cost basis, so unsold holdings do not affect the result. A lower bound, capped at the window length. Returns null when under $1 of cost basis was sold.""" + avgHoldPeriodSec1y: Float + """Number of buys in the past year""" + buys1y: Int! + """Number of sells in the past year""" + sells1y: Int! + """Number of sells all in the past year""" + sellsAll1y: Int! + """The token acquisition cost in USD""" + tokenAcquisitionCostUsd: String! + """The total balance of tokens that the user has bought or sold. This value does not include tokens acquired through external transfers or unsupported methods.""" + purchasedTokenBalance: String! + """The total balance of tokens held by the user, reflecting the most recent update to the record. This balance includes all tokens, even those transferred in through unsupported methods or DEXs that are not tracked by our system. This value does not update with every transfer and can be slightly stale. Use tokenBalanceLive for live data.""" + tokenBalance: String! + """The current token balance in the wallet. This value is updated with every transfer and is therefore more accurate than tokenBalance.""" + tokenBalanceLive: String + """The current USD value of the token balance.""" + tokenBalanceLiveUsd: String + """The token metadata""" + token: EnhancedToken! + """The scammer score for the wallet.""" + scammerScore: Int + """The bot score for the wallet.""" + botScore: Int + """The backfill state of the wallet.""" + backfillState: WalletAggregateBackfillState +} + +"""Input arguments for the `tokenTopTraders` query.""" +input TokenTopTradersInput { + """The token address""" + tokenAddress: String! + """The network ID""" + networkId: Int! + """The trading period""" + tradingPeriod: TradingPeriod! + """The number of traders to return""" + limit: Int + """Where in the list the server started when returning items""" + offset: Int +} + +"""The input for filtering wallets.""" +input FilterWalletsInput { + """A set of filters to apply.""" + filters: WalletFilters + """A list of wallet addresses to filter by.""" + wallets: [String] + """A phrase to search for. Matches wallet address, display name, or social usernames (Twitter, Discord, Telegram, Farcaster, GitHub).""" + phrase: String + """Exclude wallets with these labels. See [`WalletLabel`](/api-reference/enums/walletlabel) for possible values.""" + excludeLabels: [String] + """Include wallets with these labels. See [`WalletLabel`](/api-reference/enums/walletlabel) for possible values.""" + includeLabels: [String] + """A list of ranking attributes to apply.""" + rankings: [WalletRanking] + """The maximum number of wallets to return.""" + limit: Int + """Where in the list the server should start when returning items. Use `count`+`offset` from the previous query to request the next page of results.""" + offset: Int +} + +"""The input for filtering wallets for a network.""" +input FilterNetworkWalletsInput { + """The network ID to filter wallets for""" + networkId: Int! + """A set of filters to apply.""" + filters: WalletNetworkFilters + """A list of wallet addresses to filter by.""" + wallets: [String] + """Exclude wallets with these labels. See [`WalletLabel`](/api-reference/enums/walletlabel) for possible values.""" + excludeLabels: [String] + """Include wallets with these labels. See [`WalletLabel`](/api-reference/enums/walletlabel) for possible values.""" + includeLabels: [String] + """A list of ranking attributes to apply.""" + rankings: [WalletNetworkRanking] + """The maximum number of wallets to return.""" + limit: Int + """Where in the list the server should start when returning items. Use `count`+`offset` from the previous query to request the next page of results.""" + offset: Int +} + +"""The input for filtering wallets for a token.""" +input FilterTokenWalletsInput { + """The ID of the token to filter wallets for""" + tokenId: String @deprecated(reason: "Use tokenIds instead") + """The IDs of the tokens to filter wallets for. Maximum 50 tokenIds. If you provide more than one tokenId, you must also provide at least one walletAddress in the wallets list.""" + tokenIds: [String] + """The wallet address to filter wallets for""" + walletAddress: String @deprecated(reason: "Use wallets instead") + """A list of wallet addresses to filter wallets for""" + wallets: [String] + """The network ID to filter wallets for""" + networkId: Int + """A set of filters to apply""" + filters: WalletTokenFilters @deprecated(reason: "Use filtersV2 instead") + """A set of filters to apply""" + filtersV2: WalletTokenFiltersV2 + """A phrase to search for in token symbol and name""" + phrase: String + """A list of ranking attributes to apply""" + rankings: [WalletTokenRanking] + """Exclude wallets with these labels. See [`WalletLabel`](/api-reference/enums/walletlabel) for possible values.""" + excludeLabels: [String] + """Include wallets with these labels. See [`WalletLabel`](/api-reference/enums/walletlabel) for possible values.""" + includeLabels: [String] + """The maximum number of wallets to return""" + limit: Int + """Where in the list the server should start when returning items""" + offset: Int +} + +"""The input for detailed wallet stats.""" +input DetailedWalletStatsInput { + """The wallet address""" + walletAddress: String! + """The network ID""" + networkId: Int + """The timestamp to get stats for""" + timestamp: Int + """Whether to include network breakdown stats""" + includeNetworkBreakdown: Boolean +} + +"""The period the wallet stats are for.""" +enum WalletStatsDuration { + year1 + day30 + week1 + day1 +} + +"""The currency stats for a wallet over a time window.""" +type WindowedDetailedCurrencyWalletStats { + """The volume in USD""" + volumeUsd: String! + """The volume in USD including tokens sold for which we do not have a price""" + volumeUsdAll: String! + """The cost of tokens held in the wallet""" + heldTokenAcquisitionCostUsd: String! + """The cost of tokens sold during the period""" + soldTokenAcquisitionCostUsd: String! + """The realized profit in USD""" + realizedProfitUsd: String! + """The average profit in USD per trade""" + averageProfitUsdPerTrade: String! + """The average swap amount in USD""" + averageSwapAmountUsd: String! + """The realized profit percentage""" + realizedProfitPercentage: Float! +} + +"""The non-currency stats for a wallet over a time window.""" +type WindowedDetailedNonCurrencyWalletStats { + """The number of swaps""" + swaps: Int! + """The number of unique tokens""" + uniqueTokens: Int! + """The number of wins""" + wins: Int! + """The number of losses""" + losses: Int! + """Average hold period, in seconds, for positions sold during the window. Estimated with average-cost accounting: sells realize the age of the sold cost basis, so unsold holdings do not affect the result. A lower bound, capped at the window length. Returns null when under $1 of cost basis was sold in the window.""" + avgHoldPeriodSec: Float +} + +"""The stats for a wallet over a time window.""" +type WindowedWalletStats { + """The wallet address""" + walletAddress: String! + """The network ID""" + networkId: Int + """The start timestamp""" + start: Int! + """The end timestamp""" + end: Int! + """The last transaction timestamp""" + lastTransactionAt: Int! + """The stats related to currency""" + statsUsd: WindowedDetailedCurrencyWalletStats! + """The stats related to non-currency""" + statsNonCurrency: WindowedDetailedNonCurrencyWalletStats! +} + +"""The non-currency stats for a wallet over the 1-year window. Mirrors `WindowedDetailedNonCurrencyWalletStats`, but scopes the deprecation of `uniqueTokens` to the 1-year window only.""" +type WindowedDetailedNonCurrencyWalletStatsYear { + """The number of swaps""" + swaps: Int! + """The number of wins""" + wins: Int! + """The number of losses""" + losses: Int! + """Average hold period, in seconds, for positions sold during the window. Estimated with average-cost accounting: sells realize the age of the sold cost basis, so unsold holdings do not affect the result. A lower bound, capped at the window length. Returns null when under $1 of cost basis was sold in the window.""" + avgHoldPeriodSec: Float +} + +"""The stats for a wallet over the 1-year window. Mirrors `WindowedWalletStats`, but exposes 1-year-scoped non-currency stats so `uniqueTokens` can be deprecated for the 1-year window only.""" +type WindowedWalletStatsYear { + """The wallet address""" + walletAddress: String! + """The network ID""" + networkId: Int + """The start timestamp""" + start: Int! + """The end timestamp""" + end: Int! + """The last transaction timestamp""" + lastTransactionAt: Int! + """The stats related to currency""" + statsUsd: WindowedDetailedCurrencyWalletStats! + """The stats related to non-currency""" + statsNonCurrency: WindowedDetailedNonCurrencyWalletStatsYear! +} + +"""The detailed stats for a wallet.""" +type DetailedWalletStats { + """The wallet address""" + walletAddress: String! + """The last transaction timestamp""" + lastTransactionAt: Int! + """The network specific stats""" + networkSpecificStats: [NetworkWalletStats!] @deprecated(reason: "Use networkBreakdown instead") + """The network breakdown""" + networkBreakdown: [NetworkBreakdown!] + """The labels associated with the wallet""" + labels: [String!]! + """The likelihood of the wallet being a scammer""" + scammerScore: Int + """The likelihood of the wallet being a bot""" + botScore: Int + """The stats for the last day""" + statsDay1: WindowedWalletStats + """The stats for the last week""" + statsWeek1: WindowedWalletStats + """The stats for the last 30 days""" + statsDay30: WindowedWalletStats + """The stats for the last year""" + statsYear1: WindowedWalletStats @deprecated(reason: "Unique tokens traded is not available as a distinct 1-year value and reflects the 30-day value here; use statsYear instead.") + """The stats for the last year""" + statsYear: WindowedWalletStatsYear + """The wallet record""" + wallet: Wallet! +} + +"""A breakdown of the wallet's activity by network.""" +type NetworkBreakdown { + """The network ID""" + networkId: Int! + """The native token balance""" + nativeTokenBalance: String! + """The stats for the last day""" + statsDay1: WindowedWalletStats + """The stats for the last week""" + statsWeek1: WindowedWalletStats + """The stats for the last 30 days""" + statsDay30: WindowedWalletStats + """The stats for the last year""" + statsYear1: WindowedWalletStats @deprecated(reason: "Unique tokens traded is not available as a distinct 1-year value and reflects the 30-day value here; use statsYear instead.") + """The stats for the last year""" + statsYear: WindowedWalletStatsYear +} + +"""Native token balance for a wallet on a network.""" +type NetworkWalletStats { + """The network ID""" + networkId: Int! + """The native token balance""" + nativeTokenBalance: String! +} + +"""The range of time for a chart.""" +input RangeInput { + start: Int! + end: Int! +} + +"""The range of time for a chart.""" +type WalletChartRange { + start: Int! + end: Int! +} + +"""The input for a chart of a wallet's activity.""" +input WalletChartInput { + """The wallet address""" + walletAddress: String! + """The network ID""" + networkId: Int + """The range of time for the chart""" + range: RangeInput! + """The time frame for each candle. Available options are `60`, `240`, `1D`, `7D`.""" + resolution: String! +} + +"""The response for a chart of a wallet's activity.""" +type WalletChartResponse { + """The wallet address""" + walletAddress: String! + """The network ID""" + networkId: Int + """The range of time for the chart""" + range: WalletChartRange! + """The resolution of the chart""" + resolution: String! + """The data for the chart""" + data: [WalletChartData!]! + """The backfill state of the wallet.""" + backfillState: WalletAggregateBackfillState +} + +"""The data for a chart of a wallet's activity.""" +type WalletChartData { + """The timestamp""" + timestamp: Int! + """The resolution""" + resolution: String! + """The volume in USD""" + volumeUsd: String! + """The volume in USD including tokens sold for which we do not have a price""" + volumeUsdAll: String! + """The realized profit in USD""" + realizedProfitUsd: String! + """The number of swaps""" + swaps: Int! +} + +"""Input arguments for the `backfillWalletAggregates` mutation.""" +input WalletAggregateBackfillInput { + walletAddress: String! +} + +"""The state of the wallet backfill.""" +enum WalletAggregateBackfillState { + """Historical stats calculations for this wallet have been successfully processed""" + BackfillComplete + """Historical stats calculations for this wallet are being processed""" + BackfillInProgress + """Historical stats calculations were started, then canceled for this wallet. It may have been flagged as a bot""" + BackfillCanceled + """Historical stats calculations have been blocked for this wallet. It may have been flagged as a bot""" + BackfillBlocked + """Historical stats calculations for this wallet are queued and will be processed soon""" + BackfillRequestReceived + """Historical stats calculations for this wallet have not been started, nor attempted""" + BackfillNotFound +} + +"""Wallet behavior classification.""" +enum WalletCategory { + NORMIE + TOKEN_CREATOR + EXCHANGE + DEFI_EXCHANGE + PAIR + PAIR_TOKEN_HOLDER + POOL_AUTHORITY + STAKING_VAULT + NOTORIOUS +} + +"""The response for the `walletAggregateBackfillState` mutation.""" +type WalletAggregateBackfillStateResponse { + walletAddress: String! + status: WalletAggregateBackfillState! +} + +"""Input arguments for the `walletAggregateBackfillState` mutation.""" +input WalletAggregateBackfillStateInput { + walletAddress: String! +} + +type Wallet { + address: String! + category: WalletCategory + firstSeenTimestamp: Int + firstFunding: WalletFunding + """Identity labels describing what this wallet is (e.g. CEX, DEX, bridge, team)""" + identityLabels: [String!] + """Resolved profile avatar URL (best available source)""" + avatarUrl: String + """A human-readable display name for the wallet""" + displayName: String + """Twitter/X numeric ID""" + twitterId: String + """Twitter/X username""" + twitterUsername: String + """Telegram numeric ID""" + telegramId: String + """Telegram username""" + telegramUsername: String + """Website URL""" + website: String + """Discord numeric ID""" + discordId: String + """Discord username""" + discordUsername: String + """GitHub numeric ID""" + githubId: String + """GitHub username""" + githubUsername: String + """Farcaster numeric ID""" + farcasterId: String + """Farcaster username""" + farcasterUsername: String + """A community-contributed description of the wallet""" + description: String + """Ethos credibility score (0-2800, higher = more trustworthy)""" + ethosScore: Int + """Ethos credibility tier (1-10)""" + ethosLevel: String + """Ethos Network verification status""" + ethosVerified: Boolean + """Source of identity data (e.g. ethos, manual, polymarket-backfill)""" + identitySource: String + """When identity data was last updated (unix timestamp)""" + identityUpdatedAt: Int + """Raw Polymarket profile data when this wallet is a Polymarket proxy. Polymarket takes priority over contributed/ethos for resolved displayName, twitterUsername, and avatarUrl.""" + polymarket: WalletPolymarketProfile + """Total number of tokens created by this wallet across all networks (where the creator is known).""" + tokensCreatedCount: Int + """Total number of launchpad tokens migrated (graduated) by this wallet across all networks.""" + tokensMigratedCount: Int +} + +"""Polymarket public profile. proxyWallet is a Polymarket-managed proxy, not the user's signing wallet.""" +type WalletPolymarketProfile { + """On-chain proxy wallet address used by Polymarket to represent the user.""" + proxyWallet: String! + """Self-claimed X (Twitter) username on Polymarket, if set by the user.""" + xUsername: String + """Display name set by the user on Polymarket.""" + displayName: String + """Auto-generated pseudonym assigned by Polymarket (e.g. Incompatible-Standoff).""" + pseudonym: String + """Profile image URL set by the user on Polymarket.""" + profileImageUrl: String + """Whether the user has a verified badge on Polymarket.""" + verifiedBadge: Boolean + """Whether the user has opted to display their username publicly.""" + displayUsernamePublic: Boolean + """Unix timestamp of when this Polymarket profile was last fetched.""" + fetchedAt: Int! +} + +type WalletFunding { + fundedByAddress: String! + fundedByLabel: String + fundedAt: Int! + tokenAddress: String! + networkId: Int! + amount: String! + transactionHash: String! +} + +"""An NFT collection transaction.""" +type NftEvent { + """The ID of the NFT event (`contractAddress`:`tokenId`:`networkId`).""" + id: String! + """The contract address of the NFT collection.""" + contractAddress: String! + """The network ID the NFT collection is deployed on.""" + networkId: Int! + """The token ID of the NFT asset involved in the transaction.""" + tokenId: String! + """The wallet address of the buyer.""" + maker: String! + """The wallet address of the seller.""" + taker: String! + tokenPrice: String! @deprecated(reason: "Some events may lack this value - use the nullable totalTradePrice. tokenPrice will return null values as an empty string.") + totalPrice: String! @deprecated(reason: "Some events may lack this value - use the nullable totalTradePrice. totalPrice will return null values as an empty string.") + """The total trade price for the transaction in the purchasing token. (The transaction can include more than 1 token).""" + totalTradePrice: String + individualTokenPrice: String @deprecated(reason: "Some events may lack this value - use the nullable individualTradePrice. individualTokenPrice will return null values as an empty string.") + individualPrice: String @deprecated(reason: "Some events may lack this value - use the nullable individualTradePrice. individualPrice will return null values as an empty string.") + """The price of each individual NFT in the purchasing token.""" + individualTradePrice: String + baseTokenAddress: String! @deprecated(reason: "No longer supported") + """The contract address of the purchasing token.""" + paymentTokenAddress: String! + baseTokenPrice: String @deprecated(reason: "No longer supported") + """The total trade price for the transaction in USD. (The transaction can include more than 1 token).""" + totalPriceUsd: String + individualBaseTokenPrice: String @deprecated(reason: "No longer supported") + """The price of each individual NFT in USD.""" + individualPriceUsd: String + networkBaseTokenPrice: String @deprecated(reason: "No longer supported") + """The total trade price for the transaction in the network's base token. (The transaction can include more than 1 token).""" + totalPriceNetworkBaseToken: String + individualNetworkBaseTokenPrice: String @deprecated(reason: "No longer supported") + """The price of each individual NFT in the network's base token.""" + individualPriceNetworkBaseToken: String + """The event type of the transaction.""" + eventType: String! + """The NFT marketplace address of the transaction.""" + exchangeAddress: String! + """The sortKey for the event (`blockNumber`#`transactionIndex`#`logIndex` (+ #`marketplaceEventLogIndex` if applicable), zero padded). For example, `0000000016414564#00000224#00000413#00000414`.""" + sortKey: String! + """The block number for the transaction.""" + blockNumber: Int! + """The index of the transaction within the block.""" + transactionIndex: Int! + """The index of the log in the block.""" + logIndex: Int! + """The unique hash for the transaction.""" + transactionHash: String! + """The unix timestamp for the transaction.""" + timestamp: Int! + """The number of assets involved in the transaction.""" + numberOfTokens: String + """The contract address of the marketplace aggregator that routed the transaction.""" + aggregatorAddress: String + """The contract address of the NFT pool, if applicable.""" + poolAddress: String + """The name of the marketplace that processed the transaction.""" + fillSource: String + """The reason for the price error, if applicable. Can be `NO_TOKEN_DATA`, `NO_TOKEN_PRICE`, or `LOW_LIQUIDITY_PAIR`.""" + priceError: String + """The tokens/NFTs that were offered to make this transaction occur.""" + tradeOffer: [NftEventTradeItem!] + """The tokens/NFTs that were received in this transaction.""" + tradeReceived: [NftEventTradeItem!] + """The direction of the order. One of 'BUY', 'SELL', or 'OFFER_ACCEPTED'.""" + orderDirection: NftEventOrderDirection +} + +"""Details for an NFT offered or received as part of an nft trade.""" +type NftEventNftTradeItem { + """The contract address for the NFT.""" + address: String! + """The number of tokens transferred. (Always 1 for ERC721 NFTs)""" + amount: String! + """The recipient of the NFT.""" + recipient: String + """The type of item involved in the trade. (Always NFT)""" + type: NftEventTradeItemType! + """The token ID of the exchanged NFT""" + tokenId: String! +} + +"""Details for a token(s) offered or received as part of an nft trade.""" +type NftEventTokenTradeItem { + """The contract address for the token.""" + address: String! + """The number of tokens transferred.""" + amount: String! + """The recipient of the tokens.""" + recipient: String + """The type of item involved in the trade. (Always TOKEN)""" + type: NftEventTradeItemType! + """Whether this should be summed to calculate the price of the NFT received in the base event. Tokens that are payment fees or involved with other sales in the transaction are often represented in sales and would have a value of `false`.""" + isPrice: Boolean! + """The total trade price for the transaction in the purchasing token. (The transaction can include more than 1 token).""" + totalTradePrice: String + """The price of each individual NFT in the purchasing token.""" + individualTradePrice: String + """The total trade price for the transaction in USD. (The transaction can include more than 1 token).""" + totalPriceUsd: String + """The price of each individual NFT in USD.""" + individualPriceUsd: String + """The total trade price for the transaction in the network's base token. (The transaction can include more than 1 token).""" + totalPriceNetworkBaseToken: String + """The price of each individual NFT in the network's base token.""" + individualPriceNetworkBaseToken: String + """The reason for the price error, if applicable. Can be `NO_TOKEN_DATA`, `NO_TOKEN_PRICE`, or `LOW_LIQUIDITY_PAIR`.""" + priceError: String +} + +type EvmNetworkConfig { + id: ID! + networkId: Int! + baseTokenAddress: String! + baseTokenSymbol: String! + color: String + defaultPairAddress: String! + defaultPairQuoteToken: QuoteToken! + enabled: Boolean! + newTokensEnabled: Boolean + explorer: ExplorerConfig! + mainnet: Boolean! + name: String! + networkIconUrl: String! + networkName: String! + networkShortName: String! + networkType: NetworkConfigType! + stableCoinAddresses: [String!] + wrappedBaseTokenSymbol: String! +} + +type SolanaNetworkConfig { + id: ID! + networkId: Int! + baseTokenAddress: String! + baseTokenSymbol: String! + color: String + defaultPairAddress: String! + defaultPairQuoteToken: QuoteToken! + enabled: Boolean! + newTokensEnabled: Boolean + explorer: ExplorerConfig! + mainnet: Boolean! + name: String! + networkIconUrl: String! + networkName: String! + networkShortName: String! + networkType: NetworkConfigType! + stableCoinAddresses: [String!] + wrappedBaseTokenSymbol: String! +} + +type AptosNetworkConfig { + id: ID! + networkId: Int! + baseTokenAddress: String! + baseTokenSymbol: String! + color: String + defaultPairAddress: String! + defaultPairQuoteToken: QuoteToken! + enabled: Boolean! + newTokensEnabled: Boolean + explorer: ExplorerConfig! + mainnet: Boolean! + name: String! + networkIconUrl: String! + networkName: String! + networkShortName: String! + networkType: NetworkConfigType! + stableCoinAddresses: [String!] + wrappedBaseTokenSymbol: String! +} + +type SuiNetworkConfig { + id: ID! + networkId: Int! + baseTokenAddress: String! + baseTokenSymbol: String! + color: String + defaultPairAddress: String! + defaultPairQuoteToken: QuoteToken! + enabled: Boolean! + newTokensEnabled: Boolean + explorer: ExplorerConfig! + mainnet: Boolean! + name: String! + networkIconUrl: String! + networkName: String! + networkShortName: String! + networkType: NetworkConfigType! + stableCoinAddresses: [String!] + wrappedBaseTokenSymbol: String! +} + +type StarknetNetworkConfig { + id: ID! + networkId: Int! + baseTokenAddress: String! + baseTokenSymbol: String! + color: String + defaultPairAddress: String! + defaultPairQuoteToken: QuoteToken! + enabled: Boolean! + newTokensEnabled: Boolean + explorer: ExplorerConfig! + mainnet: Boolean! + name: String! + networkIconUrl: String! + networkName: String! + networkShortName: String! + networkType: NetworkConfigType! + stableCoinAddresses: [String!] + wrappedBaseTokenSymbol: String! +} + +"""A token transaction.""" +type Event { + """The contract address of the token's top pair.""" + address: String! + """The commitment level of the event within the live stream.""" + commitmentLevel: EventCommitmentLevel! + """The price of the network's base token.""" + baseTokenPrice: String + """The hash of the block where the transaction occurred.""" + blockHash: String! + """The block number for the transaction.""" + blockNumber: Int! + """The event-specific data for the transaction. Can be `BurnEventData` or `MintEventData` or `SwapEventData`.""" + data: EventData + """The type of transaction event. Can be `Burn`, `Mint`, `Swap`, `Sync`, `Collect`, or `CollectProtocol`.""" + eventType: EventType! + """The ID of the event (`address:networkId`). For example, `0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2:1`.""" + id: String! + """The contract address of the token with higher liquidity in the token's top pair.""" + liquidityToken: String + """The index of the log in the block.""" + logIndex: Int! + """The wallet address that performed the transaction.""" + maker: String + """The network ID that the token is deployed on.""" + networkId: Int! + """The token of interest within the token's top pair. Can be `token0` or `token1`.""" + quoteToken: QuoteToken + """The unix timestamp for when the transaction occurred.""" + timestamp: Int! + """The address of the event's token0.""" + token0Address: String + """The address of the event's token1.""" + token1Address: String + """The price of `token0` paid/received in USD, including any fees.""" + token0SwapValueUsd: String + """The price of `token1` paid/received in USD, including any fees.""" + token1SwapValueUsd: String + """The price of `token0` paid/received in the network's base token, including fees.""" + token0ValueBase: String + """The price of `token1` paid/received in the network's base token, including fees.""" + token1ValueBase: String + """The updated price of `token0` in USD, calculated after the transaction.""" + token0PoolValueUsd: String + """The updated price of `token1` in USD, calculated after the transaction.""" + token1PoolValueUsd: String + """The unique hash for the transaction.""" + transactionHash: String! + """The index of the transaction within the block.""" + transactionIndex: Int! + """An optional unique identifier describing where the event appears within the transaction.""" + supplementalIndex: Int + """A more specific breakdown of `eventType`. Splits `Swap` into `Buy` or `Sell`.""" + eventDisplayType: EventDisplayType + """Labels attributed to the event.""" + labels: LabelsForEvent + """Fee breakdown for this event.""" + feeData: EventFeeData + """The age of the wallet in seconds.""" + walletAge: Int + """Labels attributed to the wallet.""" + walletLabels: [String!] +} + diff --git a/src/scripts/schemaDiff.ts b/src/scripts/schemaDiff.ts new file mode 100644 index 0000000..4ee13e6 --- /dev/null +++ b/src/scripts/schemaDiff.ts @@ -0,0 +1,123 @@ +import { Change, CriticalityLevel, diff } from "@graphql-inspector/core"; +import fs from "fs"; +import { buildSchema } from "graphql"; + +// Diffs two schema SDL files and prints a markdown summary to stdout, +// grouped by criticality. Used by the bump workflow to generate release +// notes and to pick the version bump level. +// +// Usage: tsx src/scripts/schemaDiff.ts +// +// When $GITHUB_OUTPUT is set, also writes: +// changed=true|false +// level=breaking|nonbreaking|none + +const SECTIONS: Array<{ level: CriticalityLevel; heading: string }> = [ + { level: CriticalityLevel.Breaking, heading: "⚠️ Breaking schema changes" }, + { + level: CriticalityLevel.Dangerous, + heading: "Potentially dangerous schema changes", + }, + { level: CriticalityLevel.NonBreaking, heading: "Schema additions" }, +]; + +// Bullets per section before truncating with an "…and N more" line. +const MAX_BULLETS_PER_SECTION = 100; + +const pathRoot = (change: Change) => change.path?.split(".")[0] ?? ""; + +// Collapses the raw change list for readability: +// - a member change on a type that was itself added/removed is folded into +// the type's own bullet (with a member count) +// - directive-usage changes are dropped (they duplicate e.g. deprecations) +// - description-only changes are rolled up into a single count +const summarize = (changes: Change[]) => { + const addedOrRemovedTypes = new Set( + changes + .filter((c) => c.type === "TYPE_ADDED" || c.type === "TYPE_REMOVED") + .map(pathRoot), + ); + const memberCounts = new Map(); + let descriptionChanges = 0; + + const kept = changes.filter((change) => { + if (change.type.includes("DIRECTIVE_USAGE")) return false; + if (change.type.includes("DESCRIPTION")) { + descriptionChanges += 1; + return false; + } + const root = pathRoot(change); + if ( + addedOrRemovedTypes.has(root) && + change.type !== "TYPE_ADDED" && + change.type !== "TYPE_REMOVED" + ) { + memberCounts.set(root, (memberCounts.get(root) ?? 0) + 1); + return false; + } + return true; + }); + + const bullet = (change: Change) => { + const members = memberCounts.get(pathRoot(change)); + return members && + (change.type === "TYPE_ADDED" || change.type === "TYPE_REMOVED") + ? `- ${change.message} (${members} members)` + : `- ${change.message}`; + }; + + return { kept, bullet, descriptionChanges }; +}; + +const main = async () => { + const [oldPath, newPath] = process.argv.slice(2); + if (!oldPath || !newPath) { + console.error("Usage: schemaDiff "); + process.exit(1); + } + + const loadSchema = (filePath: string) => + buildSchema(fs.readFileSync(filePath, "utf8"), { assumeValid: true }); + + const changes = await diff(loadSchema(oldPath), loadSchema(newPath)); + const { kept, bullet, descriptionChanges } = summarize(changes); + + const lines: string[] = []; + for (const { level, heading } of SECTIONS) { + const group = kept.filter((c) => c.criticality.level === level); + if (group.length === 0) continue; + lines.push(`### ${heading}`, ""); + lines.push(...group.slice(0, MAX_BULLETS_PER_SECTION).map(bullet)); + if (group.length > MAX_BULLETS_PER_SECTION) { + lines.push(`- …and ${group.length - MAX_BULLETS_PER_SECTION} more`); + } + lines.push(""); + } + if (descriptionChanges > 0) { + lines.push( + `_${descriptionChanges} description/documentation change(s)._`, + "", + ); + } + + if (kept.length > 0 || descriptionChanges > 0) { + console.log(["## Supergraph schema changes", "", ...lines].join("\n")); + } + + const hasBreaking = changes.some( + (c) => c.criticality.level === CriticalityLevel.Breaking, + ); + const level = + changes.length === 0 ? "none" : hasBreaking ? "breaking" : "nonbreaking"; + if (process.env.GITHUB_OUTPUT) { + fs.appendFileSync( + process.env.GITHUB_OUTPUT, + `changed=${changes.length > 0}\nlevel=${level}\n`, + ); + } +}; + +main().catch((error) => { + console.error(error); + process.exit(1); +});