diff --git a/.github/workflows/ci-cd-pull-request.yml b/.github/workflows/ci-cd-pull-request.yml index 43cb0de5a275..cc6efa51a0d9 100644 --- a/.github/workflows/ci-cd-pull-request.yml +++ b/.github/workflows/ci-cd-pull-request.yml @@ -20,6 +20,8 @@ jobs: - name: Set up env uses: the-guild-org/shared-config/setup@v1 + with: + node-version: 22 - name: Install dependencies run: pnpm install @@ -41,6 +43,8 @@ jobs: - name: Set up env uses: the-guild-org/shared-config/setup@v1 + with: + node-version: 22 - name: Install dependencies run: pnpm install @@ -62,6 +66,8 @@ jobs: - name: Set up env uses: the-guild-org/shared-config/setup@v1 + with: + node-version: 22 - name: Install dependencies run: pnpm install @@ -84,6 +90,8 @@ jobs: - name: Set up env uses: the-guild-org/shared-config/setup@v1 + with: + node-version: 22 - name: Install dependencies run: pnpm install diff --git a/.github/workflows/opengraph.yml b/.github/workflows/opengraph.yml index 680e9607621c..ffd91e72e842 100644 --- a/.github/workflows/opengraph.yml +++ b/.github/workflows/opengraph.yml @@ -25,6 +25,8 @@ jobs: - name: Set up env uses: the-guild-org/shared-config/setup@v1 + with: + node-version: 22 - name: Deploy working-directory: ./packages/og-image diff --git a/.github/workflows/website-integrity.yml b/.github/workflows/website-integrity.yml index 9b2b5bea0619..2e3ede255986 100644 --- a/.github/workflows/website-integrity.yml +++ b/.github/workflows/website-integrity.yml @@ -22,6 +22,8 @@ jobs: - name: Set up env uses: the-guild-org/shared-config/setup@v1 + with: + node-version: 22 - name: Run pre-build scripts run: pnpm prebuild:ci diff --git a/package.json b/package.json index 5ea6ba19e17d..65fc90090c28 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "graph-docs", "private": true, "version": "1.0.0", - "packageManager": "pnpm@10.23.0", + "packageManager": "pnpm@10.25.0", "scripts": { "dev": "turbo run dev", "build": "NODE_OPTIONS='--max-old-space-size=8192' turbo run build", @@ -21,17 +21,17 @@ }, "devDependencies": { "@edgeandnode/eslint-config": "^2.0.3", - "@types/node": "^22.19.1", + "@types/node": "^22.19.2", "eslint": "^8.57.1", "eslint-plugin-mdx": "^3.6.2", - "prettier": "^3.6.2", - "prettier-plugin-tailwindcss": "^0.7.1", + "prettier": "^3.7.4", + "prettier-plugin-tailwindcss": "^0.7.2", "remark-frontmatter": "^5.0.0", "remark-lint-first-heading-level": "^4.0.1", "remark-lint-heading-increment": "^4.0.1", "remark-lint-no-heading-punctuation": "^4.0.1", "remark-lint-restrict-elements": "workspace:*", - "turbo": "^2.6.1", + "turbo": "^2.6.3", "typescript": "^5.9.3" }, "resolutions": { diff --git a/packages/og-image/package.json b/packages/og-image/package.json index e3bcd5140446..e1f55cd65d89 100644 --- a/packages/og-image/package.json +++ b/packages/og-image/package.json @@ -16,7 +16,7 @@ "yoga-wasm-web": "^0.3.3" }, "devDependencies": { - "@cloudflare/workers-types": "^4.20251120.0", + "@cloudflare/workers-types": "^4.20251213.0", "@types/react": "^18.3.27", "jest-image-snapshot": "^6.5.1", "tsx": "4.20.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c9328c36cd1a..5148f0f09bac 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,8 +15,8 @@ importers: specifier: ^2.0.3 version: 2.0.3(eslint@8.57.1)(typescript@5.9.3) '@types/node': - specifier: ^22.19.1 - version: 22.19.1 + specifier: ^22.19.2 + version: 22.19.2 eslint: specifier: ^8.57.1 version: 8.57.1 @@ -24,11 +24,11 @@ importers: specifier: ^3.6.2 version: 3.6.2(eslint@8.57.1) prettier: - specifier: ^3.6.2 - version: 3.6.2 + specifier: ^3.7.4 + version: 3.7.4 prettier-plugin-tailwindcss: - specifier: ^0.7.1 - version: 0.7.1(prettier@3.6.2) + specifier: ^0.7.2 + version: 0.7.2(prettier@3.7.4) remark-frontmatter: specifier: ^5.0.0 version: 5.0.0 @@ -45,8 +45,8 @@ importers: specifier: workspace:* version: link:packages/remark-lint-restrict-elements turbo: - specifier: ^2.6.1 - version: 2.6.1 + specifier: ^2.6.3 + version: 2.6.3 typescript: specifier: ^5.9.3 version: 5.9.3 @@ -67,8 +67,8 @@ importers: version: 0.3.3 devDependencies: '@cloudflare/workers-types': - specifier: ^4.20251120.0 - version: 4.20251120.0 + specifier: ^4.20251213.0 + version: 4.20251213.0 '@types/react': specifier: ^18.3.27 version: 18.3.27 @@ -83,10 +83,10 @@ importers: version: 5.9.3 vitest: specifier: ^2.1.9 - version: 2.1.9(@types/node@22.19.1)(jsdom@24.1.3) + version: 2.1.9(@types/node@22.19.2)(jsdom@24.1.3) wrangler: specifier: ^3.114.15 - version: 3.114.15(@cloudflare/workers-types@4.20251120.0) + version: 3.114.15(@cloudflare/workers-types@4.20251213.0) packages/remark-lint-restrict-elements: dependencies: @@ -101,16 +101,16 @@ importers: dependencies: '@docsearch/react': specifier: ^3.9.0 - version: 3.9.0(@algolia/client-search@5.43.0)(@types/react@18.3.27)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3) + version: 3.9.0(@algolia/client-search@5.46.0)(@types/react@18.3.27)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3) '@edgeandnode/common': specifier: ^7.0.4 - version: 7.0.4(hardhat@2.27.0(typescript@5.9.3)) + version: 7.0.4(hardhat@2.27.2(typescript@5.9.3)) '@edgeandnode/gds': - specifier: ^6.7.8 - version: 6.7.8(@emotion/is-prop-valid@0.8.8)(@emotion/react@11.14.0(@types/react@18.3.27)(react@18.3.1))(@theme-ui/core@0.17.2(@emotion/react@11.14.0(@types/react@18.3.27)(react@18.3.1))(react@18.3.1))(@types/react-dom@18.3.7(@types/react@18.3.27))(@types/react@18.3.27)(dayjs@1.11.19)(hardhat@2.27.0(typescript@5.9.3))(next@14.2.33(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(theme-ui@0.17.2(@emotion/react@11.14.0(@types/react@18.3.27)(react@18.3.1))(react@18.3.1))(tsx@4.20.4)(typescript@5.9.3)(yaml@2.8.1) + specifier: ^6.8.1 + version: 6.8.1(@emotion/is-prop-valid@0.8.8)(@emotion/react@11.14.0(@types/react@18.3.27)(react@18.3.1))(@theme-ui/core@0.17.2(@emotion/react@11.14.0(@types/react@18.3.27)(react@18.3.1))(react@18.3.1))(@types/react-dom@18.3.7(@types/react@18.3.27))(@types/react@18.3.27)(dayjs@1.11.19)(hardhat@2.27.2(typescript@5.9.3))(next@14.2.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(theme-ui@0.17.2(@emotion/react@11.14.0(@types/react@18.3.27)(react@18.3.1))(react@18.3.1))(tsx@4.20.4)(typescript@5.9.3)(yaml@2.8.2) '@edgeandnode/go': - specifier: ^10.3.12 - version: 10.3.12(e70f93497728a8960fcd273532040bed) + specifier: ^10.4.1 + version: 10.4.1(b7fbd4cfc283779f7cf7c16f0f72c4f6) '@emotion/react': specifier: ^11.14.0 version: 11.14.0(@types/react@18.3.27)(react@18.3.1) @@ -145,26 +145,26 @@ importers: specifier: ^3.2.0 version: 3.2.0 mdast-util-to-hast: - specifier: ^13.2.0 - version: 13.2.0 + specifier: ^13.2.1 + version: 13.2.1 mixpanel-browser: specifier: ^2.72.0 version: 2.72.0(@mixpanel/rrweb-utils@2.0.0-alpha.18.2) motion: - specifier: ^12.23.24 - version: 12.23.24(@emotion/is-prop-valid@0.8.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: ^12.23.26 + version: 12.23.26(@emotion/is-prop-valid@0.8.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next: - specifier: ^14.2.33 - version: 14.2.33(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: ^14.2.35 + version: 14.2.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next-seo: specifier: ^6.8.0 - version: 6.8.0(next@14.2.33(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 6.8.0(next@14.2.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next-sitemap: specifier: ^4.2.3 - version: 4.2.3(next@14.2.33(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + version: 4.2.3(next@14.2.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) nextra: specifier: ^3.3.1 - version: 3.3.1(@types/react@18.3.27)(next@14.2.33(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) + version: 3.3.1(@types/react@18.3.27)(next@14.2.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3) openapi-types: specifier: ^12.1.3 version: 12.1.3 @@ -209,8 +209,8 @@ importers: specifier: ^3.0.4 version: 3.0.4 '@types/lodash': - specifier: ^4.17.20 - version: 4.17.20 + specifier: ^4.17.21 + version: 4.17.21 '@types/mdast': specifier: ^4.0.4 version: 4.0.4 @@ -218,8 +218,8 @@ importers: specifier: ^2.66.0 version: 2.66.0(@mixpanel/rrweb-utils@2.0.0-alpha.18.2) '@types/node': - specifier: ^22.19.1 - version: 22.19.1 + specifier: ^22.19.2 + version: 22.19.2 '@types/react': specifier: ^18.3.27 version: 18.3.27 @@ -233,17 +233,17 @@ importers: specifier: ^10.4.22 version: 10.4.22(postcss@8.5.6) fast-xml-parser: - specifier: ^5.3.2 - version: 5.3.2 + specifier: ^5.3.3 + version: 5.3.3 postcss: specifier: ^8.5.6 version: 8.5.6 tailwindcss: - specifier: ^3.4.18 - version: 3.4.18(tsx@4.20.4)(yaml@2.8.1) + specifier: ^3.4.19 + version: 3.4.19(tsx@4.20.4)(yaml@2.8.2) tsup: specifier: ^8.5.1 - version: 8.5.1(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.4)(typescript@5.9.3)(yaml@2.8.1) + version: 8.5.1(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.4)(typescript@5.9.3)(yaml@2.8.2) tsx: specifier: 4.20.4 version: 4.20.4 @@ -256,8 +256,8 @@ packages: '@adraffy/ens-normalize@1.11.1': resolution: {integrity: sha512-nhCBV3quEgesuf7c7KYfperqSS14T8bYuvJ8PcLJp6znkZpFc0AuW4qBtr8eKVyPPe/8RSr7sglCWPU5eaxwKQ==} - '@algolia/abtesting@1.9.0': - resolution: {integrity: sha512-4q9QCxFPiDIx1n5w41A1JMkrXI8p0ugCQnCGFtCKZPmWtwgWCqwVRncIbp++81xSELFZVQUfiB7Kbsla1tIBSw==} + '@algolia/abtesting@1.12.0': + resolution: {integrity: sha512-EfW0bfxjPs+C7ANkJDw2TATntfBKsFiy7APh+KO0pQ8A6HYa5I0NjFuCGCXWfzzzLXNZta3QUl3n5Kmm6aJo9Q==} engines: {node: '>= 14.0.0'} '@algolia/autocomplete-core@1.17.9': @@ -280,56 +280,56 @@ packages: '@algolia/client-search': '>= 4.9.1 < 6' algoliasearch: '>= 4.9.1 < 6' - '@algolia/client-abtesting@5.43.0': - resolution: {integrity: sha512-YsKYkohIMxiYEAu8nppZi5EioYDUIo9Heoor8K8vMUnkUtGCOEU/Q4p5OWaYSSBx3evo09Ga9rG4jsKViIcDzQ==} + '@algolia/client-abtesting@5.46.0': + resolution: {integrity: sha512-eG5xV8rujK4ZIHXrRshvv9O13NmU/k42Rnd3w43iKH5RaQ2zWuZO6Q7XjaoJjAFVCsJWqRbXzbYyPGrbF3wGNg==} engines: {node: '>= 14.0.0'} - '@algolia/client-analytics@5.43.0': - resolution: {integrity: sha512-kDGJWt3nzf0nu5RPFXQhNGl6Q0cn35fazxVWXhd0Fw3Vo6gcVfrcezcBenHb66laxnVJ7uwr1uKhmsu3Wy25sQ==} + '@algolia/client-analytics@5.46.0': + resolution: {integrity: sha512-AYh2uL8IUW9eZrbbT+wZElyb7QkkeV3US2NEKY7doqMlyPWE8lErNfkVN1NvZdVcY4/SVic5GDbeDz2ft8YIiQ==} engines: {node: '>= 14.0.0'} - '@algolia/client-common@5.43.0': - resolution: {integrity: sha512-RAFipkAnI8xhL/Sgi/gpXgNWN5HDM6F7z4NNNOcI8ZMYysZEBsqVXojg/WdKEKkQCOHVTZ3mooIjc5BaQdyVtA==} + '@algolia/client-common@5.46.0': + resolution: {integrity: sha512-0emZTaYOeI9WzJi0TcNd2k3SxiN6DZfdWc2x2gHt855Jl9jPUOzfVTL6gTvCCrOlT4McvpDGg5nGO+9doEjjig==} engines: {node: '>= 14.0.0'} - '@algolia/client-insights@5.43.0': - resolution: {integrity: sha512-PmVs83THco8Qig3cAjU9a5eAGaSxsfgh7PdmWMQFE/MCmIcLPv0MVpgfcGGyPjZGYvPC4cg+3q7JJxcNSsEaTg==} + '@algolia/client-insights@5.46.0': + resolution: {integrity: sha512-wrBJ8fE+M0TDG1As4DDmwPn2TXajrvmvAN72Qwpuv8e2JOKNohF7+JxBoF70ZLlvP1A1EiH8DBu+JpfhBbNphQ==} engines: {node: '>= 14.0.0'} - '@algolia/client-personalization@5.43.0': - resolution: {integrity: sha512-Bs4zMLXvkAr19FSOZWNizlNUpRFxZVxtvyEJ+q3n3+hPZUcKjo0LIh15qghhRcQPEihjBN6Gr/U+AqRfOCsvnA==} + '@algolia/client-personalization@5.46.0': + resolution: {integrity: sha512-LnkeX4p0ENt0DoftDJJDzQQJig/sFQmD1eQifl/iSjhUOGUIKC/7VTeXRcKtQB78naS8njUAwpzFvxy1CDDXDQ==} engines: {node: '>= 14.0.0'} - '@algolia/client-query-suggestions@5.43.0': - resolution: {integrity: sha512-pwHv+z8TZAKbwAWt9+v2gIqlqcCFiMdteTdgdPn2yOBRx4WUQdsIWAaG9GiV3by8jO51FuFQnTohhauuI63y3A==} + '@algolia/client-query-suggestions@5.46.0': + resolution: {integrity: sha512-aF9tc4ex/smypXw+W3lBPB1jjKoaGHpZezTqofvDOI/oK1dR2sdTpFpK2Ru+7IRzYgwtRqHF3znmTlyoNs9dpA==} engines: {node: '>= 14.0.0'} - '@algolia/client-search@5.43.0': - resolution: {integrity: sha512-wKy6x6fKcnB1CsfeNNdGp4dzLzz04k8II3JLt6Sp81F8s57Ks3/K9qsysmL9SJa8P486s719bBttVLE8JJYurQ==} + '@algolia/client-search@5.46.0': + resolution: {integrity: sha512-22SHEEVNjZfFWkFks3P6HilkR3rS7a6GjnCIqR22Zz4HNxdfT0FG+RE7efTcFVfLUkTTMQQybvaUcwMrHXYa7Q==} engines: {node: '>= 14.0.0'} - '@algolia/ingestion@1.43.0': - resolution: {integrity: sha512-TA21h2KwqCUyPXhSAWF3R2UES/FAnzjaVPDI6cRPXeadX+pdrGN0GWat5gSUATJVcMHECn+lGvuMMRxO86o2Pg==} + '@algolia/ingestion@1.46.0': + resolution: {integrity: sha512-2LT0/Z+/sFwEpZLH6V17WSZ81JX2uPjgvv5eNlxgU7rPyup4NXXfuMbtCJ+6uc4RO/LQpEJd3Li59ke3wtyAsA==} engines: {node: '>= 14.0.0'} - '@algolia/monitoring@1.43.0': - resolution: {integrity: sha512-rvWVEiA1iLcFmHS3oIXGIBreHIxNZqEFDjiNyRtLEffgd62kul2DjXM7H5bOouDMTo1ywMWT9OeQnzrhlTGAwA==} + '@algolia/monitoring@1.46.0': + resolution: {integrity: sha512-uivZ9wSWZ8mz2ZU0dgDvQwvVZV8XBv6lYBXf8UtkQF3u7WeTqBPeU8ZoeTyLpf0jAXCYOvc1mAVmK0xPLuEwOQ==} engines: {node: '>= 14.0.0'} - '@algolia/recommend@5.43.0': - resolution: {integrity: sha512-scCijGd38npvH2uHbYhO4f1SR8It5R2FZqOjNcMfw/7Ph7Hxvl+cd7Mo6RzIxsNRcLW5RrwjtpTK3gpDe8r/WQ==} + '@algolia/recommend@5.46.0': + resolution: {integrity: sha512-O2BB8DuySuddgOAbhyH4jsGbL+KyDGpzJRtkDZkv091OMomqIA78emhhMhX9d/nIRrzS1wNLWB/ix7Hb2eV5rg==} engines: {node: '>= 14.0.0'} - '@algolia/requester-browser-xhr@5.43.0': - resolution: {integrity: sha512-jMkRLWJYr4Hcmpl89e4vIWs69Mkf8Uwx7MG5ZKk2UxW3G3TmouGjI0Ph5mVPmg3Jf1UG3AdmVDc4XupzycT1Jw==} + '@algolia/requester-browser-xhr@5.46.0': + resolution: {integrity: sha512-eW6xyHCyYrJD0Kjk9Mz33gQ40LfWiEA51JJTVfJy3yeoRSw/NXhAL81Pljpa0qslTs6+LO/5DYPZddct6HvISQ==} engines: {node: '>= 14.0.0'} - '@algolia/requester-fetch@5.43.0': - resolution: {integrity: sha512-KyQiVz+HdYtissC0J9KIGhHhKytQyJX+82GVsbv5rSCXbETnAoojvUyCn+3KRtWUvMDYCsZ+Y7hM71STTUJUJg==} + '@algolia/requester-fetch@5.46.0': + resolution: {integrity: sha512-Vn2+TukMGHy4PIxmdvP667tN/MhS7MPT8EEvEhS6JyFLPx3weLcxSa1F9gVvrfHWCUJhLWoMVJVB2PT8YfRGcw==} engines: {node: '>= 14.0.0'} - '@algolia/requester-node-http@5.43.0': - resolution: {integrity: sha512-UnUBNY0U+oT0bkYDsEqVsCkErC2w7idk4CRiLSzicqY8tGylD9oP0j13X/fse1CuiAFCCr3jfl+cBlN6dC0OFw==} + '@algolia/requester-node-http@5.46.0': + resolution: {integrity: sha512-xaqXyna5yBZ+r1SJ9my/DM6vfTqJg9FJgVydRJ0lnO+D5NhqGW/qaRG/iBGKr/d4fho34el6WakV7BqJvrl/HQ==} engines: {node: '>= 14.0.0'} '@alloc/quick-lru@5.2.0': @@ -339,9 +339,6 @@ packages: '@antfu/install-pkg@1.1.0': resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==} - '@antfu/utils@9.3.0': - resolution: {integrity: sha512-9hFT4RauhcUzqOE4f1+frMKLZrgNog5b06I7VmZQV1BkvwvqrbC8EBZf3L1eEL2AKb6rNKjER0sEvJiSP1FXEA==} - '@apidevtools/json-schema-ref-parser@13.0.5': resolution: {integrity: sha512-xfh4xVJD62gG6spIc7lwxoWT+l16nZu1ELyU8FkjaP/oD2yP09EvLAU6KhtudN9aML2Khhs9pY6Slr7KGTES3w==} engines: {node: '>= 16'} @@ -470,8 +467,8 @@ packages: cpu: [x64] os: [win32] - '@cloudflare/workers-types@4.20251120.0': - resolution: {integrity: sha512-/uy0Oleot60ZS037I2mxR9NEft6eQYdknKBnM76W91I+7BKznzXKj2MtXMfSXTLsxyP+6MluYRNPrRCQDlk8kw==} + '@cloudflare/workers-types@4.20251213.0': + resolution: {integrity: sha512-PJAGdKfU7hs39C2YOFNLTdrfdqG6rbaVj5UuI306zS+TPokiskRLEgUXKqS6avN9Uu9Nyuf2a0hqoumLQCnJlQ==} '@corex/deepmerge@4.0.43': resolution: {integrity: sha512-N8uEMrMPL0cu/bdboEWpQYb/0i2K5Qn8eCsxzOmxSggJbbQte7ljMRoXm917AbntqTGOzdTu+vP3KOOzoC70HQ==} @@ -545,8 +542,8 @@ packages: typescript: optional: true - '@edgeandnode/gds@6.7.8': - resolution: {integrity: sha512-2tqMNFAIT5tW2SMxjWGci9bQcLyvzOSeHs9RL6iSe6keTVHfnQCyefnQ58FjCEOhwv32Ki3dulN2xM6TGR6++A==} + '@edgeandnode/gds@6.8.1': + resolution: {integrity: sha512-gpiY1ramhJA9HxNjYBG+Y/kNU21+ENE1Xi4Pov0c09sGq2mvvQB/Qwj6DyoYKsCoyUQzkYI4VQJoYS9iEZLBkQ==} peerDependencies: '@emotion/react': ^11 dayjs: ^1.11 @@ -558,12 +555,12 @@ packages: next: optional: true - '@edgeandnode/go@10.3.12': - resolution: {integrity: sha512-6B+Fo9TNYxqdrJ/cmsn9arhcxCTyz9rUPaXsw9dxDjJB5KMciIFphj5RH3BGzF27kJEydDHEaqLKQmyUsWEQeg==} + '@edgeandnode/go@10.4.1': + resolution: {integrity: sha512-/q9rkXkiFJ6aQClmxGdpoFQ7TttwvaRhD2XKXW37gPAqlH4NYufxJU7rdox7L8JxFoPkJnyoixGUiFsQhF9V0A==} peerDependencies: '@edgeandnode/common': ^7.0.4 '@edgeandnode/ens': ^2.3.1 - '@edgeandnode/gds': ^6.7.8 + '@edgeandnode/gds': ^6.8.1 '@emotion/react': ^11 '@tanstack/react-query': ^5 graphql: '>=16.9' @@ -576,11 +573,11 @@ packages: next: optional: true - '@emnapi/core@1.7.0': - resolution: {integrity: sha512-pJdKGq/1iquWYtv1RRSljZklxHCOCAJFJrImO5ZLKPJVJlVUcs8yFwNQlqS0Lo8xT1VAXXTCZocF9n26FWEKsw==} + '@emnapi/core@1.7.1': + resolution: {integrity: sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==} - '@emnapi/runtime@1.7.0': - resolution: {integrity: sha512-oAYoQnCYaQZKVS53Fq23ceWMRxq5EhQsE0x0RdQ55jT7wagMu5k+fS39v1fiSLrtrLQlXwVINenqhLMtTrV/1Q==} + '@emnapi/runtime@1.7.1': + resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==} '@emnapi/wasi-threads@1.1.0': resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} @@ -638,8 +635,8 @@ packages: '@ensdomains/address-encoder@1.0.0-rc.3': resolution: {integrity: sha512-8o6zH69rObIqDY4PusEWuN9jvVOct+9jj9AOPO7ifc3ev8nmsly0e8TE1sHkhk0iKFbd3DlSsUnJ+yuRWmdLCQ==} - '@ensdomains/address-encoder@1.1.1': - resolution: {integrity: sha512-yg7s+suCuKRhaGsgLu57W/jxIs/Lnqs/SU7jT7UwS4ATSnW94jbUCbmyyZ82CQwKsmwaUE8uYvvVb4N6lfz29A==} + '@ensdomains/address-encoder@1.1.3': + resolution: {integrity: sha512-QS4ax0YkA8tsbQcWgBNmLLtb3aG0jsOQtED9SRyX9Ixflt1jDMuC/0i3ONMnNJNG5HTIko0Te4Y1JIGXjNcnUg==} '@ensdomains/content-hash@3.1.0-rc.1': resolution: {integrity: sha512-OzdkXgdFmduzcJKU4KRkkJkQHnm5p7m7FkX8k+bHOEoOIzc0ueGT/Jay4nnb60wNk1wSHRmzY+hHBMpFDiGReg==} @@ -648,8 +645,9 @@ packages: resolution: {integrity: sha512-lSuYnUvUV+kBviQ82XUldtpiE0lA4gWrCilsoCWbTKtc/fH6re9NaTkhbPEy/7OF96MMAG1BDnuoTsfSMAzFBg==} engines: {node: '>=16.8'} - '@ensdomains/ensjs@4.0.2': - resolution: {integrity: sha512-4vDIZEFAa1doNA3H9MppUHxflSDYYPVNyaDbdHLksTa4taq3y4dGpletX67Xea8nxI+cMfjEi4nOzLJmPzRE/g==} + '@ensdomains/ensjs@4.2.0': + resolution: {integrity: sha512-6E8LnKCJ45HySx8PSlepL8VfHJg0PgQRmP1xM8Snu9IcOkSpwI1LEiGOUYfEHX/I7yEglGSYMyGgeiqk0LeCcw==} + engines: {node: '>=22'} peerDependencies: viem: ^2.9.2 @@ -675,8 +673,8 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/aix-ppc64@0.27.0': - resolution: {integrity: sha512-KuZrd2hRjz01y5JK9mEBSD3Vj3mbCvemhT466rSuJYeE/hjuBrHfjjcjMdTm/sz7au+++sdbJZJmuBwQLuw68A==} + '@esbuild/aix-ppc64@0.27.1': + resolution: {integrity: sha512-HHB50pdsBX6k47S4u5g/CaLjqS3qwaOVE5ILsq64jyzgMhLuCuZ8rGzM9yhsAjfjkbgUPMzZEPa7DAp7yz6vuA==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] @@ -699,8 +697,8 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.27.0': - resolution: {integrity: sha512-CC3vt4+1xZrs97/PKDkl0yN7w8edvU2vZvAFGD16n9F0Cvniy5qvzRXjfO1l94efczkkQE6g1x0i73Qf5uthOQ==} + '@esbuild/android-arm64@0.27.1': + resolution: {integrity: sha512-45fuKmAJpxnQWixOGCrS+ro4Uvb4Re9+UTieUY2f8AEc+t7d4AaZ6eUJ3Hva7dtrxAAWHtlEFsXFMAgNnGU9uQ==} engines: {node: '>=18'} cpu: [arm64] os: [android] @@ -723,8 +721,8 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-arm@0.27.0': - resolution: {integrity: sha512-j67aezrPNYWJEOHUNLPj9maeJte7uSMM6gMoxfPC9hOg8N02JuQi/T7ewumf4tNvJadFkvLZMlAq73b9uwdMyQ==} + '@esbuild/android-arm@0.27.1': + resolution: {integrity: sha512-kFqa6/UcaTbGm/NncN9kzVOODjhZW8e+FRdSeypWe6j33gzclHtwlANs26JrupOntlcWmB0u8+8HZo8s7thHvg==} engines: {node: '>=18'} cpu: [arm] os: [android] @@ -747,8 +745,8 @@ packages: cpu: [x64] os: [android] - '@esbuild/android-x64@0.27.0': - resolution: {integrity: sha512-wurMkF1nmQajBO1+0CJmcN17U4BP6GqNSROP8t0X/Jiw2ltYGLHpEksp9MpoBqkrFR3kv2/te6Sha26k3+yZ9Q==} + '@esbuild/android-x64@0.27.1': + resolution: {integrity: sha512-LBEpOz0BsgMEeHgenf5aqmn/lLNTFXVfoWMUox8CtWWYK9X4jmQzWjoGoNb8lmAYml/tQ/Ysvm8q7szu7BoxRQ==} engines: {node: '>=18'} cpu: [x64] os: [android] @@ -771,8 +769,8 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.27.0': - resolution: {integrity: sha512-uJOQKYCcHhg07DL7i8MzjvS2LaP7W7Pn/7uA0B5S1EnqAirJtbyw4yC5jQ5qcFjHK9l6o/MX9QisBg12kNkdHg==} + '@esbuild/darwin-arm64@0.27.1': + resolution: {integrity: sha512-veg7fL8eMSCVKL7IW4pxb54QERtedFDfY/ASrumK/SbFsXnRazxY4YykN/THYqFnFwJ0aVjiUrVG2PwcdAEqQQ==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] @@ -795,8 +793,8 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.27.0': - resolution: {integrity: sha512-8mG6arH3yB/4ZXiEnXof5MK72dE6zM9cDvUcPtxhUZsDjESl9JipZYW60C3JGreKCEP+p8P/72r69m4AZGJd5g==} + '@esbuild/darwin-x64@0.27.1': + resolution: {integrity: sha512-+3ELd+nTzhfWb07Vol7EZ+5PTbJ/u74nC6iv4/lwIU99Ip5uuY6QoIf0Hn4m2HoV0qcnRivN3KSqc+FyCHjoVQ==} engines: {node: '>=18'} cpu: [x64] os: [darwin] @@ -819,8 +817,8 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.27.0': - resolution: {integrity: sha512-9FHtyO988CwNMMOE3YIeci+UV+x5Zy8fI2qHNpsEtSF83YPBmE8UWmfYAQg6Ux7Gsmd4FejZqnEUZCMGaNQHQw==} + '@esbuild/freebsd-arm64@0.27.1': + resolution: {integrity: sha512-/8Rfgns4XD9XOSXlzUDepG8PX+AVWHliYlUkFI3K3GB6tqbdjYqdhcb4BKRd7C0BhZSoaCxhv8kTcBrcZWP+xg==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] @@ -843,8 +841,8 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.27.0': - resolution: {integrity: sha512-zCMeMXI4HS/tXvJz8vWGexpZj2YVtRAihHLk1imZj4efx1BQzN76YFeKqlDr3bUWI26wHwLWPd3rwh6pe4EV7g==} + '@esbuild/freebsd-x64@0.27.1': + resolution: {integrity: sha512-GITpD8dK9C+r+5yRT/UKVT36h/DQLOHdwGVwwoHidlnA168oD3uxA878XloXebK4Ul3gDBBIvEdL7go9gCUFzQ==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] @@ -867,8 +865,8 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.27.0': - resolution: {integrity: sha512-AS18v0V+vZiLJyi/4LphvBE+OIX682Pu7ZYNsdUHyUKSoRwdnOsMf6FDekwoAFKej14WAkOef3zAORJgAtXnlQ==} + '@esbuild/linux-arm64@0.27.1': + resolution: {integrity: sha512-W9//kCrh/6in9rWIBdKaMtuTTzNj6jSeG/haWBADqLLa9P8O5YSRDzgD5y9QBok4AYlzS6ARHifAb75V6G670Q==} engines: {node: '>=18'} cpu: [arm64] os: [linux] @@ -891,8 +889,8 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.27.0': - resolution: {integrity: sha512-t76XLQDpxgmq2cNXKTVEB7O7YMb42atj2Re2Haf45HkaUpjM2J0UuJZDuaGbPbamzZ7bawyGFUkodL+zcE+jvQ==} + '@esbuild/linux-arm@0.27.1': + resolution: {integrity: sha512-ieMID0JRZY/ZeCrsFQ3Y3NlHNCqIhTprJfDgSB3/lv5jJZ8FX3hqPyXWhe+gvS5ARMBJ242PM+VNz/ctNj//eA==} engines: {node: '>=18'} cpu: [arm] os: [linux] @@ -915,8 +913,8 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.27.0': - resolution: {integrity: sha512-Mz1jxqm/kfgKkc/KLHC5qIujMvnnarD9ra1cEcrs7qshTUSksPihGrWHVG5+osAIQ68577Zpww7SGapmzSt4Nw==} + '@esbuild/linux-ia32@0.27.1': + resolution: {integrity: sha512-VIUV4z8GD8rtSVMfAj1aXFahsi/+tcoXXNYmXgzISL+KB381vbSTNdeZHHHIYqFyXcoEhu9n5cT+05tRv13rlw==} engines: {node: '>=18'} cpu: [ia32] os: [linux] @@ -939,8 +937,8 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.27.0': - resolution: {integrity: sha512-QbEREjdJeIreIAbdG2hLU1yXm1uu+LTdzoq1KCo4G4pFOLlvIspBm36QrQOar9LFduavoWX2msNFAAAY9j4BDg==} + '@esbuild/linux-loong64@0.27.1': + resolution: {integrity: sha512-l4rfiiJRN7sTNI//ff65zJ9z8U+k6zcCg0LALU5iEWzY+a1mVZ8iWC1k5EsNKThZ7XCQ6YWtsZ8EWYm7r1UEsg==} engines: {node: '>=18'} cpu: [loong64] os: [linux] @@ -963,8 +961,8 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.27.0': - resolution: {integrity: sha512-sJz3zRNe4tO2wxvDpH/HYJilb6+2YJxo/ZNbVdtFiKDufzWq4JmKAiHy9iGoLjAV7r/W32VgaHGkk35cUXlNOg==} + '@esbuild/linux-mips64el@0.27.1': + resolution: {integrity: sha512-U0bEuAOLvO/DWFdygTHWY8C067FXz+UbzKgxYhXC0fDieFa0kDIra1FAhsAARRJbvEyso8aAqvPdNxzWuStBnA==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] @@ -987,8 +985,8 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.27.0': - resolution: {integrity: sha512-z9N10FBD0DCS2dmSABDBb5TLAyF1/ydVb+N4pi88T45efQ/w4ohr/F/QYCkxDPnkhkp6AIpIcQKQ8F0ANoA2JA==} + '@esbuild/linux-ppc64@0.27.1': + resolution: {integrity: sha512-NzdQ/Xwu6vPSf/GkdmRNsOfIeSGnh7muundsWItmBsVpMoNPVpM61qNzAVY3pZ1glzzAxLR40UyYM23eaDDbYQ==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] @@ -1011,8 +1009,8 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.27.0': - resolution: {integrity: sha512-pQdyAIZ0BWIC5GyvVFn5awDiO14TkT/19FTmFcPdDec94KJ1uZcmFs21Fo8auMXzD4Tt+diXu1LW1gHus9fhFQ==} + '@esbuild/linux-riscv64@0.27.1': + resolution: {integrity: sha512-7zlw8p3IApcsN7mFw0O1Z1PyEk6PlKMu18roImfl3iQHTnr/yAfYv6s4hXPidbDoI2Q0pW+5xeoM4eTCC0UdrQ==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] @@ -1035,8 +1033,8 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.27.0': - resolution: {integrity: sha512-hPlRWR4eIDDEci953RI1BLZitgi5uqcsjKMxwYfmi4LcwyWo2IcRP+lThVnKjNtk90pLS8nKdroXYOqW+QQH+w==} + '@esbuild/linux-s390x@0.27.1': + resolution: {integrity: sha512-cGj5wli+G+nkVQdZo3+7FDKC25Uh4ZVwOAK6A06Hsvgr8WqBBuOy/1s+PUEd/6Je+vjfm6stX0kmib5b/O2Ykw==} engines: {node: '>=18'} cpu: [s390x] os: [linux] @@ -1059,8 +1057,8 @@ packages: cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.27.0': - resolution: {integrity: sha512-1hBWx4OUJE2cab++aVZ7pObD6s+DK4mPGpemtnAORBvb5l/g5xFGk0vc0PjSkrDs0XaXj9yyob3d14XqvnQ4gw==} + '@esbuild/linux-x64@0.27.1': + resolution: {integrity: sha512-z3H/HYI9MM0HTv3hQZ81f+AKb+yEoCRlUby1F80vbQ5XdzEMyY/9iNlAmhqiBKw4MJXwfgsh7ERGEOhrM1niMA==} engines: {node: '>=18'} cpu: [x64] os: [linux] @@ -1071,8 +1069,8 @@ packages: cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-arm64@0.27.0': - resolution: {integrity: sha512-6m0sfQfxfQfy1qRuecMkJlf1cIzTOgyaeXaiVaaki8/v+WB+U4hc6ik15ZW6TAllRlg/WuQXxWj1jx6C+dfy3w==} + '@esbuild/netbsd-arm64@0.27.1': + resolution: {integrity: sha512-wzC24DxAvk8Em01YmVXyjl96Mr+ecTPyOuADAvjGg+fyBpGmxmcr2E5ttf7Im8D0sXZihpxzO1isus8MdjMCXQ==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] @@ -1095,8 +1093,8 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.27.0': - resolution: {integrity: sha512-xbbOdfn06FtcJ9d0ShxxvSn2iUsGd/lgPIO2V3VZIPDbEaIj1/3nBBe1AwuEZKXVXkMmpr6LUAgMkLD/4D2PPA==} + '@esbuild/netbsd-x64@0.27.1': + resolution: {integrity: sha512-1YQ8ybGi2yIXswu6eNzJsrYIGFpnlzEWRl6iR5gMgmsrR0FcNoV1m9k9sc3PuP5rUBLshOZylc9nqSgymI+TYg==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] @@ -1107,8 +1105,8 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-arm64@0.27.0': - resolution: {integrity: sha512-fWgqR8uNbCQ/GGv0yhzttj6sU/9Z5/Sv/VGU3F5OuXK6J6SlriONKrQ7tNlwBrJZXRYk5jUhuWvF7GYzGguBZQ==} + '@esbuild/openbsd-arm64@0.27.1': + resolution: {integrity: sha512-5Z+DzLCrq5wmU7RDaMDe2DVXMRm2tTDvX2KU14JJVBN2CT/qov7XVix85QoJqHltpvAOZUAc3ndU56HSMWrv8g==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] @@ -1131,8 +1129,8 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.27.0': - resolution: {integrity: sha512-aCwlRdSNMNxkGGqQajMUza6uXzR/U0dIl1QmLjPtRbLOx3Gy3otfFu/VjATy4yQzo9yFDGTxYDo1FfAD9oRD2A==} + '@esbuild/openbsd-x64@0.27.1': + resolution: {integrity: sha512-Q73ENzIdPF5jap4wqLtsfh8YbYSZ8Q0wnxplOlZUOyZy7B4ZKW8DXGWgTCZmF8VWD7Tciwv5F4NsRf6vYlZtqg==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] @@ -1143,8 +1141,8 @@ packages: cpu: [arm64] os: [openharmony] - '@esbuild/openharmony-arm64@0.27.0': - resolution: {integrity: sha512-nyvsBccxNAsNYz2jVFYwEGuRRomqZ149A39SHWk4hV0jWxKM0hjBPm3AmdxcbHiFLbBSwG6SbpIcUbXjgyECfA==} + '@esbuild/openharmony-arm64@0.27.1': + resolution: {integrity: sha512-ajbHrGM/XiK+sXM0JzEbJAen+0E+JMQZ2l4RR4VFwvV9JEERx+oxtgkpoKv1SevhjavK2z2ReHk32pjzktWbGg==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] @@ -1167,8 +1165,8 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.27.0': - resolution: {integrity: sha512-Q1KY1iJafM+UX6CFEL+F4HRTgygmEW568YMqDA5UV97AuZSm21b7SXIrRJDwXWPzr8MGr75fUZPV67FdtMHlHA==} + '@esbuild/sunos-x64@0.27.1': + resolution: {integrity: sha512-IPUW+y4VIjuDVn+OMzHc5FV4GubIwPnsz6ubkvN8cuhEqH81NovB53IUlrlBkPMEPxvNnf79MGBoz8rZ2iW8HA==} engines: {node: '>=18'} cpu: [x64] os: [sunos] @@ -1191,8 +1189,8 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.27.0': - resolution: {integrity: sha512-W1eyGNi6d+8kOmZIwi/EDjrL9nxQIQ0MiGqe/AWc6+IaHloxHSGoeRgDRKHFISThLmsewZ5nHFvGFWdBYlgKPg==} + '@esbuild/win32-arm64@0.27.1': + resolution: {integrity: sha512-RIVRWiljWA6CdVu8zkWcRmGP7iRRIIwvhDKem8UMBjPql2TXM5PkDVvvrzMtj1V+WFPB4K7zkIGM7VzRtFkjdg==} engines: {node: '>=18'} cpu: [arm64] os: [win32] @@ -1215,8 +1213,8 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.27.0': - resolution: {integrity: sha512-30z1aKL9h22kQhilnYkORFYt+3wp7yZsHWus+wSKAJR8JtdfI76LJ4SBdMsCopTR3z/ORqVu5L1vtnHZWVj4cQ==} + '@esbuild/win32-ia32@0.27.1': + resolution: {integrity: sha512-2BR5M8CPbptC1AK5JbJT1fWrHLvejwZidKx3UMSF0ecHMa+smhi16drIrCEggkgviBwLYd5nwrFLSl5Kho96RQ==} engines: {node: '>=18'} cpu: [ia32] os: [win32] @@ -1239,8 +1237,8 @@ packages: cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.27.0': - resolution: {integrity: sha512-aIitBcjQeyOhMTImhLZmtxfdOcuNRpwlPNmlFKPcHQYPhEssw75Cl1TSXJXpMkzaua9FUetx/4OQKq7eJul5Cg==} + '@esbuild/win32-x64@0.27.1': + resolution: {integrity: sha512-d5X6RMYv6taIymSk8JBP+nxv8DQAMY6A51GPgusqLdK9wBz5wWIXy1KjTck6HnjE9hqJzJRdk+1p/t5soSbCtw==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -1372,8 +1370,8 @@ packages: resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} engines: {node: '>=14'} - '@figma/code-connect@1.3.8': - resolution: {integrity: sha512-Yn5d8fUEnfYlaQ5PYJUQ6yeLoUuxZQ/yjN4C/1kY4GBjY1DHMOoYsG2M5/EHUBXAf0Q6JQFRX7d3kwa5Nc8svw==} + '@figma/code-connect@1.3.12': + resolution: {integrity: sha512-hQtBHRRCRxGLzlssT+7OwK63p+S+IWsq3tqlwtoYNwA2dp7UyppFA6YR/UTAxZFGrEvPO0Kyc8x/lldI6lvuJw==} engines: {node: '>=18'} hasBin: true @@ -1460,8 +1458,8 @@ packages: '@iconify/types@2.0.0': resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} - '@iconify/utils@3.0.2': - resolution: {integrity: sha512-EfJS0rLfVuRuJRn4psJHtK2A9TqVnkxPpHY6lYHiB9+8eSuudsxbwMiavocG45ujOo6FJ+CIRlRnlOGinzkaGQ==} + '@iconify/utils@3.1.0': + resolution: {integrity: sha512-Zlzem1ZXhI1iHeeERabLNzBHdOa4VhQbqAcOQaMKuTuyZCpwKbC2R4Dd0Zo3g9EAc+Y4fiarO8HIHRAth7+skw==} '@img/sharp-darwin-arm64@0.33.5': resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} @@ -1744,8 +1742,8 @@ packages: '@next/env@13.5.11': resolution: {integrity: sha512-fbb2C7HChgM7CemdCY+y3N1n8pcTKdqtQLbC7/EQtPdLvlMUT9JX/dBYl8MMZAtYG4uVMyPFHXckb68q/NRwqg==} - '@next/env@14.2.33': - resolution: {integrity: sha512-CgVHNZ1fRIlxkLhIX22flAZI/HmpDaZ8vwyJ/B0SDPTBuLZ1PJ+DWMjCHhqnExfmSQzA/PbZi8OAc7PAq2w9IA==} + '@next/env@14.2.35': + resolution: {integrity: sha512-DuhvCtj4t9Gwrx80dmz2F4t/zKQ4ktN8WrMwOuVzkJfBilwAwGr6v16M5eI8yCuZ63H9TTuEU09Iu2HqkzFPVQ==} '@next/eslint-plugin-next@13.4.9': resolution: {integrity: sha512-nDtGpa992tNyAkT/KmSMy7QkHfNZmGCBYhHtafU97DubqxzNdvLsqRtliQ4FU04CysRCtvP2hg8rRC1sAKUTUA==} @@ -1857,36 +1855,36 @@ packages: resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} engines: {node: '>=12.4.0'} - '@nomicfoundation/edr-darwin-arm64@0.12.0-next.14': - resolution: {integrity: sha512-sl0DibKSUOS7JXhUtaQ6FJUY+nk+uq5gx+Fyd9iiqs8awZPNn6KSuvV1EbWCi+yd3mrxgZ/wO8E77C1Dxj4xQA==} + '@nomicfoundation/edr-darwin-arm64@0.12.0-next.16': + resolution: {integrity: sha512-no/8BPVBzVxDGGbDba0zsAxQmVNIq6SLjKzzhCxVKt4tatArXa6+24mr4jXJEmhVBvTNpQsNBO+MMpuEDVaTzQ==} engines: {node: '>= 20'} - '@nomicfoundation/edr-darwin-x64@0.12.0-next.14': - resolution: {integrity: sha512-lfmatc1MSOaw0rDFB+ynnAGz5TWm3hSeY/+zDpPZghMODZelXm4JCqF41CQ6paLsW3X/pXcHM1HUGCUBWeoI/A==} + '@nomicfoundation/edr-darwin-x64@0.12.0-next.16': + resolution: {integrity: sha512-tf36YbcC6po3XYRbi+v0gjwzqg1MvyRqVUujNMXPHgjNWATXNRNOLyjwt2qDn+RD15qtzk70SHVnz9n9mPWzwg==} engines: {node: '>= 20'} - '@nomicfoundation/edr-linux-arm64-gnu@0.12.0-next.14': - resolution: {integrity: sha512-sWun3PhVgat8d4lg1d5MAXSIsFlSMBzvrpMSDFNOU9hPJEclSHbHBMRcarQuGqwm/5ZBzTwCS25u78A+UATTrg==} + '@nomicfoundation/edr-linux-arm64-gnu@0.12.0-next.16': + resolution: {integrity: sha512-Kr6t9icKSaKtPVbb0TjUcbn3XHqXOGIn+KjKKSSpm6542OkL0HyOi06amh6/8CNke9Gf6Lwion8UJ0aGQhnFwA==} engines: {node: '>= 20'} - '@nomicfoundation/edr-linux-arm64-musl@0.12.0-next.14': - resolution: {integrity: sha512-omWKioD8fFp7ayCeSDu2CqvG78+oYw8zdVECDwZVmE0jpszRCsTufNYflWRQnlGqH6GqjEUwq2c3yLxFgOTjFg==} + '@nomicfoundation/edr-linux-arm64-musl@0.12.0-next.16': + resolution: {integrity: sha512-HaStgfxctSg5PYF+6ooDICL1O59KrgM4XEUsIqoRrjrQax9HnMBXcB8eAj+0O52FWiO9FlchBni2dzh4RjQR2g==} engines: {node: '>= 20'} - '@nomicfoundation/edr-linux-x64-gnu@0.12.0-next.14': - resolution: {integrity: sha512-vk0s4SaC7s1wa98W24a4zqunTK/yIcSEnsSLRM/Nl+JJs6iqS8tvmnh/BbFINORMBJ065OWc10qw2Lsbu/rxtg==} + '@nomicfoundation/edr-linux-x64-gnu@0.12.0-next.16': + resolution: {integrity: sha512-8JPTxEZkwOPTgnN4uTWut9ze9R8rp7+T4IfmsKK9i+lDtdbJIxkrFY275YHG2BEYLd7Y5jTa/I4nC74ZpTAvpA==} engines: {node: '>= 20'} - '@nomicfoundation/edr-linux-x64-musl@0.12.0-next.14': - resolution: {integrity: sha512-/xKQD6c2RXQBIb30iTeh/NrMdYvHs6Nd+2UXS6wxlfX7GzRPOkpVDiDGD7Sda82JI459KH67dADOD6CpX8cpHQ==} + '@nomicfoundation/edr-linux-x64-musl@0.12.0-next.16': + resolution: {integrity: sha512-KugTrq3iHukbG64DuCYg8uPgiBtrrtX4oZSLba5sjocp0Ul6WWI1FeP1Qule+vClUrHSpJ+wR1G6SE7G0lyS/Q==} engines: {node: '>= 20'} - '@nomicfoundation/edr-win32-x64-msvc@0.12.0-next.14': - resolution: {integrity: sha512-GZcyGdOoLWnUtfPU+6B1vUi4fwf3bouSRf3xuKFHz3p/WNhpDK+8Esq3UmOmYAZWRgFT0ZR6XUk9H2owGDTVvQ==} + '@nomicfoundation/edr-win32-x64-msvc@0.12.0-next.16': + resolution: {integrity: sha512-Idy0ZjurxElfSmepUKXh6QdptLbW5vUNeIaydvqNogWoTbkJIM6miqZd9lXUy1TYxY7G4Rx5O50c52xc4pFwXQ==} engines: {node: '>= 20'} - '@nomicfoundation/edr@0.12.0-next.14': - resolution: {integrity: sha512-MGHY2x7JaNdkqlQxFBYoM7Miw2EqsQrI3ReVZMwLP5mULSRTAOnt3hCw6cnjXxGi991HnejNAedJofke6OdqqA==} + '@nomicfoundation/edr@0.12.0-next.16': + resolution: {integrity: sha512-bBL/nHmQwL1WCveALwg01VhJcpVVklJyunG1d/bhJbHgbjzAn6kohVJc7A6gFZegw+Rx38vdxpBkeCDjAEprzw==} engines: {node: '>= 20'} '@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.2': @@ -3016,113 +3014,113 @@ packages: resolution: {integrity: sha512-FqALmHI8D4o6lk/LRWDnhw95z5eO+eAa6ORjVg09YRR7BkcM6oPHU9uyC0gtQG5vpFLvgpeU4+zEAz2H8APHNw==} engines: {node: '>= 10'} - '@rollup/rollup-android-arm-eabi@4.53.2': - resolution: {integrity: sha512-yDPzwsgiFO26RJA4nZo8I+xqzh7sJTZIWQOxn+/XOdPE31lAvLIYCKqjV+lNH/vxE2L2iH3plKxDCRK6i+CwhA==} + '@rollup/rollup-android-arm-eabi@4.53.3': + resolution: {integrity: sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.53.2': - resolution: {integrity: sha512-k8FontTxIE7b0/OGKeSN5B6j25EuppBcWM33Z19JoVT7UTXFSo3D9CdU39wGTeb29NO3XxpMNauh09B+Ibw+9g==} + '@rollup/rollup-android-arm64@4.53.3': + resolution: {integrity: sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.53.2': - resolution: {integrity: sha512-A6s4gJpomNBtJ2yioj8bflM2oogDwzUiMl2yNJ2v9E7++sHrSrsQ29fOfn5DM/iCzpWcebNYEdXpaK4tr2RhfQ==} + '@rollup/rollup-darwin-arm64@4.53.3': + resolution: {integrity: sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.53.2': - resolution: {integrity: sha512-e6XqVmXlHrBlG56obu9gDRPW3O3hLxpwHpLsBJvuI8qqnsrtSZ9ERoWUXtPOkY8c78WghyPHZdmPhHLWNdAGEw==} + '@rollup/rollup-darwin-x64@4.53.3': + resolution: {integrity: sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.53.2': - resolution: {integrity: sha512-v0E9lJW8VsrwPux5Qe5CwmH/CF/2mQs6xU1MF3nmUxmZUCHazCjLgYvToOk+YuuUqLQBio1qkkREhxhc656ViA==} + '@rollup/rollup-freebsd-arm64@4.53.3': + resolution: {integrity: sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.53.2': - resolution: {integrity: sha512-ClAmAPx3ZCHtp6ysl4XEhWU69GUB1D+s7G9YjHGhIGCSrsg00nEGRRZHmINYxkdoJehde8VIsDC5t9C0gb6yqA==} + '@rollup/rollup-freebsd-x64@4.53.3': + resolution: {integrity: sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.53.2': - resolution: {integrity: sha512-EPlb95nUsz6Dd9Qy13fI5kUPXNSljaG9FiJ4YUGU1O/Q77i5DYFW5KR8g1OzTcdZUqQQ1KdDqsTohdFVwCwjqg==} + '@rollup/rollup-linux-arm-gnueabihf@4.53.3': + resolution: {integrity: sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.53.2': - resolution: {integrity: sha512-BOmnVW+khAUX+YZvNfa0tGTEMVVEerOxN0pDk2E6N6DsEIa2Ctj48FOMfNDdrwinocKaC7YXUZ1pHlKpnkja/Q==} + '@rollup/rollup-linux-arm-musleabihf@4.53.3': + resolution: {integrity: sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.53.2': - resolution: {integrity: sha512-Xt2byDZ+6OVNuREgBXr4+CZDJtrVso5woFtpKdGPhpTPHcNG7D8YXeQzpNbFRxzTVqJf7kvPMCub/pcGUWgBjA==} + '@rollup/rollup-linux-arm64-gnu@4.53.3': + resolution: {integrity: sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.53.2': - resolution: {integrity: sha512-+LdZSldy/I9N8+klim/Y1HsKbJ3BbInHav5qE9Iy77dtHC/pibw1SR/fXlWyAk0ThnpRKoODwnAuSjqxFRDHUQ==} + '@rollup/rollup-linux-arm64-musl@4.53.3': + resolution: {integrity: sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loong64-gnu@4.53.2': - resolution: {integrity: sha512-8ms8sjmyc1jWJS6WdNSA23rEfdjWB30LH8Wqj0Cqvv7qSHnvw6kgMMXRdop6hkmGPlyYBdRPkjJnj3KCUHV/uQ==} + '@rollup/rollup-linux-loong64-gnu@4.53.3': + resolution: {integrity: sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-ppc64-gnu@4.53.2': - resolution: {integrity: sha512-3HRQLUQbpBDMmzoxPJYd3W6vrVHOo2cVW8RUo87Xz0JPJcBLBr5kZ1pGcQAhdZgX9VV7NbGNipah1omKKe23/g==} + '@rollup/rollup-linux-ppc64-gnu@4.53.3': + resolution: {integrity: sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.53.2': - resolution: {integrity: sha512-fMjKi+ojnmIvhk34gZP94vjogXNNUKMEYs+EDaB/5TG/wUkoeua7p7VCHnE6T2Tx+iaghAqQX8teQzcvrYpaQA==} + '@rollup/rollup-linux-riscv64-gnu@4.53.3': + resolution: {integrity: sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.53.2': - resolution: {integrity: sha512-XuGFGU+VwUUV5kLvoAdi0Wz5Xbh2SrjIxCtZj6Wq8MDp4bflb/+ThZsVxokM7n0pcbkEr2h5/pzqzDYI7cCgLQ==} + '@rollup/rollup-linux-riscv64-musl@4.53.3': + resolution: {integrity: sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.53.2': - resolution: {integrity: sha512-w6yjZF0P+NGzWR3AXWX9zc0DNEGdtvykB03uhonSHMRa+oWA6novflo2WaJr6JZakG2ucsyb+rvhrKac6NIy+w==} + '@rollup/rollup-linux-s390x-gnu@4.53.3': + resolution: {integrity: sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.53.2': - resolution: {integrity: sha512-yo8d6tdfdeBArzC7T/PnHd7OypfI9cbuZzPnzLJIyKYFhAQ8SvlkKtKBMbXDxe1h03Rcr7u++nFS7tqXz87Gtw==} + '@rollup/rollup-linux-x64-gnu@4.53.3': + resolution: {integrity: sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.53.2': - resolution: {integrity: sha512-ah59c1YkCxKExPP8O9PwOvs+XRLKwh/mV+3YdKqQ5AMQ0r4M4ZDuOrpWkUaqO7fzAHdINzV9tEVu8vNw48z0lA==} + '@rollup/rollup-linux-x64-musl@4.53.3': + resolution: {integrity: sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==} cpu: [x64] os: [linux] - '@rollup/rollup-openharmony-arm64@4.53.2': - resolution: {integrity: sha512-4VEd19Wmhr+Zy7hbUsFZ6YXEiP48hE//KPLCSVNY5RMGX2/7HZ+QkN55a3atM1C/BZCGIgqN+xrVgtdak2S9+A==} + '@rollup/rollup-openharmony-arm64@4.53.3': + resolution: {integrity: sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.53.2': - resolution: {integrity: sha512-IlbHFYc/pQCgew/d5fslcy1KEaYVCJ44G8pajugd8VoOEI8ODhtb/j8XMhLpwHCMB3yk2J07ctup10gpw2nyMA==} + '@rollup/rollup-win32-arm64-msvc@4.53.3': + resolution: {integrity: sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.53.2': - resolution: {integrity: sha512-lNlPEGgdUfSzdCWU176ku/dQRnA7W+Gp8d+cWv73jYrb8uT7HTVVxq62DUYxjbaByuf1Yk0RIIAbDzp+CnOTFg==} + '@rollup/rollup-win32-ia32-msvc@4.53.3': + resolution: {integrity: sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.53.2': - resolution: {integrity: sha512-S6YojNVrHybQis2lYov1sd+uj7K0Q05NxHcGktuMMdIQ2VixGwAfbJ23NnlvvVV1bdpR2m5MsNBViHJKcA4ADw==} + '@rollup/rollup-win32-x64-gnu@4.53.3': + resolution: {integrity: sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.53.2': - resolution: {integrity: sha512-k+/Rkcyx//P6fetPoLMb8pBeqJBNGx81uuf7iljX9++yNBVRDQgD04L+SVXmXmh5ZP4/WOp4mWF0kmi06PW2tA==} + '@rollup/rollup-win32-x64-msvc@4.53.3': + resolution: {integrity: sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==} cpu: [x64] os: [win32] @@ -3187,32 +3185,32 @@ packages: '@shikijs/core@1.29.2': resolution: {integrity: sha512-vju0lY9r27jJfOY4Z7+Rt/nIOjzJpZ3y+nYpqtUZInVoXQ/TJZcfGnNOGnKjFdVZb8qexiCuSlZRKcGfhhTTZQ==} - '@shikijs/core@3.15.0': - resolution: {integrity: sha512-8TOG6yG557q+fMsSVa8nkEDOZNTSxjbbR8l6lF2gyr6Np+jrPlslqDxQkN6rMXCECQ3isNPZAGszAfYoJOPGlg==} + '@shikijs/core@3.20.0': + resolution: {integrity: sha512-f2ED7HYV4JEk827mtMDwe/yQ25pRiXZmtHjWF8uzZKuKiEsJR7Ce1nuQ+HhV9FzDcbIo4ObBCD9GPTzNuy9S1g==} '@shikijs/engine-javascript@1.29.2': resolution: {integrity: sha512-iNEZv4IrLYPv64Q6k7EPpOCE/nuvGiKl7zxdq0WFuRPF5PAE9PRo2JGq/d8crLusM59BRemJ4eOqrFrC4wiQ+A==} - '@shikijs/engine-javascript@3.15.0': - resolution: {integrity: sha512-ZedbOFpopibdLmvTz2sJPJgns8Xvyabe2QbmqMTz07kt1pTzfEvKZc5IqPVO/XFiEbbNyaOpjPBkkr1vlwS+qg==} + '@shikijs/engine-javascript@3.20.0': + resolution: {integrity: sha512-OFx8fHAZuk7I42Z9YAdZ95To6jDePQ9Rnfbw9uSRTSbBhYBp1kEOKv/3jOimcj3VRUKusDYM6DswLauwfhboLg==} '@shikijs/engine-oniguruma@1.29.2': resolution: {integrity: sha512-7iiOx3SG8+g1MnlzZVDYiaeHe7Ez2Kf2HrJzdmGwkRisT7r4rak0e655AcM/tF9JG/kg5fMNYlLLKglbN7gBqA==} - '@shikijs/engine-oniguruma@3.15.0': - resolution: {integrity: sha512-HnqFsV11skAHvOArMZdLBZZApRSYS4LSztk2K3016Y9VCyZISnlYUYsL2hzlS7tPqKHvNqmI5JSUJZprXloMvA==} + '@shikijs/engine-oniguruma@3.20.0': + resolution: {integrity: sha512-Yx3gy7xLzM0ZOjqoxciHjA7dAt5tyzJE3L4uQoM83agahy+PlW244XJSrmJRSBvGYELDhYXPacD4R/cauV5bzQ==} '@shikijs/langs@1.29.2': resolution: {integrity: sha512-FIBA7N3LZ+223U7cJDUYd5shmciFQlYkFXlkKVaHsCPgfVLiO+e12FmQE6Tf9vuyEsFe3dIl8qGWKXgEHL9wmQ==} - '@shikijs/langs@3.15.0': - resolution: {integrity: sha512-WpRvEFvkVvO65uKYW4Rzxs+IG0gToyM8SARQMtGGsH4GDMNZrr60qdggXrFOsdfOVssG/QQGEl3FnJ3EZ+8w8A==} + '@shikijs/langs@3.20.0': + resolution: {integrity: sha512-le+bssCxcSHrygCWuOrYJHvjus6zhQ2K7q/0mgjiffRbkhM4o1EWu2m+29l0yEsHDbWaWPNnDUTRVVBvBBeKaA==} '@shikijs/themes@1.29.2': resolution: {integrity: sha512-i9TNZlsq4uoyqSbluIcZkmPL9Bfi3djVxRnofUHwvx/h6SRW3cwgBC5SML7vsDcWyukY0eCzVN980rqP6qNl9g==} - '@shikijs/themes@3.15.0': - resolution: {integrity: sha512-8ow2zWb1IDvCKjYb0KiLNrK4offFdkfNVPXb1OZykpLCzRU6j+efkY+Y7VQjNlNFXonSw+4AOdGYtmqykDbRiQ==} + '@shikijs/themes@3.20.0': + resolution: {integrity: sha512-U1NSU7Sl26Q7ErRvJUouArxfM2euWqq1xaSrbqMu2iqa+tSp0D1Yah8216sDYbdDHw4C8b75UpE65eWorm2erQ==} '@shikijs/twoslash@1.29.2': resolution: {integrity: sha512-2S04ppAEa477tiaLfGEn1QJWbZUmbk8UoPbAEw4PifsrxkBXtAtOflIZJNtuCwz8ptc/TPxy7CO7gW4Uoi6o/g==} @@ -3220,8 +3218,8 @@ packages: '@shikijs/types@1.29.2': resolution: {integrity: sha512-VJjK0eIijTZf0QSTODEXCqinjBn0joAHQ+aPSBzrv4O2d/QSbsMw+ZeSRx03kV34Hy7NzUvV/7NqfYGRLrASmw==} - '@shikijs/types@3.15.0': - resolution: {integrity: sha512-BnP+y/EQnhihgHy4oIAN+6FFtmfTekwOLsQbRw9hOKwqgNy8Bdsjq8B05oAt/ZgvIWWFrshV71ytOrlPfYjIJw==} + '@shikijs/types@3.20.0': + resolution: {integrity: sha512-lhYAATn10nkZcBQ0BlzSbJA3wcmL5MXUUF8d2Zzon6saZDlToKaiRX60n2+ZaHJCmXEcZRWNzn+k9vplr8Jhsw==} '@shikijs/vscode-textmate@10.0.2': resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} @@ -3293,22 +3291,22 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@tanstack/query-core@5.90.8': - resolution: {integrity: sha512-4E0RP/0GJCxSNiRF2kAqE/LQkTJVlL/QNU7gIJSptaseV9HP6kOuA+N11y4bZKZxa3QopK3ZuewwutHx6DqDXQ==} + '@tanstack/query-core@5.90.12': + resolution: {integrity: sha512-T1/8t5DhV/SisWjDnaiU2drl6ySvsHj1bHBCWNXd+/T+Hh1cf6JodyEYMd5sgwm+b/mETT4EV3H+zCVczCU5hg==} - '@tanstack/react-query@5.90.8': - resolution: {integrity: sha512-/3b9QGzkf4rE5/miL6tyhldQRlLXzMHcySOm/2Tm2OLEFE9P1ImkH0+OviDBSvyAvtAOJocar5xhd7vxdLi3aQ==} + '@tanstack/react-query@5.90.12': + resolution: {integrity: sha512-graRZspg7EoEaw0a8faiUASCyJrqjKPdqJ9EwuDRUF9mEYJ1YPczI9H+/agJ0mOJkPCJDk0lsz5QTrLZ/jQ2rg==} peerDependencies: react: ^18 || ^19 - '@tanstack/react-virtual@3.13.12': - resolution: {integrity: sha512-Gd13QdxPSukP8ZrkbgS2RwoZseTTbQPLnQEn7HY/rqtM+8Zt95f7xKC7N0EsKs7aoz0WzZ+fditZux+F8EzYxA==} + '@tanstack/react-virtual@3.13.13': + resolution: {integrity: sha512-4o6oPMDvQv+9gMi8rE6gWmsOjtUZUYIJHv7EB+GblyYdi8U6OqLl8rhHWIUZSL1dUU2dPwTdTgybCKf9EjIrQg==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@tanstack/virtual-core@3.13.12': - resolution: {integrity: sha512-1YBOJfRHV4sXUmWsFSf5rQor4Ss82G8dQWLRbnk3GA4jeP8hQt1hxXh0tmflpC0dz3VgEv/1+qwPyLeWkQuPFA==} + '@tanstack/virtual-core@3.13.13': + resolution: {integrity: sha512-uQFoSdKKf5S8k51W5t7b2qpfkyIbdHMzAn+AMQvHPxKUPeo1SsGaA4JRISQT87jm28b7z8OEqPcg1IOZagQHcA==} '@theguild/remark-mermaid@0.1.3': resolution: {integrity: sha512-2FjVlaaKXK7Zj7UJAgOVTyaahn/3/EAfqYhyXg0BfDBVUl+lXcoIWRaxzqfnDr2rv8ax6GsC5mNh6hAaT86PDw==} @@ -3499,8 +3497,8 @@ packages: '@types/katex@0.16.7': resolution: {integrity: sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==} - '@types/lodash@4.17.20': - resolution: {integrity: sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==} + '@types/lodash@4.17.21': + resolution: {integrity: sha512-FOvQ0YPD5NOfPgMzJihoT+Za5pdkDJWcbpuj1DjaKZIr/gxodQjY/uWEFlTNqW2ugXHUiL8lRQgw63dzKHZdeQ==} '@types/mdast@4.0.4': resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} @@ -3518,8 +3516,8 @@ packages: '@types/nlcst@2.0.3': resolution: {integrity: sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==} - '@types/node@22.19.1': - resolution: {integrity: sha512-LCCV0HdSZZZb34qifBsyWlUmok6W7ouER+oQIGBScS8EsZsQbrtFTUrDX4hOl+CS6p7cnNC4td+qrSVGSCTUfQ==} + '@types/node@22.19.2': + resolution: {integrity: sha512-LPM2G3Syo1GLzXLGJAKdqoU35XvrWzGJ21/7sgZTUpbkBaOasTj8tjwn6w+hCkqaa1TfJ/w67rJSwYItlJ2mYw==} '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} @@ -3541,8 +3539,8 @@ packages: '@types/semver@7.7.1': resolution: {integrity: sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==} - '@types/styled-system@5.1.24': - resolution: {integrity: sha512-bItgWb7lQsynxuSoyfPj2LZCNB9aeRCv70NYvMKZN1xbcQ/j6IS2PWsIlQqkIzDQgHbdcrRbWEIg9vKlbbgnGw==} + '@types/styled-system@5.1.25': + resolution: {integrity: sha512-B1oyjE4oeAbVnkigcB0WqU2gPFuTwLV/KkLa/uJZWFB9JWVKq1Fs0QwodZXZ9Sq6cb9ngY4kDqRY/dictIchjA==} '@types/supports-color@8.1.3': resolution: {integrity: sha512-Hy6UMpxhE3j1tLpl27exp1XqHD7n8chAiNPzWfz16LPZoMMoSc4dzLl6w9qijkEb/r5O1ozdu1CWGA2L83ZeZg==} @@ -3630,8 +3628,8 @@ packages: resolution: {integrity: sha512-f6UIliwBbRsgVLxIaBANF6w09tYqc6Y/qXdsrbEmXHyFA7ILiKrIwRFXe1yOg8M3cksgVsO9N7yuL2DdCGQKBA==} engines: {node: '>=10'} - '@uniswap/sdk-core@7.9.0': - resolution: {integrity: sha512-HHUFNK3LMi4KMQCAiHkdUyL62g/nrZLvNT44CY8RN4p8kWO6XYWzqdQt6OcjCsIbhMZ/Ifhe6Py5oOoccg/jUQ==} + '@uniswap/sdk-core@7.10.0': + resolution: {integrity: sha512-tT0yYqcUxqFknVrcD97yFO2MHd810u4zK5IvGZiH2CpOwC82yeb5OSOIyePcP3iEl4V1Vp0gIhTzIL1TlALm2g==} engines: {node: '>=10'} '@uniswap/swap-router-contracts@1.3.1': @@ -3792,13 +3790,13 @@ packages: '@vitest/utils@2.1.9': resolution: {integrity: sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==} - '@web3icons/common@0.11.27': - resolution: {integrity: sha512-CWPzmBwp4WLuQRyfwso/pYaObX1Dem1TDEJiY3HJ9fOiRU2qtU9F6BQiumKpXD6PPUBNF7BAGUXafIxyZj6Rqg==} + '@web3icons/common@0.11.35': + resolution: {integrity: sha512-fBJOsmld+HYl1MJHM01FXAGPuIVPU5zbnBBCb0BDVtwtYpY4qi61GacBNtHd1v2+hC8ST6wRNgfeJIDTao5C/A==} peerDependencies: typescript: ^5.0.0 - '@web3icons/react@4.0.35': - resolution: {integrity: sha512-bKu/5Q58a3b22r3nR3yCchcZAXpAv0sS4s3Ja7CoNeTaaPLbAEYp5Md1fSWdCyutI8ia5VWDxPFvK3/xo4uyrA==} + '@web3icons/react@4.1.6': + resolution: {integrity: sha512-yR4rnjk9BG8Okaf9gMycajvZUHdLHcrKbLno6L1WRBh7Rsh+VKaAly1sY23C4iaa4rl0RsuwO7PHBsgBcnYb4Q==} peerDependencies: react: ^18.0.0 || ^19.0.0 @@ -3836,8 +3834,8 @@ packages: zod: optional: true - abitype@1.1.1: - resolution: {integrity: sha512-Loe5/6tAgsBukY95eGaPSDmQHIjRZYQq8PB1MpsNccDIK8WiV+Uw6WzaIXipvaxTEL2yEB0OpEaQv3gs8pkS9Q==} + abitype@1.2.2: + resolution: {integrity: sha512-4DOIMWscIB3j8hboLAUjLZCE8TMLdgecBpHFumfU4PdO/C1SBCVx4Nu1wPYXaL2iK8B0Jk3tiwnDLCpUtm3fZg==} peerDependencies: typescript: '>=5.0.4' zod: ^3.22.0 || ^4.0.0 @@ -3899,8 +3897,8 @@ packages: ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} - algoliasearch@5.43.0: - resolution: {integrity: sha512-hbkK41JsuGYhk+atBDxlcKxskjDCh3OOEDpdKZPtw+3zucBqhlojRG5e5KtCmByGyYvwZswVeaSWglgLn2fibg==} + algoliasearch@5.46.0: + resolution: {integrity: sha512-7ML6fa2K93FIfifG3GMWhDEwT5qQzPTmoHKCTvhzGEwdbQ4n0yYUWZlLYT75WllTGJCJtNUI0C1ybN4BCegqvg==} engines: {node: '>= 14.0.0'} ansi-align@3.0.1: @@ -4061,8 +4059,8 @@ packages: base64-sol@1.0.1: resolution: {integrity: sha512-ld3cCNMeXt4uJXmLZBHFGMvVpK9KsLVEhPpFRXnvSVAqABKbuNZg/+dsq3NuM+wxFLb/UrVkz7m1ciWmkMfTbg==} - baseline-browser-mapping@2.8.28: - resolution: {integrity: sha512-gYjt7OIqdM0PcttNYP2aVrr2G0bMALkBaoehD4BuRGjAOtipg0b6wHg1yNL+s5zSnLZZrGHOw4IrND8CD+3oIQ==} + baseline-browser-mapping@2.9.7: + resolution: {integrity: sha512-k9xFKplee6KIio3IDbwj+uaCLpqzOwakOgmqzPezM0sFJlFKcg30vk2wOiAJtkTSfx0SSQDSe8q+mWA/fSH5Zg==} hasBin: true bech32@1.1.4: @@ -4116,8 +4114,8 @@ packages: browser-stdout@1.3.1: resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} - browserslist@4.28.0: - resolution: {integrity: sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==} + browserslist@4.28.1: + resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -4172,8 +4170,8 @@ packages: camelize@1.0.1: resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} - caniuse-lite@1.0.30001754: - resolution: {integrity: sha512-x6OeBXueoAceOmotzx3PO4Zpt4rzpeIFsSr6AAePTZxSkXiYDUmpypEl7e2+8NCd9bD7bXjqyef8CJYPC1jfxg==} + caniuse-lite@1.0.30001760: + resolution: {integrity: sha512-7AAMPcueWELt1p3mi13HR/LHH0TJLT11cnwDJEs3xA4+CK/PLKeO9Kl1oru24htkyUKtkGCvAx4ohB0Ttry8Dw==} ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -4276,8 +4274,8 @@ packages: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} - color-convert@3.1.2: - resolution: {integrity: sha512-UNqkvCDXstVck3kdowtOTWROIJQwafjOfXSmddoDrXo4cewMKmusCeF22Q24zvjR8nwWib/3S/dfyzPItPEiJg==} + color-convert@3.1.3: + resolution: {integrity: sha512-fasDH2ont2GqF5HpyO4w0+BcewlhHEZOFn9c1ckZdHpJ56Qb7MHhH/IcJZbBGgvdtwdwNbLvxiBEdg336iA9Sg==} engines: {node: '>=14.6'} color-name@1.1.4: @@ -4290,16 +4288,16 @@ packages: color-string@1.9.1: resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} - color-string@2.1.2: - resolution: {integrity: sha512-RxmjYxbWemV9gKu4zPgiZagUxbH3RQpEIO77XoSSX0ivgABDZ+h8Zuash/EMFLTI4N9QgFPOJ6JQpPZKFxa+dA==} + color-string@2.1.4: + resolution: {integrity: sha512-Bb6Cq8oq0IjDOe8wJmi4JeNn763Xs9cfrBcaylK1tPypWzyoy2G3l90v9k64kjphl/ZJjPIShFztenRomi8WTg==} engines: {node: '>=18'} color@4.2.3: resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} engines: {node: '>=12.5.0'} - color@5.0.2: - resolution: {integrity: sha512-e2hz5BzbUPcYlIRHo8ieAhYgoajrJr+hWoceg6E345TPsATMUKqDgzt8fSXZJJbxfpiPzkWyphz8yn8At7q3fA==} + color@5.0.3: + resolution: {integrity: sha512-ezmVcLR3xAVp8kYOm4GS45ZLLgIE6SPAFoduLr6hTDajwb3KZ2F46gulK3XpcwRFb5KKGCSezCBAY4Dw4HsyXA==} engines: {node: '>=18'} combined-stream@1.0.8: @@ -4345,9 +4343,6 @@ packages: confbox@0.1.8: resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} - confbox@0.2.2: - resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} - consola@3.4.2: resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} engines: {node: ^14.18.0 || >=16.10.0} @@ -4373,9 +4368,6 @@ packages: resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} engines: {node: '>=10'} - cross-fetch@3.2.0: - resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==} - cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} @@ -4409,9 +4401,6 @@ packages: resolution: {integrity: sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==} engines: {node: '>=18'} - csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} @@ -4708,8 +4697,8 @@ packages: dom-helpers@5.2.1: resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} - dompurify@3.3.0: - resolution: {integrity: sha512-r+f6MYR1gGN1eJv0TVQbhA7if/U7P87cdPl3HN5rikqaBSBxLiCb/b9O+2eG0cxz0ghyU+mU1QkbsOwERMYlWQ==} + dompurify@3.3.1: + resolution: {integrity: sha512-qkdCKzLNtrgPFP1Vo+98FRzJnBRGe4ffyCea9IwHB1fyxPOeNTHpLKYGd4Uk9xvNoH0ZoOjwZxNptyMwqrId1Q==} dotenv@14.3.2: resolution: {integrity: sha512-vwEppIphpFdvaMCaHfCEv9IgwcxMljMw2TnAQBB4VWPvzXQLTb82jwmdOKzlEVUL3gNFT4l4TPKO+Bn+sqcrVQ==} @@ -4726,8 +4715,8 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - electron-to-chromium@1.5.250: - resolution: {integrity: sha512-/5UMj9IiGDMOFBnN4i7/Ry5onJrAGSbOGo3s9FEKmwobGq6xw832ccET0CE3CkkMBZ8GJSlUIesZofpyurqDXw==} + electron-to-chromium@1.5.267: + resolution: {integrity: sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==} elliptic@6.6.1: resolution: {integrity: sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==} @@ -4769,8 +4758,8 @@ packages: error-stack-parser@1.3.6: resolution: {integrity: sha512-xhuSYd8wLgOXwNgjcPeXMPL/IiiA1Huck+OPvClpJViVNNlJVtM41o+1emp7bPvlCJwCatFX2DWc05/DgfbWzA==} - es-abstract@1.24.0: - resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} + es-abstract@1.24.1: + resolution: {integrity: sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==} engines: {node: '>= 0.4'} es-define-property@1.0.1: @@ -4825,8 +4814,8 @@ packages: engines: {node: '>=18'} hasBin: true - esbuild@0.27.0: - resolution: {integrity: sha512-jd0f4NHbD6cALCyGElNpGAOtWxSq46l9X/sWB0Nzd5er4Kz2YTm+Vl0qKFT9KUJvD8+fiO8AvoHhFvEatfVixA==} + esbuild@0.27.1: + resolution: {integrity: sha512-yY35KZckJJuVVPXpvjgxiCuVEJT67F6zDeVTv4rizyPrfGBUpZQsvmxnN+C371c2esD/hNMjj4tpBhuueLN7aA==} engines: {node: '>=18'} hasBin: true @@ -5041,8 +5030,8 @@ packages: resolution: {integrity: sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==} engines: {node: '>=6'} - expect-type@1.2.2: - resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==} + expect-type@1.3.0: + resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} engines: {node: '>=12.0.0'} exsolve@1.0.8: @@ -5058,8 +5047,8 @@ packages: fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - fast-equals@5.3.3: - resolution: {integrity: sha512-/boTcHZeIAQ2r/tL11voclBHDeP9WPxLt+tyAbVSyyXuUFyh0Tne7gJZTqGbxnvj79TjLdCXLOY7UIPhyG5MTw==} + fast-equals@5.4.0: + resolution: {integrity: sha512-jt2DW/aNFNwke7AUd+Z+e6pz39KO5rzdbbFCg2sGafS4mk13MI7Z8O5z9cADNn5lhGODIgLwug6TZO2ctf7kcw==} engines: {node: '>=6.0.0'} fast-fuzzy@1.12.0: @@ -5078,8 +5067,8 @@ packages: fast-uri@3.1.0: resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} - fast-xml-parser@5.3.2: - resolution: {integrity: sha512-n8v8b6p4Z1sMgqRmqLJm3awW4NX7NkaKPfb3uJIBTSH7Pdvufi3PQ3/lJLQrvxcMYl7JI2jnDO90siPEpD8JBA==} + fast-xml-parser@5.3.3: + resolution: {integrity: sha512-2O3dkPAAC6JavuMm8+4+pgTk+5hoAs+CjZ+sWcQLkX9+/tHRuTkQh/Oaifr8qDmZ8iEHb771Ea6G8CdwkrgvYA==} hasBin: true fastq@1.19.1: @@ -5154,8 +5143,8 @@ packages: resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} engines: {node: '>=14'} - form-data@4.0.4: - resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} + form-data@4.0.5: + resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} engines: {node: '>= 6'} format@0.2.2: @@ -5168,8 +5157,8 @@ packages: fraction.js@5.3.4: resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==} - framer-motion@12.23.24: - resolution: {integrity: sha512-HMi5HRoRCTou+3fb3h9oTLyJGBxHfW+HnNE25tAXOvVx/IvwMHK0cx7IR4a2ZU6sh3IX1Z+4ts32PcYBOqka8w==} + framer-motion@12.23.26: + resolution: {integrity: sha512-cPcIhgR42xBn1Uj+PzOyheMtZ73H927+uWPDVhUMqxy8UHt6Okavb6xIz9J/phFUHUj0OncR6UvMfJTXoc/LKA==} peerDependencies: '@emotion/is-prop-valid': '*' react: ^18.0.0 || ^19.0.0 @@ -5259,8 +5248,13 @@ packages: glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - glob@10.4.5: - resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + glob@10.5.0: + resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} + hasBin: true + + glob@11.1.0: + resolution: {integrity: sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==} + engines: {node: 20 || >=22} hasBin: true glob@7.1.7: @@ -5280,10 +5274,6 @@ packages: resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} engines: {node: '>=8'} - globals@15.15.0: - resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} - engines: {node: '>=18'} - globalthis@1.0.4: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} @@ -5308,13 +5298,13 @@ packages: graphemesplit@2.6.0: resolution: {integrity: sha512-rG9w2wAfkpg0DILa1pjnjNfucng3usON360shisqIMUBw/87pojcBSrHmeE4UwryAuBih7g8m1oilf5/u8EWdQ==} - graphql-request@6.1.0: - resolution: {integrity: sha512-p+XPfS4q7aIpKVcgmnZKhMNqhltk20hfXtkaIkTfjjmiKMJ5xrt5c743cL03y/K7y1rg3WrIC49xGiEQ4mxdNw==} + graphql-request@7.1.2: + resolution: {integrity: sha512-+XE3iuC55C2di5ZUrB4pjgwe+nIQBuXVIK9J98wrVwojzDW3GMdSBZfxUk8l4j9TieIpjpggclxhNEU9ebGF8w==} peerDependencies: graphql: 14 - 16 - graphql-request@7.3.3: - resolution: {integrity: sha512-I0ZSz53XTpDiQZ0/KGElwfnzIqsdNek/D6tcZgheL8QOVeSbkgE3qG7r1G/MKtnNenWtEjHbsDf2iPlXSWxFtw==} + graphql-request@7.4.0: + resolution: {integrity: sha512-xfr+zFb/QYbs4l4ty0dltqiXIp07U6sl+tOKAb0t50/EnQek6CVVBLjETXi+FghElytvgaAWtIOt3EV7zLzIAQ==} peerDependencies: graphql: 14 - 16 @@ -5340,8 +5330,8 @@ packages: peerDependencies: hardhat: ^2.0.0 - hardhat@2.27.0: - resolution: {integrity: sha512-du7ecjx1/ueAUjvtZhVkJvWytPCjlagG3ZktYTphfzAbc1Flc6sRolw5mhKL/Loub1EIFRaflutM4bdB/YsUUw==} + hardhat@2.27.2: + resolution: {integrity: sha512-2N51AWD3Hg9T+4+A1zmJ70RkJgHzK+JYASrRtSmD3nVsoceYrFxwIJHUucw5fuy7Z9x9JTSMGO5dgCYe7MX8FQ==} hasBin: true peerDependencies: ts-node: '*' @@ -5415,8 +5405,8 @@ packages: hast-util-to-jsx-runtime@2.3.6: resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==} - hast-util-to-parse5@8.0.0: - resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==} + hast-util-to-parse5@8.0.1: + resolution: {integrity: sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==} hast-util-to-string@3.0.1: resolution: {integrity: sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==} @@ -5462,8 +5452,8 @@ packages: html-void-elements@3.0.0: resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} - http-errors@2.0.0: - resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + http-errors@2.0.1: + resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} engines: {node: '>= 0.8'} http-proxy-agent@7.0.2: @@ -5530,8 +5520,8 @@ packages: resolution: {integrity: sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - inline-style-parser@0.2.6: - resolution: {integrity: sha512-gtGXVaBdl5mAes3rPcMedEBm12ibjt1kDMFfheul1wUAOVEJW60voNdMVzVkfLN06O7ZaD/rxhfKgtlgtTbMjg==} + inline-style-parser@0.2.7: + resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==} internal-slot@1.1.0: resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} @@ -5764,6 +5754,10 @@ packages: jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + jackspeak@4.1.1: + resolution: {integrity: sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==} + engines: {node: 20 || >=22} + jest-image-snapshot@6.5.1: resolution: {integrity: sha512-xlJFufgfY2Z4DsRsjcnTwxuynvo1bKdhf4OfcEftNuUAK+BwSCUtPmwlBGJhQ0XJXfm9JMAi/4BhQiHbaV8HrA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -5790,8 +5784,8 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + js-yaml@3.14.2: + resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==} hasBin: true js-yaml@4.1.1: @@ -5853,8 +5847,8 @@ packages: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} - katex@0.16.25: - resolution: {integrity: sha512-woHRUZ/iF23GBP1dkDQMh1QBad9dmr8/PAwNA54VrSOVYgI12MAcE14TqnDdQOdzyEonGzMepYnqBMYdsoAr8Q==} + katex@0.16.27: + resolution: {integrity: sha512-aeQoDkuRWSqQN6nSvVCEFvfXdqo1OQiCmmW1kc9xSdjutPv7BGO7pqY9sQRJpMOGrEdfDgF2TfRXe5eUAD2Waw==} hasBin: true keccak@3.0.4: @@ -5879,9 +5873,6 @@ packages: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} - kolorist@1.8.0: - resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} - langium@3.3.1: resolution: {integrity: sha512-QJv/h939gDpvT+9SiLVlY7tZC3xB2qK57v0J04Sh9wpMb6MP1q8gB21L3WIo8T5P1MSMg3Ep14L7KkDCFG3y4w==} engines: {node: '>=16.0.0'} @@ -5928,10 +5919,6 @@ packages: resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - local-pkg@1.1.2: - resolution: {integrity: sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==} - engines: {node: '>=14'} - locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} @@ -5962,6 +5949,10 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + lru-cache@11.2.4: + resolution: {integrity: sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==} + engines: {node: 20 || >=22} + lru_map@0.3.3: resolution: {integrity: sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==} @@ -6039,8 +6030,8 @@ packages: mdast-util-phrasing@4.1.0: resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} - mdast-util-to-hast@13.2.0: - resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} + mdast-util-to-hast@13.2.1: + resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==} mdast-util-to-markdown@2.1.2: resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} @@ -6059,8 +6050,8 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - mermaid@11.12.1: - resolution: {integrity: sha512-UlIZrRariB11TY1RtTgUWp65tphtBv4CSq7vyS2ZZ2TgoMjs2nloq+wFqxiwcxlhHUvs7DPGgMjs2aeQxz5h9g==} + mermaid@11.12.2: + resolution: {integrity: sha512-n34QPDPEKmaeCG4WDMGy0OT6PSyxKCfy2pJgShP+Qow2KLrvWjclwbc3yXfSIf4BanqWEhQEpngWwNp/XhZt6w==} mhchemparser@4.2.1: resolution: {integrity: sha512-kYmyrCirqJf3zZ9t/0wGgRZ4/ZJw//VwaRVGA75C4nhE60vtnIzhl9J9ndkX/h6hxSN7pjg/cE0VxbnNM+bnDQ==} @@ -6270,8 +6261,8 @@ packages: motion-utils@12.23.6: resolution: {integrity: sha512-eAWoPgr4eFEOFfg2WjIsMoqJTW6Z8MTUCgn/GZ3VRpClWBdnbjryiA3ZSNLyxCTmCQx4RmYX6jX1iWHbenUPNQ==} - motion@12.23.24: - resolution: {integrity: sha512-Rc5E7oe2YZ72N//S3QXGzbnXgqNrTESv8KKxABR20q2FLch9gHLo0JLyYo2hZ238bZ9Gx6cWhj9VO0IgwbMjCw==} + motion@12.23.26: + resolution: {integrity: sha512-Ll8XhVxY8LXMVYTCfme27WH2GjBrCIzY4+ndr5QKxsK+YwCtOi2B/oBi5jcIbik5doXuWT/4KKDOVAZJkeY5VQ==} peerDependencies: '@emotion/is-prop-valid': '*' react: ^18.0.0 || ^19.0.0 @@ -6329,8 +6320,8 @@ packages: peerDependencies: next: '*' - next@14.2.33: - resolution: {integrity: sha512-GiKHLsD00t4ACm1p00VgrI0rUFAC9cRDGReKyERlM57aeEZkOQGcZTpIbsGn0b562FTPJWmYfKwplfO9EaT6ng==} + next@14.2.35: + resolution: {integrity: sha512-KhYd2Hjt/O1/1aZVX3dCwGXM1QmOV4eNM2UTacK5gipDdPN/oHHK/4oVGy7X8GMfPMsUTUEmGlsy0EY1YGAkig==} engines: {node: '>=18.17.0'} hasBin: true peerDependencies: @@ -6361,15 +6352,6 @@ packages: node-addon-api@2.0.2: resolution: {integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==} - node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - node-gyp-build@4.8.4: resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} hasBin: true @@ -6421,8 +6403,8 @@ packages: numeral@2.0.6: resolution: {integrity: sha512-qaKRmtYPZ5qdw4jWJD6bxEf1FJEqllJrwxCLIm0sQU/A7v2/czigzOb+C2uSiFsa9lBUzeH7M1oK+Q+OLxL3kA==} - nwsapi@2.2.22: - resolution: {integrity: sha512-ujSMe1OWVn55euT1ihwCI1ZcAaAU3nxUiDwfDQldc51ZXaB9m2AyOn6/jh1BLe2t/G8xd6uKG1UBF2aZJeg2SQ==} + nwsapi@2.2.23: + resolution: {integrity: sha512-7wfH4sLbt4M0gCDzGE6vzQBo0bfTKjU7Sfpqy/7gs1qBfYz2vEJH6vXcBKpO3+6Yu1telwd0t9HpyOoLEQQbIQ==} object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} @@ -6483,8 +6465,8 @@ packages: oniguruma-to-es@2.3.0: resolution: {integrity: sha512-bwALDxriqfKGfUufKGGepCzu9x7nJQuoRoAFp4AnwehhC2crqrDIAP/uN2qdlsAvSMpeRC3+Yzhqc7hLmle5+g==} - oniguruma-to-es@4.3.3: - resolution: {integrity: sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==} + oniguruma-to-es@4.3.4: + resolution: {integrity: sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA==} openapi-types@12.1.3: resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==} @@ -6532,8 +6514,8 @@ packages: package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - package-manager-detector@1.5.0: - resolution: {integrity: sha512-uBj69dVlYe/+wxj8JOpr97XfsxH/eumMt6HqjNTmJDf/6NO9s+0uxeOneIz3AsPt2m6y9PqzDzd3ATcU17MNfw==} + package-manager-detector@1.6.0: + resolution: {integrity: sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==} pako@0.2.9: resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} @@ -6597,6 +6579,10 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} + path-scurry@2.0.1: + resolution: {integrity: sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==} + engines: {node: 20 || >=22} + path-to-regexp@6.3.0: resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} @@ -6640,9 +6626,6 @@ packages: pkg-types@1.3.1: resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} - pkg-types@2.3.0: - resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} - pluralize@8.0.0: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} @@ -6720,8 +6703,8 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - prettier-plugin-tailwindcss@0.7.1: - resolution: {integrity: sha512-Bzv1LZcuiR1Sk02iJTS1QzlFNp/o5l2p3xkopwOrbPmtMeh3fK9rVW5M3neBQzHq+kGKj/4LGQMTNcTH4NGPtQ==} + prettier-plugin-tailwindcss@0.7.2: + resolution: {integrity: sha512-LkphyK3Fw+q2HdMOoiEHWf93fNtYJwfamoKPl7UwtjFQdei/iIBoX11G6j706FzN3ymX9mPVi97qIY8328vdnA==} engines: {node: '>=20.19'} peerDependencies: '@ianvs/prettier-plugin-sort-imports': '*' @@ -6780,8 +6763,8 @@ packages: engines: {node: '>=10.13.0'} hasBin: true - prettier@3.6.2: - resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} + prettier@3.7.4: + resolution: {integrity: sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==} engines: {node: '>=14'} hasBin: true @@ -6820,9 +6803,6 @@ packages: prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - property-information@6.5.0: - resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} - property-information@7.1.0: resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} @@ -6837,9 +6817,6 @@ packages: resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} engines: {node: '>=0.6'} - quansync@0.2.11: - resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} - querystringify@2.2.0: resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} @@ -6849,8 +6826,8 @@ packages: randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} - raw-body@2.5.2: - resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + raw-body@2.5.3: + resolution: {integrity: sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==} engines: {node: '>= 0.8'} react-aria@3.44.0: @@ -6899,8 +6876,8 @@ packages: react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - react-keyed-flatten-children@5.0.1: - resolution: {integrity: sha512-bZhTocogwo+q6zz3+HAQexckXhm+Ko8CaujKO6A138kVpRtF4xN8OmLE7F1Qv9YcDJrZ8gPXkJdM/VgcKjJimg==} + react-keyed-flatten-children@5.1.1: + resolution: {integrity: sha512-+DXMhjG0nbKq7AuWvAp1NUWCcg4jsUuBCdtDW8ySl45m3+MTjbXbR+TxvoM/1dTH7reSDqksBipkc/e/gpUnDg==} peerDependencies: react: '>=18.0.0' react-is: '>=18.0.0' @@ -6927,8 +6904,8 @@ packages: '@types/react': optional: true - react-remove-scroll@2.7.1: - resolution: {integrity: sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==} + react-remove-scroll@2.7.2: + resolution: {integrity: sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==} engines: {node: '>=10'} peerDependencies: '@types/react': '*' @@ -6959,8 +6936,8 @@ packages: react: '>=16.6.0' react-dom: '>=16.6.0' - react-virtuoso@4.14.1: - resolution: {integrity: sha512-NRUF1ak8lY+Tvc6WN9cce59gU+lilzVtOozP+pm9J7iHshLGGjsiAB4rB2qlBPHjFbcXOQpT+7womNHGDUql8w==} + react-virtuoso@4.17.0: + resolution: {integrity: sha512-od3pi2v13v31uzn5zPXC2u3ouISFCVhjFVFch2VvS2Cx7pWA2F1aJa3XhNTN2F07M3lhfnMnsmGeH+7wZICr7w==} peerDependencies: react: '>=16 || >=17 || >= 18 || >= 19' react-dom: '>=16 || >=17 || >= 18 || >=19' @@ -7031,8 +7008,8 @@ packages: regex@5.1.1: resolution: {integrity: sha512-dN5I359AVGPnwzJm2jN1k0W9LPZ+ePvoOeVMMfqIMFz53sSwXkxaJoxr50ptnsC771lK95BnTrVSZxq0b9yCGw==} - regex@6.0.1: - resolution: {integrity: sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==} + regex@6.1.0: + resolution: {integrity: sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==} regexp.prototype.flags@1.5.4: resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} @@ -7172,8 +7149,8 @@ packages: rollup-pluginutils@2.8.2: resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==} - rollup@4.53.2: - resolution: {integrity: sha512-MHngMYwGJVi6Fmnk6ISmnk7JAHRNF0UkuucA0CUW3N3a4KnONPEZz+vUanQP/ZC/iY1Qkf3bwPWzyY84wEks1g==} + rollup@4.53.3: + resolution: {integrity: sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -7281,8 +7258,8 @@ packages: shiki@1.29.2: resolution: {integrity: sha512-njXuliz/cP+67jU2hukkxCNuH1yUi4QfdZZY+sMr5PPrIyXSu5iTb/qYC4BiWWB0vZ+7TbdvYUCeL23zpwCfbg==} - shiki@3.15.0: - resolution: {integrity: sha512-kLdkY6iV3dYbtPwS9KXU7mjfmDm25f5m0IPNFnaXO7TBPcvbUOY72PYXSuSqDzwp+vlH/d7MXpHlKO/x+QoLXw==} + shiki@3.20.0: + resolution: {integrity: sha512-kgCOlsnyWb+p0WU+01RjkCH+eBVsjL1jOwUYWv0YDWkM2/A46+LDKVs5yZCUXjJG6bj4ndFoAg5iLIIue6dulg==} side-channel-list@1.0.0: resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} @@ -7409,8 +7386,8 @@ packages: stacktracey@2.1.8: resolution: {integrity: sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==} - statuses@2.0.1: - resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + statuses@2.0.2: + resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} engines: {node: '>= 0.8'} std-env@3.10.0: @@ -7500,14 +7477,14 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - strnum@2.1.1: - resolution: {integrity: sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==} + strnum@2.1.2: + resolution: {integrity: sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ==} - style-to-js@1.1.19: - resolution: {integrity: sha512-Ev+SgeqiNGT1ufsXyVC5RrJRXdrkRJ1Gol9Qw7Pb72YCKJXrBvP0ckZhBeVSrw2m06DJpei2528uIpjMb4TsoQ==} + style-to-js@1.1.21: + resolution: {integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==} - style-to-object@1.0.12: - resolution: {integrity: sha512-ddJqYnoT4t97QvN2C95bCgt+m7AAgXjVnkk/jxAfmp7EAB8nnqqZYEbMd3em7/vEomDb2LAQKAy1RFfv41mdNw==} + style-to-object@1.0.14: + resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==} styled-jsx@5.1.1: resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} @@ -7531,8 +7508,8 @@ packages: stylis@4.3.6: resolution: {integrity: sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==} - sucrase@3.35.0: - resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + sucrase@3.35.1: + resolution: {integrity: sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==} engines: {node: '>=16 || 14 >=14.17'} hasBin: true @@ -7566,8 +7543,8 @@ packages: tabbable@6.3.0: resolution: {integrity: sha512-EIHvdY5bPLuWForiR/AN2Bxngzpuwn1is4asboytXtpTgsArc+WmSJKVLlhdh71u7jFcryDqB2A8lQvj78MkyQ==} - tailwindcss@3.4.18: - resolution: {integrity: sha512-6A2rnmW5xZMdw11LYjhcI5846rt9pbLSabY5XPxo+XWdxwZaFEn47Go4NzFiHu9sNNmr/kXivP1vStfvMaK1GQ==} + tailwindcss@3.4.19: + resolution: {integrity: sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==} engines: {node: '>=14.0.0'} hasBin: true @@ -7645,9 +7622,6 @@ packages: resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} engines: {node: '>=6'} - tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - tr46@5.1.1: resolution: {integrity: sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==} engines: {node: '>=18'} @@ -7717,38 +7691,38 @@ packages: engines: {node: '>=18.0.0'} hasBin: true - turbo-darwin-64@2.6.1: - resolution: {integrity: sha512-Dm0HwhyZF4J0uLqkhUyCVJvKM9Rw7M03v3J9A7drHDQW0qAbIGBrUijQ8g4Q9Cciw/BXRRd8Uzkc3oue+qn+ZQ==} + turbo-darwin-64@2.6.3: + resolution: {integrity: sha512-BlJJDc1CQ7SK5Y5qnl7AzpkvKSnpkfPmnA+HeU/sgny3oHZckPV2776ebO2M33CYDSor7+8HQwaodY++IINhYg==} cpu: [x64] os: [darwin] - turbo-darwin-arm64@2.6.1: - resolution: {integrity: sha512-U0PIPTPyxdLsrC3jN7jaJUwgzX5sVUBsKLO7+6AL+OASaa1NbT1pPdiZoTkblBAALLP76FM0LlnsVQOnmjYhyw==} + turbo-darwin-arm64@2.6.3: + resolution: {integrity: sha512-MwVt7rBKiOK7zdYerenfCRTypefw4kZCue35IJga9CH1+S50+KTiCkT6LBqo0hHeoH2iKuI0ldTF2a0aB72z3w==} cpu: [arm64] os: [darwin] - turbo-linux-64@2.6.1: - resolution: {integrity: sha512-eM1uLWgzv89bxlK29qwQEr9xYWBhmO/EGiH22UGfq+uXr+QW1OvNKKMogSN65Ry8lElMH4LZh0aX2DEc7eC0Mw==} + turbo-linux-64@2.6.3: + resolution: {integrity: sha512-cqpcw+dXxbnPtNnzeeSyWprjmuFVpHJqKcs7Jym5oXlu/ZcovEASUIUZVN3OGEM6Y/OTyyw0z09tOHNt5yBAVg==} cpu: [x64] os: [linux] - turbo-linux-arm64@2.6.1: - resolution: {integrity: sha512-MFFh7AxAQAycXKuZDrbeutfWM5Ep0CEZ9u7zs4Hn2FvOViTCzIfEhmuJou3/a5+q5VX1zTxQrKGy+4Lf5cdpsA==} + turbo-linux-arm64@2.6.3: + resolution: {integrity: sha512-MterpZQmjXyr4uM7zOgFSFL3oRdNKeflY7nsjxJb2TklsYqiu3Z9pQ4zRVFFH8n0mLGna7MbQMZuKoWqqHb45w==} cpu: [arm64] os: [linux] - turbo-windows-64@2.6.1: - resolution: {integrity: sha512-buq7/VAN7KOjMYi4tSZT5m+jpqyhbRU2EUTTvp6V0Ii8dAkY2tAAjQN1q5q2ByflYWKecbQNTqxmVploE0LVwQ==} + turbo-windows-64@2.6.3: + resolution: {integrity: sha512-biDU70v9dLwnBdLf+daoDlNJVvqOOP8YEjqNipBHzgclbQlXbsi6Gqqelp5er81Qo3BiRgmTNx79oaZQTPb07Q==} cpu: [x64] os: [win32] - turbo-windows-arm64@2.6.1: - resolution: {integrity: sha512-7w+AD5vJp3R+FB0YOj1YJcNcOOvBior7bcHTodqp90S3x3bLgpr7tE6xOea1e8JkP7GK6ciKVUpQvV7psiwU5Q==} + turbo-windows-arm64@2.6.3: + resolution: {integrity: sha512-dDHVKpSeukah3VsI/xMEKeTnV9V9cjlpFSUs4bmsUiLu3Yv2ENlgVEZv65wxbeE0bh0jjpmElDT+P1KaCxArQQ==} cpu: [arm64] os: [win32] - turbo@2.6.1: - resolution: {integrity: sha512-qBwXXuDT3rA53kbNafGbT5r++BrhRgx3sAo0cHoDAeG9g1ItTmUMgltz3Hy7Hazy1ODqNpR+C7QwqL6DYB52yA==} + turbo@2.6.3: + resolution: {integrity: sha512-bf6YKUv11l5Xfcmg76PyWoy/e2vbkkxFNBGJSnfdSXQC33ZiUfutYh6IXidc5MhsnrFkWfdNNLyaRk+kHMLlwA==} hasBin: true twoslash-protocol@0.2.12: @@ -7905,8 +7879,8 @@ packages: unrs-resolver@1.11.1: resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==} - update-browserslist-db@1.1.4: - resolution: {integrity: sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==} + update-browserslist-db@1.2.2: + resolution: {integrity: sha512-E85pfNzMQ9jpKkA7+TJAi4TJN+tBCuWh5rUcS/sv6cFi+1q9LYDwDI5dpUL0u/73EElyQ8d3TEaeW4sPedBqYA==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -7995,8 +7969,8 @@ packages: victory-vendor@36.9.2: resolution: {integrity: sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==} - viem@2.39.0: - resolution: {integrity: sha512-rCN+IfnMESlrg/iPyyVL+M9NS/BHzyyNy72470tFmbTuscY3iPaZGMtJDcHKKV8TC6HV9DjWk0zWX6cpu0juyA==} + viem@2.41.2: + resolution: {integrity: sha512-LYliajglBe1FU6+EH9mSWozp+gRA/QcHfxeD9Odf83AdH5fwUS7DroH4gHvlv6Sshqi1uXrYFA2B/EOczxd15g==} peerDependencies: typescript: '>=5.0.4' peerDependenciesMeta: @@ -8097,9 +8071,6 @@ packages: web-namespaces@2.0.1: resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} - webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - webidl-conversions@7.0.0: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} engines: {node: '>=12'} @@ -8116,9 +8087,6 @@ packages: resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==} engines: {node: '>=18'} - whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - which-boxed-primitive@1.1.1: resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} engines: {node: '>= 0.4'} @@ -8244,8 +8212,8 @@ packages: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} - yaml@2.8.1: - resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==} + yaml@2.8.2: + resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==} engines: {node: '>= 14.6'} hasBin: true @@ -8293,8 +8261,8 @@ packages: zod@3.25.76: resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} - zod@4.1.12: - resolution: {integrity: sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==} + zod@4.1.13: + resolution: {integrity: sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==} zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} @@ -8305,127 +8273,125 @@ snapshots: '@adraffy/ens-normalize@1.11.1': {} - '@algolia/abtesting@1.9.0': + '@algolia/abtesting@1.12.0': dependencies: - '@algolia/client-common': 5.43.0 - '@algolia/requester-browser-xhr': 5.43.0 - '@algolia/requester-fetch': 5.43.0 - '@algolia/requester-node-http': 5.43.0 + '@algolia/client-common': 5.46.0 + '@algolia/requester-browser-xhr': 5.46.0 + '@algolia/requester-fetch': 5.46.0 + '@algolia/requester-node-http': 5.46.0 - '@algolia/autocomplete-core@1.17.9(@algolia/client-search@5.43.0)(algoliasearch@5.43.0)(search-insights@2.17.3)': + '@algolia/autocomplete-core@1.17.9(@algolia/client-search@5.46.0)(algoliasearch@5.46.0)(search-insights@2.17.3)': dependencies: - '@algolia/autocomplete-plugin-algolia-insights': 1.17.9(@algolia/client-search@5.43.0)(algoliasearch@5.43.0)(search-insights@2.17.3) - '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.43.0)(algoliasearch@5.43.0) + '@algolia/autocomplete-plugin-algolia-insights': 1.17.9(@algolia/client-search@5.46.0)(algoliasearch@5.46.0)(search-insights@2.17.3) + '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.46.0)(algoliasearch@5.46.0) transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - search-insights - '@algolia/autocomplete-plugin-algolia-insights@1.17.9(@algolia/client-search@5.43.0)(algoliasearch@5.43.0)(search-insights@2.17.3)': + '@algolia/autocomplete-plugin-algolia-insights@1.17.9(@algolia/client-search@5.46.0)(algoliasearch@5.46.0)(search-insights@2.17.3)': dependencies: - '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.43.0)(algoliasearch@5.43.0) + '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.46.0)(algoliasearch@5.46.0) search-insights: 2.17.3 transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - '@algolia/autocomplete-preset-algolia@1.17.9(@algolia/client-search@5.43.0)(algoliasearch@5.43.0)': + '@algolia/autocomplete-preset-algolia@1.17.9(@algolia/client-search@5.46.0)(algoliasearch@5.46.0)': dependencies: - '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.43.0)(algoliasearch@5.43.0) - '@algolia/client-search': 5.43.0 - algoliasearch: 5.43.0 + '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.46.0)(algoliasearch@5.46.0) + '@algolia/client-search': 5.46.0 + algoliasearch: 5.46.0 - '@algolia/autocomplete-shared@1.17.9(@algolia/client-search@5.43.0)(algoliasearch@5.43.0)': + '@algolia/autocomplete-shared@1.17.9(@algolia/client-search@5.46.0)(algoliasearch@5.46.0)': dependencies: - '@algolia/client-search': 5.43.0 - algoliasearch: 5.43.0 + '@algolia/client-search': 5.46.0 + algoliasearch: 5.46.0 - '@algolia/client-abtesting@5.43.0': + '@algolia/client-abtesting@5.46.0': dependencies: - '@algolia/client-common': 5.43.0 - '@algolia/requester-browser-xhr': 5.43.0 - '@algolia/requester-fetch': 5.43.0 - '@algolia/requester-node-http': 5.43.0 + '@algolia/client-common': 5.46.0 + '@algolia/requester-browser-xhr': 5.46.0 + '@algolia/requester-fetch': 5.46.0 + '@algolia/requester-node-http': 5.46.0 - '@algolia/client-analytics@5.43.0': + '@algolia/client-analytics@5.46.0': dependencies: - '@algolia/client-common': 5.43.0 - '@algolia/requester-browser-xhr': 5.43.0 - '@algolia/requester-fetch': 5.43.0 - '@algolia/requester-node-http': 5.43.0 + '@algolia/client-common': 5.46.0 + '@algolia/requester-browser-xhr': 5.46.0 + '@algolia/requester-fetch': 5.46.0 + '@algolia/requester-node-http': 5.46.0 - '@algolia/client-common@5.43.0': {} + '@algolia/client-common@5.46.0': {} - '@algolia/client-insights@5.43.0': + '@algolia/client-insights@5.46.0': dependencies: - '@algolia/client-common': 5.43.0 - '@algolia/requester-browser-xhr': 5.43.0 - '@algolia/requester-fetch': 5.43.0 - '@algolia/requester-node-http': 5.43.0 + '@algolia/client-common': 5.46.0 + '@algolia/requester-browser-xhr': 5.46.0 + '@algolia/requester-fetch': 5.46.0 + '@algolia/requester-node-http': 5.46.0 - '@algolia/client-personalization@5.43.0': + '@algolia/client-personalization@5.46.0': dependencies: - '@algolia/client-common': 5.43.0 - '@algolia/requester-browser-xhr': 5.43.0 - '@algolia/requester-fetch': 5.43.0 - '@algolia/requester-node-http': 5.43.0 + '@algolia/client-common': 5.46.0 + '@algolia/requester-browser-xhr': 5.46.0 + '@algolia/requester-fetch': 5.46.0 + '@algolia/requester-node-http': 5.46.0 - '@algolia/client-query-suggestions@5.43.0': + '@algolia/client-query-suggestions@5.46.0': dependencies: - '@algolia/client-common': 5.43.0 - '@algolia/requester-browser-xhr': 5.43.0 - '@algolia/requester-fetch': 5.43.0 - '@algolia/requester-node-http': 5.43.0 + '@algolia/client-common': 5.46.0 + '@algolia/requester-browser-xhr': 5.46.0 + '@algolia/requester-fetch': 5.46.0 + '@algolia/requester-node-http': 5.46.0 - '@algolia/client-search@5.43.0': + '@algolia/client-search@5.46.0': dependencies: - '@algolia/client-common': 5.43.0 - '@algolia/requester-browser-xhr': 5.43.0 - '@algolia/requester-fetch': 5.43.0 - '@algolia/requester-node-http': 5.43.0 + '@algolia/client-common': 5.46.0 + '@algolia/requester-browser-xhr': 5.46.0 + '@algolia/requester-fetch': 5.46.0 + '@algolia/requester-node-http': 5.46.0 - '@algolia/ingestion@1.43.0': + '@algolia/ingestion@1.46.0': dependencies: - '@algolia/client-common': 5.43.0 - '@algolia/requester-browser-xhr': 5.43.0 - '@algolia/requester-fetch': 5.43.0 - '@algolia/requester-node-http': 5.43.0 + '@algolia/client-common': 5.46.0 + '@algolia/requester-browser-xhr': 5.46.0 + '@algolia/requester-fetch': 5.46.0 + '@algolia/requester-node-http': 5.46.0 - '@algolia/monitoring@1.43.0': + '@algolia/monitoring@1.46.0': dependencies: - '@algolia/client-common': 5.43.0 - '@algolia/requester-browser-xhr': 5.43.0 - '@algolia/requester-fetch': 5.43.0 - '@algolia/requester-node-http': 5.43.0 + '@algolia/client-common': 5.46.0 + '@algolia/requester-browser-xhr': 5.46.0 + '@algolia/requester-fetch': 5.46.0 + '@algolia/requester-node-http': 5.46.0 - '@algolia/recommend@5.43.0': + '@algolia/recommend@5.46.0': dependencies: - '@algolia/client-common': 5.43.0 - '@algolia/requester-browser-xhr': 5.43.0 - '@algolia/requester-fetch': 5.43.0 - '@algolia/requester-node-http': 5.43.0 + '@algolia/client-common': 5.46.0 + '@algolia/requester-browser-xhr': 5.46.0 + '@algolia/requester-fetch': 5.46.0 + '@algolia/requester-node-http': 5.46.0 - '@algolia/requester-browser-xhr@5.43.0': + '@algolia/requester-browser-xhr@5.46.0': dependencies: - '@algolia/client-common': 5.43.0 + '@algolia/client-common': 5.46.0 - '@algolia/requester-fetch@5.43.0': + '@algolia/requester-fetch@5.46.0': dependencies: - '@algolia/client-common': 5.43.0 + '@algolia/client-common': 5.46.0 - '@algolia/requester-node-http@5.43.0': + '@algolia/requester-node-http@5.46.0': dependencies: - '@algolia/client-common': 5.43.0 + '@algolia/client-common': 5.46.0 '@alloc/quick-lru@5.2.0': {} '@antfu/install-pkg@1.1.0': dependencies: - package-manager-detector: 1.5.0 + package-manager-detector: 1.6.0 tinyexec: 1.0.2 - '@antfu/utils@9.3.0': {} - '@apidevtools/json-schema-ref-parser@13.0.5': dependencies: '@types/json-schema': 7.0.15 @@ -8554,7 +8520,7 @@ snapshots: '@cloudflare/workerd-windows-64@1.20250718.0': optional: true - '@cloudflare/workers-types@4.20251120.0': {} + '@cloudflare/workers-types@4.20251213.0': {} '@corex/deepmerge@4.0.43': {} @@ -8584,12 +8550,12 @@ snapshots: '@docsearch/css@3.9.0': {} - '@docsearch/react@3.9.0(@algolia/client-search@5.43.0)(@types/react@18.3.27)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)': + '@docsearch/react@3.9.0(@algolia/client-search@5.46.0)(@types/react@18.3.27)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)': dependencies: - '@algolia/autocomplete-core': 1.17.9(@algolia/client-search@5.43.0)(algoliasearch@5.43.0)(search-insights@2.17.3) - '@algolia/autocomplete-preset-algolia': 1.17.9(@algolia/client-search@5.43.0)(algoliasearch@5.43.0) + '@algolia/autocomplete-core': 1.17.9(@algolia/client-search@5.46.0)(algoliasearch@5.46.0)(search-insights@2.17.3) + '@algolia/autocomplete-preset-algolia': 1.17.9(@algolia/client-search@5.46.0)(algoliasearch@5.46.0) '@docsearch/css': 3.9.0 - algoliasearch: 5.43.0 + algoliasearch: 5.46.0 optionalDependencies: '@types/react': 18.3.27 react: 18.3.1 @@ -8598,13 +8564,13 @@ snapshots: transitivePeerDependencies: - '@algolia/client-search' - '@edgeandnode/common@7.0.4(hardhat@2.27.0(typescript@5.9.3))': + '@edgeandnode/common@7.0.4(hardhat@2.27.2(typescript@5.9.3))': dependencies: '@ethersproject/providers': 5.8.0 '@pinax/graph-networks-registry': 0.6.7 - '@uniswap/sdk-core': 7.9.0 + '@uniswap/sdk-core': 7.10.0 '@uniswap/v3-core': 1.0.1 - '@uniswap/v3-sdk': 3.26.0(hardhat@2.27.0(typescript@5.9.3)) + '@uniswap/v3-sdk': 3.26.0(hardhat@2.27.2(typescript@5.9.3)) dataloader: 2.2.3 dayjs: 1.11.19 decimal.js: 10.6.0 @@ -8618,15 +8584,14 @@ snapshots: - hardhat - utf-8-validate - '@edgeandnode/ens@2.3.1(typescript@5.9.3)(viem@2.39.0(typescript@5.9.3)(zod@3.25.76))': + '@edgeandnode/ens@2.3.1(typescript@5.9.3)(viem@2.41.2(typescript@5.9.3)(zod@3.25.76))': dependencies: - '@ensdomains/ensjs': 4.0.2(typescript@5.9.3)(viem@2.39.0(typescript@5.9.3)(zod@3.25.76))(zod@4.1.12) + '@ensdomains/ensjs': 4.2.0(typescript@5.9.3)(viem@2.41.2(typescript@5.9.3)(zod@3.25.76))(zod@4.1.13) graphql: 16.12.0 - graphql-request: 7.3.3(graphql@16.12.0) - viem: 2.39.0(typescript@5.9.3)(zod@3.25.76) - zod: 4.1.12 + graphql-request: 7.4.0(graphql@16.12.0) + viem: 2.41.2(typescript@5.9.3)(zod@3.25.76) + zod: 4.1.13 transitivePeerDependencies: - - encoding - typescript '@edgeandnode/eslint-config@2.0.3(eslint@8.57.1)(typescript@5.9.3)': @@ -8652,13 +8617,13 @@ snapshots: - eslint-plugin-import-x - supports-color - '@edgeandnode/gds@6.7.8(@emotion/is-prop-valid@0.8.8)(@emotion/react@11.14.0(@types/react@18.3.27)(react@18.3.1))(@theme-ui/core@0.17.2(@emotion/react@11.14.0(@types/react@18.3.27)(react@18.3.1))(react@18.3.1))(@types/react-dom@18.3.7(@types/react@18.3.27))(@types/react@18.3.27)(dayjs@1.11.19)(hardhat@2.27.0(typescript@5.9.3))(next@14.2.33(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(theme-ui@0.17.2(@emotion/react@11.14.0(@types/react@18.3.27)(react@18.3.1))(react@18.3.1))(tsx@4.20.4)(typescript@5.9.3)(yaml@2.8.1)': + '@edgeandnode/gds@6.8.1(@emotion/is-prop-valid@0.8.8)(@emotion/react@11.14.0(@types/react@18.3.27)(react@18.3.1))(@theme-ui/core@0.17.2(@emotion/react@11.14.0(@types/react@18.3.27)(react@18.3.1))(react@18.3.1))(@types/react-dom@18.3.7(@types/react@18.3.27))(@types/react@18.3.27)(dayjs@1.11.19)(hardhat@2.27.2(typescript@5.9.3))(next@14.2.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(theme-ui@0.17.2(@emotion/react@11.14.0(@types/react@18.3.27)(react@18.3.1))(react@18.3.1))(tsx@4.20.4)(typescript@5.9.3)(yaml@2.8.2)': dependencies: '@base-ui-components/react': 1.0.0-alpha.7(@types/react@18.3.27)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@bramus/style-observer': 2.0.2 - '@edgeandnode/common': 7.0.4(hardhat@2.27.0(typescript@5.9.3)) + '@edgeandnode/common': 7.0.4(hardhat@2.27.2(typescript@5.9.3)) '@emotion/react': 11.14.0(@types/react@18.3.27)(react@18.3.1) - '@figma/code-connect': 1.3.8 + '@figma/code-connect': 1.3.12 '@floating-ui/react-dom': 2.1.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@headlessui/react': 2.2.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@phosphor-icons/react': 2.1.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -8676,19 +8641,19 @@ snapshots: '@radix-ui/react-tooltip': 1.2.8(@types/react-dom@18.3.7(@types/react@18.3.27))(@types/react@18.3.27)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-aria/utils': 3.31.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-hookz/web': 25.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@tailwindcss/container-queries': 0.1.1(tailwindcss@3.4.18(tsx@4.20.4)(yaml@2.8.1)) + '@tailwindcss/container-queries': 0.1.1(tailwindcss@3.4.19(tsx@4.20.4)(yaml@2.8.2)) '@tanem/react-nprogress': 5.0.56(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@theme-ui/css': 0.17.2(@emotion/react@11.14.0(@types/react@18.3.27)(react@18.3.1)) '@theme-ui/match-media': 0.17.2(@theme-ui/core@0.17.2(@emotion/react@11.14.0(@types/react@18.3.27)(react@18.3.1))(react@18.3.1))(@theme-ui/css@0.17.2(@emotion/react@11.14.0(@types/react@18.3.27)(react@18.3.1)))(react@18.3.1) - '@web3icons/react': 4.0.35(react@18.3.1)(typescript@5.9.3) + '@web3icons/react': 4.1.6(react@18.3.1)(typescript@5.9.3) '@xstate/react': 3.2.2(@types/react@18.3.27)(react@18.3.1)(xstate@4.38.3) - color: 5.0.2 + color: 5.0.3 dayjs: 1.11.19 escape-string-regexp: 5.0.0 ethers: 5.8.0 lodash: 4.17.21 md5: 2.3.0 - motion: 12.23.24(@emotion/is-prop-valid@0.8.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + motion: 12.23.26(@emotion/is-prop-valid@0.8.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) numeral: 2.0.6 prism-react-renderer: 2.4.1(react@18.3.1) prismjs: 1.30.0 @@ -8699,18 +8664,18 @@ snapshots: react-dropzone: 14.3.8(react@18.3.1) react-ga4: 2.1.0 react-image-crop: 11.0.10(react@18.3.1) - react-keyed-flatten-children: 5.0.1(react-is@18.3.1)(react@18.3.1) + react-keyed-flatten-children: 5.1.1(react-is@18.3.1)(react@18.3.1) react-transition-group: 4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react-virtuoso: 4.14.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-virtuoso: 4.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) recharts: 2.15.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - shiki: 3.15.0 - tailwindcss: 3.4.18(tsx@4.20.4)(yaml@2.8.1) + shiki: 3.20.0 + tailwindcss: 3.4.19(tsx@4.20.4)(yaml@2.8.2) theme-ui: 0.17.2(@emotion/react@11.14.0(@types/react@18.3.27)(react@18.3.1))(react@18.3.1) typy: 3.3.0 universal-cookie: 7.2.2 xstate: 4.38.3 optionalDependencies: - next: 14.2.33(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 14.2.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1) transitivePeerDependencies: - '@emotion/is-prop-valid' - '@theme-ui/core' @@ -8728,11 +8693,11 @@ snapshots: - utf-8-validate - yaml - '@edgeandnode/go@10.3.12(e70f93497728a8960fcd273532040bed)': + '@edgeandnode/go@10.4.1(b7fbd4cfc283779f7cf7c16f0f72c4f6)': dependencies: - '@edgeandnode/common': 7.0.4(hardhat@2.27.0(typescript@5.9.3)) - '@edgeandnode/ens': 2.3.1(typescript@5.9.3)(viem@2.39.0(typescript@5.9.3)(zod@3.25.76)) - '@edgeandnode/gds': 6.7.8(@emotion/is-prop-valid@0.8.8)(@emotion/react@11.14.0(@types/react@18.3.27)(react@18.3.1))(@theme-ui/core@0.17.2(@emotion/react@11.14.0(@types/react@18.3.27)(react@18.3.1))(react@18.3.1))(@types/react-dom@18.3.7(@types/react@18.3.27))(@types/react@18.3.27)(dayjs@1.11.19)(hardhat@2.27.0(typescript@5.9.3))(next@14.2.33(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(theme-ui@0.17.2(@emotion/react@11.14.0(@types/react@18.3.27)(react@18.3.1))(react@18.3.1))(tsx@4.20.4)(typescript@5.9.3)(yaml@2.8.1) + '@edgeandnode/common': 7.0.4(hardhat@2.27.2(typescript@5.9.3)) + '@edgeandnode/ens': 2.3.1(typescript@5.9.3)(viem@2.41.2(typescript@5.9.3)(zod@3.25.76)) + '@edgeandnode/gds': 6.8.1(@emotion/is-prop-valid@0.8.8)(@emotion/react@11.14.0(@types/react@18.3.27)(react@18.3.1))(@theme-ui/core@0.17.2(@emotion/react@11.14.0(@types/react@18.3.27)(react@18.3.1))(react@18.3.1))(@types/react-dom@18.3.7(@types/react@18.3.27))(@types/react@18.3.27)(dayjs@1.11.19)(hardhat@2.27.2(typescript@5.9.3))(next@14.2.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(theme-ui@0.17.2(@emotion/react@11.14.0(@types/react@18.3.27)(react@18.3.1))(react@18.3.1))(tsx@4.20.4)(typescript@5.9.3)(yaml@2.8.2) '@emotion/react': 11.14.0(@types/react@18.3.27)(react@18.3.1) '@graphql-typed-document-node/core': 3.2.0(graphql@16.12.0) '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@18.3.7(@types/react@18.3.27))(@types/react@18.3.27)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -8740,19 +8705,19 @@ snapshots: '@radix-ui/react-navigation-menu': 1.2.14(@types/react-dom@18.3.7(@types/react@18.3.27))(@types/react@18.3.27)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-portal': 1.1.10(@types/react-dom@18.3.7(@types/react@18.3.27))(@types/react@18.3.27)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-aria/utils': 3.31.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@tanstack/react-query': 5.90.8(react@18.3.1) + '@tanstack/react-query': 5.90.12(react@18.3.1) '@theme-ui/css': 0.17.2(@emotion/react@11.14.0(@types/react@18.3.27)(react@18.3.1)) - '@web3icons/react': 4.0.35(react@18.3.1)(typescript@5.9.3) + '@web3icons/react': 4.1.6(react@18.3.1)(typescript@5.9.3) escape-string-regexp: 5.0.0 graphql: 16.12.0 - graphql-request: 7.3.3(graphql@16.12.0) - motion: 12.23.24(@emotion/is-prop-valid@0.8.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + graphql-request: 7.4.0(graphql@16.12.0) + motion: 12.23.26(@emotion/is-prop-valid@0.8.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - tailwindcss: 3.4.18(tsx@4.20.4)(yaml@2.8.1) + tailwindcss: 3.4.19(tsx@4.20.4)(yaml@2.8.2) theme-ui: 0.17.2(@emotion/react@11.14.0(@types/react@18.3.27)(react@18.3.1))(react@18.3.1) optionalDependencies: - next: 14.2.33(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 14.2.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1) transitivePeerDependencies: - '@emotion/is-prop-valid' - '@types/react' @@ -8761,13 +8726,13 @@ snapshots: - typescript - yaml - '@emnapi/core@1.7.0': + '@emnapi/core@1.7.1': dependencies: '@emnapi/wasi-threads': 1.1.0 tslib: 2.8.1 optional: true - '@emnapi/runtime@1.7.0': + '@emnapi/runtime@1.7.1': dependencies: tslib: 2.8.1 optional: true @@ -8835,7 +8800,7 @@ snapshots: '@emotion/memoize': 0.9.0 '@emotion/unitless': 0.10.0 '@emotion/utils': 1.4.2 - csstype: 3.1.3 + csstype: 3.2.3 '@emotion/sheet@1.4.0': {} @@ -8855,7 +8820,7 @@ snapshots: '@noble/hashes': 1.8.0 '@scure/base': 1.2.6 - '@ensdomains/address-encoder@1.1.1': + '@ensdomains/address-encoder@1.1.3': dependencies: '@noble/curves': 1.9.7 '@noble/hashes': 1.8.0 @@ -8873,21 +8838,20 @@ snapshots: dns-packet: 5.6.1 typescript-logging: 1.0.1 - '@ensdomains/ensjs@4.0.2(typescript@5.9.3)(viem@2.39.0(typescript@5.9.3)(zod@3.25.76))(zod@4.1.12)': + '@ensdomains/ensjs@4.2.0(typescript@5.9.3)(viem@2.41.2(typescript@5.9.3)(zod@3.25.76))(zod@4.1.13)': dependencies: '@adraffy/ens-normalize': 1.10.1 - '@ensdomains/address-encoder': 1.1.1 + '@ensdomains/address-encoder': 1.1.3 '@ensdomains/content-hash': 3.1.0-rc.1 '@ensdomains/dnsprovejs': 0.5.2 - abitype: 1.1.1(typescript@5.9.3)(zod@4.1.12) + abitype: 1.2.2(typescript@5.9.3)(zod@4.1.13) dns-packet: 5.6.1 graphql: 16.12.0 - graphql-request: 6.1.0(graphql@16.12.0) + graphql-request: 7.1.2(graphql@16.12.0) pako: 2.1.0 ts-pattern: 5.9.0 - viem: 2.39.0(typescript@5.9.3)(zod@3.25.76) + viem: 2.41.2(typescript@5.9.3)(zod@3.25.76) transitivePeerDependencies: - - encoding - typescript - zod @@ -8907,7 +8871,7 @@ snapshots: '@esbuild/aix-ppc64@0.25.12': optional: true - '@esbuild/aix-ppc64@0.27.0': + '@esbuild/aix-ppc64@0.27.1': optional: true '@esbuild/android-arm64@0.17.19': @@ -8919,7 +8883,7 @@ snapshots: '@esbuild/android-arm64@0.25.12': optional: true - '@esbuild/android-arm64@0.27.0': + '@esbuild/android-arm64@0.27.1': optional: true '@esbuild/android-arm@0.17.19': @@ -8931,7 +8895,7 @@ snapshots: '@esbuild/android-arm@0.25.12': optional: true - '@esbuild/android-arm@0.27.0': + '@esbuild/android-arm@0.27.1': optional: true '@esbuild/android-x64@0.17.19': @@ -8943,7 +8907,7 @@ snapshots: '@esbuild/android-x64@0.25.12': optional: true - '@esbuild/android-x64@0.27.0': + '@esbuild/android-x64@0.27.1': optional: true '@esbuild/darwin-arm64@0.17.19': @@ -8955,7 +8919,7 @@ snapshots: '@esbuild/darwin-arm64@0.25.12': optional: true - '@esbuild/darwin-arm64@0.27.0': + '@esbuild/darwin-arm64@0.27.1': optional: true '@esbuild/darwin-x64@0.17.19': @@ -8967,7 +8931,7 @@ snapshots: '@esbuild/darwin-x64@0.25.12': optional: true - '@esbuild/darwin-x64@0.27.0': + '@esbuild/darwin-x64@0.27.1': optional: true '@esbuild/freebsd-arm64@0.17.19': @@ -8979,7 +8943,7 @@ snapshots: '@esbuild/freebsd-arm64@0.25.12': optional: true - '@esbuild/freebsd-arm64@0.27.0': + '@esbuild/freebsd-arm64@0.27.1': optional: true '@esbuild/freebsd-x64@0.17.19': @@ -8991,7 +8955,7 @@ snapshots: '@esbuild/freebsd-x64@0.25.12': optional: true - '@esbuild/freebsd-x64@0.27.0': + '@esbuild/freebsd-x64@0.27.1': optional: true '@esbuild/linux-arm64@0.17.19': @@ -9003,7 +8967,7 @@ snapshots: '@esbuild/linux-arm64@0.25.12': optional: true - '@esbuild/linux-arm64@0.27.0': + '@esbuild/linux-arm64@0.27.1': optional: true '@esbuild/linux-arm@0.17.19': @@ -9015,7 +8979,7 @@ snapshots: '@esbuild/linux-arm@0.25.12': optional: true - '@esbuild/linux-arm@0.27.0': + '@esbuild/linux-arm@0.27.1': optional: true '@esbuild/linux-ia32@0.17.19': @@ -9027,7 +8991,7 @@ snapshots: '@esbuild/linux-ia32@0.25.12': optional: true - '@esbuild/linux-ia32@0.27.0': + '@esbuild/linux-ia32@0.27.1': optional: true '@esbuild/linux-loong64@0.17.19': @@ -9039,7 +9003,7 @@ snapshots: '@esbuild/linux-loong64@0.25.12': optional: true - '@esbuild/linux-loong64@0.27.0': + '@esbuild/linux-loong64@0.27.1': optional: true '@esbuild/linux-mips64el@0.17.19': @@ -9051,7 +9015,7 @@ snapshots: '@esbuild/linux-mips64el@0.25.12': optional: true - '@esbuild/linux-mips64el@0.27.0': + '@esbuild/linux-mips64el@0.27.1': optional: true '@esbuild/linux-ppc64@0.17.19': @@ -9063,7 +9027,7 @@ snapshots: '@esbuild/linux-ppc64@0.25.12': optional: true - '@esbuild/linux-ppc64@0.27.0': + '@esbuild/linux-ppc64@0.27.1': optional: true '@esbuild/linux-riscv64@0.17.19': @@ -9075,7 +9039,7 @@ snapshots: '@esbuild/linux-riscv64@0.25.12': optional: true - '@esbuild/linux-riscv64@0.27.0': + '@esbuild/linux-riscv64@0.27.1': optional: true '@esbuild/linux-s390x@0.17.19': @@ -9087,7 +9051,7 @@ snapshots: '@esbuild/linux-s390x@0.25.12': optional: true - '@esbuild/linux-s390x@0.27.0': + '@esbuild/linux-s390x@0.27.1': optional: true '@esbuild/linux-x64@0.17.19': @@ -9099,13 +9063,13 @@ snapshots: '@esbuild/linux-x64@0.25.12': optional: true - '@esbuild/linux-x64@0.27.0': + '@esbuild/linux-x64@0.27.1': optional: true '@esbuild/netbsd-arm64@0.25.12': optional: true - '@esbuild/netbsd-arm64@0.27.0': + '@esbuild/netbsd-arm64@0.27.1': optional: true '@esbuild/netbsd-x64@0.17.19': @@ -9117,13 +9081,13 @@ snapshots: '@esbuild/netbsd-x64@0.25.12': optional: true - '@esbuild/netbsd-x64@0.27.0': + '@esbuild/netbsd-x64@0.27.1': optional: true '@esbuild/openbsd-arm64@0.25.12': optional: true - '@esbuild/openbsd-arm64@0.27.0': + '@esbuild/openbsd-arm64@0.27.1': optional: true '@esbuild/openbsd-x64@0.17.19': @@ -9135,13 +9099,13 @@ snapshots: '@esbuild/openbsd-x64@0.25.12': optional: true - '@esbuild/openbsd-x64@0.27.0': + '@esbuild/openbsd-x64@0.27.1': optional: true '@esbuild/openharmony-arm64@0.25.12': optional: true - '@esbuild/openharmony-arm64@0.27.0': + '@esbuild/openharmony-arm64@0.27.1': optional: true '@esbuild/sunos-x64@0.17.19': @@ -9153,7 +9117,7 @@ snapshots: '@esbuild/sunos-x64@0.25.12': optional: true - '@esbuild/sunos-x64@0.27.0': + '@esbuild/sunos-x64@0.27.1': optional: true '@esbuild/win32-arm64@0.17.19': @@ -9165,7 +9129,7 @@ snapshots: '@esbuild/win32-arm64@0.25.12': optional: true - '@esbuild/win32-arm64@0.27.0': + '@esbuild/win32-arm64@0.27.1': optional: true '@esbuild/win32-ia32@0.17.19': @@ -9177,7 +9141,7 @@ snapshots: '@esbuild/win32-ia32@0.25.12': optional: true - '@esbuild/win32-ia32@0.27.0': + '@esbuild/win32-ia32@0.27.1': optional: true '@esbuild/win32-x64@0.17.19': @@ -9189,7 +9153,7 @@ snapshots: '@esbuild/win32-x64@0.25.12': optional: true - '@esbuild/win32-x64@0.27.0': + '@esbuild/win32-x64@0.27.1': optional: true '@eslint-community/eslint-utils@4.9.0(eslint@8.57.1)': @@ -9490,7 +9454,7 @@ snapshots: '@fastify/busboy@2.1.1': {} - '@figma/code-connect@1.3.8': + '@figma/code-connect@1.3.12': dependencies: boxen: 5.1.1 chalk: 4.1.2 @@ -9500,7 +9464,7 @@ snapshots: dotenv: 16.6.1 fast-fuzzy: 1.12.0 find-up: 5.0.0 - glob: 10.4.5 + glob: 11.1.0 jsdom: 24.1.3 lodash: 4.17.21 minimatch: 9.0.5 @@ -9598,7 +9562,7 @@ snapshots: '@floating-ui/react': 0.26.28(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-aria/focus': 3.21.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-aria/interactions': 3.25.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@tanstack/react-virtual': 3.13.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@tanstack/react-virtual': 3.13.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) use-sync-external-store: 1.6.0(react@18.3.1) @@ -9619,18 +9583,11 @@ snapshots: '@iconify/types@2.0.0': {} - '@iconify/utils@3.0.2': + '@iconify/utils@3.1.0': dependencies: '@antfu/install-pkg': 1.1.0 - '@antfu/utils': 9.3.0 '@iconify/types': 2.0.0 - debug: 4.4.3(supports-color@8.1.1) - globals: 15.15.0 - kolorist: 1.8.0 - local-pkg: 1.1.2 mlly: 1.8.0 - transitivePeerDependencies: - - supports-color '@img/sharp-darwin-arm64@0.33.5': optionalDependencies: @@ -9698,7 +9655,7 @@ snapshots: '@img/sharp-wasm32@0.33.5': dependencies: - '@emnapi/runtime': 1.7.0 + '@emnapi/runtime': 1.7.1 optional: true '@img/sharp-win32-ia32@0.33.5': @@ -9893,14 +9850,14 @@ snapshots: '@napi-rs/wasm-runtime@0.2.12': dependencies: - '@emnapi/core': 1.7.0 - '@emnapi/runtime': 1.7.0 + '@emnapi/core': 1.7.1 + '@emnapi/runtime': 1.7.1 '@tybys/wasm-util': 0.10.1 optional: true '@next/env@13.5.11': {} - '@next/env@14.2.33': {} + '@next/env@14.2.35': {} '@next/eslint-plugin-next@13.4.9': dependencies: @@ -9975,29 +9932,29 @@ snapshots: '@nolyfill/is-core-module@1.0.39': {} - '@nomicfoundation/edr-darwin-arm64@0.12.0-next.14': {} + '@nomicfoundation/edr-darwin-arm64@0.12.0-next.16': {} - '@nomicfoundation/edr-darwin-x64@0.12.0-next.14': {} + '@nomicfoundation/edr-darwin-x64@0.12.0-next.16': {} - '@nomicfoundation/edr-linux-arm64-gnu@0.12.0-next.14': {} + '@nomicfoundation/edr-linux-arm64-gnu@0.12.0-next.16': {} - '@nomicfoundation/edr-linux-arm64-musl@0.12.0-next.14': {} + '@nomicfoundation/edr-linux-arm64-musl@0.12.0-next.16': {} - '@nomicfoundation/edr-linux-x64-gnu@0.12.0-next.14': {} + '@nomicfoundation/edr-linux-x64-gnu@0.12.0-next.16': {} - '@nomicfoundation/edr-linux-x64-musl@0.12.0-next.14': {} + '@nomicfoundation/edr-linux-x64-musl@0.12.0-next.16': {} - '@nomicfoundation/edr-win32-x64-msvc@0.12.0-next.14': {} + '@nomicfoundation/edr-win32-x64-msvc@0.12.0-next.16': {} - '@nomicfoundation/edr@0.12.0-next.14': + '@nomicfoundation/edr@0.12.0-next.16': dependencies: - '@nomicfoundation/edr-darwin-arm64': 0.12.0-next.14 - '@nomicfoundation/edr-darwin-x64': 0.12.0-next.14 - '@nomicfoundation/edr-linux-arm64-gnu': 0.12.0-next.14 - '@nomicfoundation/edr-linux-arm64-musl': 0.12.0-next.14 - '@nomicfoundation/edr-linux-x64-gnu': 0.12.0-next.14 - '@nomicfoundation/edr-linux-x64-musl': 0.12.0-next.14 - '@nomicfoundation/edr-win32-x64-msvc': 0.12.0-next.14 + '@nomicfoundation/edr-darwin-arm64': 0.12.0-next.16 + '@nomicfoundation/edr-darwin-x64': 0.12.0-next.16 + '@nomicfoundation/edr-linux-arm64-gnu': 0.12.0-next.16 + '@nomicfoundation/edr-linux-arm64-musl': 0.12.0-next.16 + '@nomicfoundation/edr-linux-x64-gnu': 0.12.0-next.16 + '@nomicfoundation/edr-linux-x64-musl': 0.12.0-next.16 + '@nomicfoundation/edr-win32-x64-msvc': 0.12.0-next.16 '@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.2': optional: true @@ -10060,7 +10017,7 @@ snapshots: '@npmcli/map-workspaces@3.0.6': dependencies: '@npmcli/name-from-folder': 2.0.0 - glob: 10.4.5 + glob: 10.5.0 minimatch: 9.0.5 read-package-json-fast: 3.0.2 @@ -10069,7 +10026,7 @@ snapshots: '@npmcli/package-json@5.2.1': dependencies: '@npmcli/git': 5.0.8 - glob: 10.4.5 + glob: 10.5.0 hosted-git-info: 7.0.2 json-parse-even-better-errors: 3.0.2 normalize-package-data: 6.0.2 @@ -10201,7 +10158,7 @@ snapshots: aria-hidden: 1.2.6 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-remove-scroll: 2.7.1(@types/react@18.3.27)(react@18.3.1) + react-remove-scroll: 2.7.2(@types/react@18.3.27)(react@18.3.1) optionalDependencies: '@types/react': 18.3.27 '@types/react-dom': 18.3.7(@types/react@18.3.27) @@ -10294,7 +10251,7 @@ snapshots: aria-hidden: 1.2.6 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-remove-scroll: 2.7.1(@types/react@18.3.27)(react@18.3.1) + react-remove-scroll: 2.7.2(@types/react@18.3.27)(react@18.3.1) optionalDependencies: '@types/react': 18.3.27 '@types/react-dom': 18.3.7(@types/react@18.3.27) @@ -10339,7 +10296,7 @@ snapshots: aria-hidden: 1.2.6 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-remove-scroll: 2.7.1(@types/react@18.3.27)(react@18.3.1) + react-remove-scroll: 2.7.2(@types/react@18.3.27)(react@18.3.1) optionalDependencies: '@types/react': 18.3.27 '@types/react-dom': 18.3.7(@types/react@18.3.27) @@ -11574,70 +11531,70 @@ snapshots: '@resvg/resvg-wasm@2.6.2': {} - '@rollup/rollup-android-arm-eabi@4.53.2': + '@rollup/rollup-android-arm-eabi@4.53.3': optional: true - '@rollup/rollup-android-arm64@4.53.2': + '@rollup/rollup-android-arm64@4.53.3': optional: true - '@rollup/rollup-darwin-arm64@4.53.2': + '@rollup/rollup-darwin-arm64@4.53.3': optional: true - '@rollup/rollup-darwin-x64@4.53.2': + '@rollup/rollup-darwin-x64@4.53.3': optional: true - '@rollup/rollup-freebsd-arm64@4.53.2': + '@rollup/rollup-freebsd-arm64@4.53.3': optional: true - '@rollup/rollup-freebsd-x64@4.53.2': + '@rollup/rollup-freebsd-x64@4.53.3': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.53.2': + '@rollup/rollup-linux-arm-gnueabihf@4.53.3': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.53.2': + '@rollup/rollup-linux-arm-musleabihf@4.53.3': optional: true - '@rollup/rollup-linux-arm64-gnu@4.53.2': + '@rollup/rollup-linux-arm64-gnu@4.53.3': optional: true - '@rollup/rollup-linux-arm64-musl@4.53.2': + '@rollup/rollup-linux-arm64-musl@4.53.3': optional: true - '@rollup/rollup-linux-loong64-gnu@4.53.2': + '@rollup/rollup-linux-loong64-gnu@4.53.3': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.53.2': + '@rollup/rollup-linux-ppc64-gnu@4.53.3': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.53.2': + '@rollup/rollup-linux-riscv64-gnu@4.53.3': optional: true - '@rollup/rollup-linux-riscv64-musl@4.53.2': + '@rollup/rollup-linux-riscv64-musl@4.53.3': optional: true - '@rollup/rollup-linux-s390x-gnu@4.53.2': + '@rollup/rollup-linux-s390x-gnu@4.53.3': optional: true - '@rollup/rollup-linux-x64-gnu@4.53.2': + '@rollup/rollup-linux-x64-gnu@4.53.3': optional: true - '@rollup/rollup-linux-x64-musl@4.53.2': + '@rollup/rollup-linux-x64-musl@4.53.3': optional: true - '@rollup/rollup-openharmony-arm64@4.53.2': + '@rollup/rollup-openharmony-arm64@4.53.3': optional: true - '@rollup/rollup-win32-arm64-msvc@4.53.2': + '@rollup/rollup-win32-arm64-msvc@4.53.3': optional: true - '@rollup/rollup-win32-ia32-msvc@4.53.2': + '@rollup/rollup-win32-ia32-msvc@4.53.3': optional: true - '@rollup/rollup-win32-x64-gnu@4.53.2': + '@rollup/rollup-win32-x64-gnu@4.53.3': optional: true - '@rollup/rollup-win32-x64-msvc@4.53.2': + '@rollup/rollup-win32-x64-msvc@4.53.3': optional: true '@rtsao/scc@1.1.0': {} @@ -11662,7 +11619,7 @@ snapshots: '@scure/bip32@1.7.0': dependencies: - '@noble/curves': 1.9.7 + '@noble/curves': 1.9.1 '@noble/hashes': 1.8.0 '@scure/base': 1.2.6 @@ -11739,9 +11696,9 @@ snapshots: '@types/hast': 3.0.4 hast-util-to-html: 9.0.5 - '@shikijs/core@3.15.0': + '@shikijs/core@3.20.0': dependencies: - '@shikijs/types': 3.15.0 + '@shikijs/types': 3.20.0 '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 hast-util-to-html: 9.0.5 @@ -11752,37 +11709,37 @@ snapshots: '@shikijs/vscode-textmate': 10.0.2 oniguruma-to-es: 2.3.0 - '@shikijs/engine-javascript@3.15.0': + '@shikijs/engine-javascript@3.20.0': dependencies: - '@shikijs/types': 3.15.0 + '@shikijs/types': 3.20.0 '@shikijs/vscode-textmate': 10.0.2 - oniguruma-to-es: 4.3.3 + oniguruma-to-es: 4.3.4 '@shikijs/engine-oniguruma@1.29.2': dependencies: '@shikijs/types': 1.29.2 '@shikijs/vscode-textmate': 10.0.2 - '@shikijs/engine-oniguruma@3.15.0': + '@shikijs/engine-oniguruma@3.20.0': dependencies: - '@shikijs/types': 3.15.0 + '@shikijs/types': 3.20.0 '@shikijs/vscode-textmate': 10.0.2 '@shikijs/langs@1.29.2': dependencies: '@shikijs/types': 1.29.2 - '@shikijs/langs@3.15.0': + '@shikijs/langs@3.20.0': dependencies: - '@shikijs/types': 3.15.0 + '@shikijs/types': 3.20.0 '@shikijs/themes@1.29.2': dependencies: '@shikijs/types': 1.29.2 - '@shikijs/themes@3.15.0': + '@shikijs/themes@3.20.0': dependencies: - '@shikijs/types': 3.15.0 + '@shikijs/types': 3.20.0 '@shikijs/twoslash@1.29.2(typescript@5.9.3)': dependencies: @@ -11798,7 +11755,7 @@ snapshots: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 - '@shikijs/types@3.15.0': + '@shikijs/types@3.20.0': dependencies: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 @@ -11878,9 +11835,9 @@ snapshots: '@swc/counter': 0.1.3 tslib: 2.8.1 - '@tailwindcss/container-queries@0.1.1(tailwindcss@3.4.18(tsx@4.20.4)(yaml@2.8.1))': + '@tailwindcss/container-queries@0.1.1(tailwindcss@3.4.19(tsx@4.20.4)(yaml@2.8.2))': dependencies: - tailwindcss: 3.4.18(tsx@4.20.4)(yaml@2.8.1) + tailwindcss: 3.4.19(tsx@4.20.4)(yaml@2.8.2) '@tanem/react-nprogress@5.0.56(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: @@ -11889,28 +11846,26 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@tanstack/query-core@5.90.8': {} + '@tanstack/query-core@5.90.12': {} - '@tanstack/react-query@5.90.8(react@18.3.1)': + '@tanstack/react-query@5.90.12(react@18.3.1)': dependencies: - '@tanstack/query-core': 5.90.8 + '@tanstack/query-core': 5.90.12 react: 18.3.1 - '@tanstack/react-virtual@3.13.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@tanstack/react-virtual@3.13.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@tanstack/virtual-core': 3.13.12 + '@tanstack/virtual-core': 3.13.13 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@tanstack/virtual-core@3.13.12': {} + '@tanstack/virtual-core@3.13.13': {} '@theguild/remark-mermaid@0.1.3(react@18.3.1)': dependencies: - mermaid: 11.12.1 + mermaid: 11.12.2 react: 18.3.1 unist-util-visit: 5.0.0 - transitivePeerDependencies: - - supports-color '@theguild/remark-npm2yarn@0.3.3': dependencies: @@ -11934,7 +11889,7 @@ snapshots: '@theme-ui/core': 0.17.2(@emotion/react@11.14.0(@types/react@18.3.27)(react@18.3.1))(react@18.3.1) '@theme-ui/css': 0.17.2(@emotion/react@11.14.0(@types/react@18.3.27)(react@18.3.1)) '@theme-ui/theme-provider': 0.17.2(@emotion/react@11.14.0(@types/react@18.3.27)(react@18.3.1))(react@18.3.1) - '@types/styled-system': 5.1.24 + '@types/styled-system': 5.1.25 react: 18.3.1 '@theme-ui/core@0.17.2(@emotion/react@11.14.0(@types/react@18.3.27)(react@18.3.1))(react@18.3.1)': @@ -11947,7 +11902,7 @@ snapshots: '@theme-ui/css@0.17.2(@emotion/react@11.14.0(@types/react@18.3.27)(react@18.3.1))': dependencies: '@emotion/react': 11.14.0(@types/react@18.3.27)(react@18.3.1) - csstype: 3.1.3 + csstype: 3.2.3 '@theme-ui/global@0.17.2(@emotion/react@11.14.0(@types/react@18.3.27)(react@18.3.1))(react@18.3.1)': dependencies: @@ -11983,7 +11938,7 @@ snapshots: '@types/concat-stream@2.0.3': dependencies: - '@types/node': 22.19.1 + '@types/node': 22.19.2 '@types/cookie@0.6.0': {} @@ -12132,7 +12087,7 @@ snapshots: '@types/katex@0.16.7': {} - '@types/lodash@4.17.20': {} + '@types/lodash@4.17.21': {} '@types/mdast@4.0.4': dependencies: @@ -12152,7 +12107,7 @@ snapshots: dependencies: '@types/unist': 3.0.3 - '@types/node@22.19.1': + '@types/node@22.19.2': dependencies: undici-types: 6.21.0 @@ -12173,9 +12128,9 @@ snapshots: '@types/semver@7.7.1': {} - '@types/styled-system@5.1.24': + '@types/styled-system@5.1.25': dependencies: - csstype: 3.1.3 + csstype: 3.2.3 '@types/supports-color@8.1.3': {} @@ -12287,7 +12242,7 @@ snapshots: '@uniswap/lib@4.0.1-alpha': {} - '@uniswap/sdk-core@7.9.0': + '@uniswap/sdk-core@7.10.0': dependencies: '@ethersproject/address': 5.8.0 '@ethersproject/bytes': 5.8.0 @@ -12299,14 +12254,14 @@ snapshots: tiny-invariant: 1.3.3 toformat: 2.0.0 - '@uniswap/swap-router-contracts@1.3.1(hardhat@2.27.0(typescript@5.9.3))': + '@uniswap/swap-router-contracts@1.3.1(hardhat@2.27.2(typescript@5.9.3))': dependencies: '@openzeppelin/contracts': 3.4.2-solc-0.7 '@uniswap/v2-core': 1.0.1 '@uniswap/v3-core': 1.0.1 '@uniswap/v3-periphery': 1.4.4 dotenv: 14.3.2 - hardhat-watcher: 2.5.0(hardhat@2.27.0(typescript@5.9.3)) + hardhat-watcher: 2.5.0(hardhat@2.27.2(typescript@5.9.3)) transitivePeerDependencies: - hardhat @@ -12324,12 +12279,12 @@ snapshots: '@uniswap/v3-core': 1.0.1 base64-sol: 1.0.1 - '@uniswap/v3-sdk@3.26.0(hardhat@2.27.0(typescript@5.9.3))': + '@uniswap/v3-sdk@3.26.0(hardhat@2.27.2(typescript@5.9.3))': dependencies: '@ethersproject/abi': 5.8.0 '@ethersproject/solidity': 5.8.0 - '@uniswap/sdk-core': 7.9.0 - '@uniswap/swap-router-contracts': 1.3.1(hardhat@2.27.0(typescript@5.9.3)) + '@uniswap/sdk-core': 7.10.0 + '@uniswap/swap-router-contracts': 1.3.1(hardhat@2.27.2(typescript@5.9.3)) '@uniswap/v3-periphery': 1.4.4 '@uniswap/v3-staker': 1.0.0 tiny-invariant: 1.3.3 @@ -12411,13 +12366,13 @@ snapshots: chai: 5.3.3 tinyrainbow: 1.2.0 - '@vitest/mocker@2.1.9(vite@5.4.21(@types/node@22.19.1))': + '@vitest/mocker@2.1.9(vite@5.4.21(@types/node@22.19.2))': dependencies: '@vitest/spy': 2.1.9 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 5.4.21(@types/node@22.19.1) + vite: 5.4.21(@types/node@22.19.2) '@vitest/pretty-format@2.1.9': dependencies: @@ -12444,13 +12399,13 @@ snapshots: loupe: 3.2.1 tinyrainbow: 1.2.0 - '@web3icons/common@0.11.27(typescript@5.9.3)': + '@web3icons/common@0.11.35(typescript@5.9.3)': dependencies: typescript: 5.9.3 - '@web3icons/react@4.0.35(react@18.3.1)(typescript@5.9.3)': + '@web3icons/react@4.1.6(react@18.3.1)(typescript@5.9.3)': dependencies: - '@web3icons/common': 0.11.27(typescript@5.9.3) + '@web3icons/common': 0.11.35(typescript@5.9.3) react: 18.3.1 transitivePeerDependencies: - typescript @@ -12476,15 +12431,10 @@ snapshots: typescript: 5.9.3 zod: 3.25.76 - abitype@1.1.1(typescript@5.9.3)(zod@3.25.76): + abitype@1.2.2(typescript@5.9.3)(zod@4.1.13): optionalDependencies: typescript: 5.9.3 - zod: 3.25.76 - - abitype@1.1.1(typescript@5.9.3)(zod@4.1.12): - optionalDependencies: - typescript: 5.9.3 - zod: 4.1.12 + zod: 4.1.13 acorn-jsx@5.3.2(acorn@8.15.0): dependencies: @@ -12531,22 +12481,22 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - algoliasearch@5.43.0: - dependencies: - '@algolia/abtesting': 1.9.0 - '@algolia/client-abtesting': 5.43.0 - '@algolia/client-analytics': 5.43.0 - '@algolia/client-common': 5.43.0 - '@algolia/client-insights': 5.43.0 - '@algolia/client-personalization': 5.43.0 - '@algolia/client-query-suggestions': 5.43.0 - '@algolia/client-search': 5.43.0 - '@algolia/ingestion': 1.43.0 - '@algolia/monitoring': 1.43.0 - '@algolia/recommend': 5.43.0 - '@algolia/requester-browser-xhr': 5.43.0 - '@algolia/requester-fetch': 5.43.0 - '@algolia/requester-node-http': 5.43.0 + algoliasearch@5.46.0: + dependencies: + '@algolia/abtesting': 1.12.0 + '@algolia/client-abtesting': 5.46.0 + '@algolia/client-analytics': 5.46.0 + '@algolia/client-common': 5.46.0 + '@algolia/client-insights': 5.46.0 + '@algolia/client-personalization': 5.46.0 + '@algolia/client-query-suggestions': 5.46.0 + '@algolia/client-search': 5.46.0 + '@algolia/ingestion': 1.46.0 + '@algolia/monitoring': 1.46.0 + '@algolia/recommend': 5.46.0 + '@algolia/requester-browser-xhr': 5.46.0 + '@algolia/requester-fetch': 5.46.0 + '@algolia/requester-node-http': 5.46.0 ansi-align@3.0.1: dependencies: @@ -12599,7 +12549,7 @@ snapshots: call-bind: 1.0.8 call-bound: 1.0.4 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-object-atoms: 1.1.1 get-intrinsic: 1.3.0 is-string: 1.1.1 @@ -12613,7 +12563,7 @@ snapshots: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-errors: 1.3.0 es-object-atoms: 1.1.1 es-shim-unscopables: 1.1.0 @@ -12623,7 +12573,7 @@ snapshots: call-bind: 1.0.8 call-bound: 1.0.4 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-errors: 1.3.0 es-object-atoms: 1.1.1 es-shim-unscopables: 1.1.0 @@ -12632,21 +12582,21 @@ snapshots: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-shim-unscopables: 1.1.0 array.prototype.flatmap@1.3.3: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-shim-unscopables: 1.1.0 array.prototype.tosorted@1.1.4: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-errors: 1.3.0 es-shim-unscopables: 1.1.0 @@ -12655,7 +12605,7 @@ snapshots: array-buffer-byte-length: 1.0.2 call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-errors: 1.3.0 get-intrinsic: 1.3.0 is-array-buffer: 3.0.5 @@ -12678,8 +12628,8 @@ snapshots: autoprefixer@10.4.22(postcss@8.5.6): dependencies: - browserslist: 4.28.0 - caniuse-lite: 1.0.30001754 + browserslist: 4.28.1 + caniuse-lite: 1.0.30001760 fraction.js: 5.3.4 normalize-range: 0.1.2 picocolors: 1.1.1 @@ -12712,7 +12662,7 @@ snapshots: base64-sol@1.0.1: {} - baseline-browser-mapping@2.8.28: {} + baseline-browser-mapping@2.9.7: {} bech32@1.1.4: {} @@ -12776,13 +12726,13 @@ snapshots: browser-stdout@1.3.1: {} - browserslist@4.28.0: + browserslist@4.28.1: dependencies: - baseline-browser-mapping: 2.8.28 - caniuse-lite: 1.0.30001754 - electron-to-chromium: 1.5.250 + baseline-browser-mapping: 2.9.7 + caniuse-lite: 1.0.30001760 + electron-to-chromium: 1.5.267 node-releases: 2.0.27 - update-browserslist-db: 1.1.4(browserslist@4.28.0) + update-browserslist-db: 1.2.2(browserslist@4.28.1) buffer-from@1.1.2: {} @@ -12791,9 +12741,9 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 - bundle-require@5.1.0(esbuild@0.27.0): + bundle-require@5.1.0(esbuild@0.27.1): dependencies: - esbuild: 0.27.0 + esbuild: 0.27.1 load-tsconfig: 0.2.5 busboy@1.6.0: @@ -12829,7 +12779,7 @@ snapshots: camelize@1.0.1: {} - caniuse-lite@1.0.30001754: {} + caniuse-lite@1.0.30001760: {} ccount@2.0.1: {} @@ -12930,7 +12880,7 @@ snapshots: dependencies: color-name: 1.1.4 - color-convert@3.1.2: + color-convert@3.1.3: dependencies: color-name: 2.1.0 @@ -12944,7 +12894,7 @@ snapshots: simple-swizzle: 0.2.4 optional: true - color-string@2.1.2: + color-string@2.1.4: dependencies: color-name: 2.1.0 @@ -12954,10 +12904,10 @@ snapshots: color-string: 1.9.1 optional: true - color@5.0.2: + color@5.0.3: dependencies: - color-convert: 3.1.2 - color-string: 2.1.2 + color-convert: 3.1.3 + color-string: 2.1.4 combined-stream@1.0.8: dependencies: @@ -12990,8 +12940,6 @@ snapshots: confbox@0.1.8: {} - confbox@0.2.2: {} - consola@3.4.2: {} convert-source-map@1.9.0: {} @@ -13016,12 +12964,6 @@ snapshots: path-type: 4.0.0 yaml: 1.10.2 - cross-fetch@3.2.0: - dependencies: - node-fetch: 2.7.0 - transitivePeerDependencies: - - encoding - cross-spawn@7.0.6: dependencies: path-key: 3.1.1 @@ -13051,8 +12993,6 @@ snapshots: '@asamuzakjp/css-color': 3.2.0 rrweb-cssom: 0.8.0 - csstype@3.1.3: {} - csstype@3.2.3: {} cytoscape-cose-bilkent@4.1.0(cytoscape@3.33.1): @@ -13358,9 +13298,9 @@ snapshots: dom-helpers@5.2.1: dependencies: '@babel/runtime': 7.28.4 - csstype: 3.1.3 + csstype: 3.2.3 - dompurify@3.3.0: + dompurify@3.3.1: optionalDependencies: '@types/trusted-types': 2.0.7 @@ -13376,7 +13316,7 @@ snapshots: eastasianwidth@0.2.0: {} - electron-to-chromium@1.5.250: {} + electron-to-chromium@1.5.267: {} elliptic@6.6.1: dependencies: @@ -13417,7 +13357,7 @@ snapshots: dependencies: stackframe: 0.3.1 - es-abstract@1.24.0: + es-abstract@1.24.1: dependencies: array-buffer-byte-length: 1.0.2 arraybuffer.prototype.slice: 1.0.4 @@ -13483,7 +13423,7 @@ snapshots: call-bind: 1.0.8 call-bound: 1.0.4 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-errors: 1.3.0 es-set-tostringtag: 2.1.0 function-bind: 1.1.2 @@ -13614,34 +13554,34 @@ snapshots: '@esbuild/win32-ia32': 0.25.12 '@esbuild/win32-x64': 0.25.12 - esbuild@0.27.0: + esbuild@0.27.1: optionalDependencies: - '@esbuild/aix-ppc64': 0.27.0 - '@esbuild/android-arm': 0.27.0 - '@esbuild/android-arm64': 0.27.0 - '@esbuild/android-x64': 0.27.0 - '@esbuild/darwin-arm64': 0.27.0 - '@esbuild/darwin-x64': 0.27.0 - '@esbuild/freebsd-arm64': 0.27.0 - '@esbuild/freebsd-x64': 0.27.0 - '@esbuild/linux-arm': 0.27.0 - '@esbuild/linux-arm64': 0.27.0 - '@esbuild/linux-ia32': 0.27.0 - '@esbuild/linux-loong64': 0.27.0 - '@esbuild/linux-mips64el': 0.27.0 - '@esbuild/linux-ppc64': 0.27.0 - '@esbuild/linux-riscv64': 0.27.0 - '@esbuild/linux-s390x': 0.27.0 - '@esbuild/linux-x64': 0.27.0 - '@esbuild/netbsd-arm64': 0.27.0 - '@esbuild/netbsd-x64': 0.27.0 - '@esbuild/openbsd-arm64': 0.27.0 - '@esbuild/openbsd-x64': 0.27.0 - '@esbuild/openharmony-arm64': 0.27.0 - '@esbuild/sunos-x64': 0.27.0 - '@esbuild/win32-arm64': 0.27.0 - '@esbuild/win32-ia32': 0.27.0 - '@esbuild/win32-x64': 0.27.0 + '@esbuild/aix-ppc64': 0.27.1 + '@esbuild/android-arm': 0.27.1 + '@esbuild/android-arm64': 0.27.1 + '@esbuild/android-x64': 0.27.1 + '@esbuild/darwin-arm64': 0.27.1 + '@esbuild/darwin-x64': 0.27.1 + '@esbuild/freebsd-arm64': 0.27.1 + '@esbuild/freebsd-x64': 0.27.1 + '@esbuild/linux-arm': 0.27.1 + '@esbuild/linux-arm64': 0.27.1 + '@esbuild/linux-ia32': 0.27.1 + '@esbuild/linux-loong64': 0.27.1 + '@esbuild/linux-mips64el': 0.27.1 + '@esbuild/linux-ppc64': 0.27.1 + '@esbuild/linux-riscv64': 0.27.1 + '@esbuild/linux-s390x': 0.27.1 + '@esbuild/linux-x64': 0.27.1 + '@esbuild/netbsd-arm64': 0.27.1 + '@esbuild/netbsd-x64': 0.27.1 + '@esbuild/openbsd-arm64': 0.27.1 + '@esbuild/openbsd-x64': 0.27.1 + '@esbuild/openharmony-arm64': 0.27.1 + '@esbuild/sunos-x64': 0.27.1 + '@esbuild/win32-arm64': 0.27.1 + '@esbuild/win32-ia32': 0.27.1 + '@esbuild/win32-x64': 0.27.1 escalade@3.2.0: {} @@ -13994,7 +13934,7 @@ snapshots: exit-hook@2.2.1: {} - expect-type@1.2.2: {} + expect-type@1.3.0: {} exsolve@1.0.8: {} @@ -14006,7 +13946,7 @@ snapshots: fast-deep-equal@3.1.3: {} - fast-equals@5.3.3: {} + fast-equals@5.4.0: {} fast-fuzzy@1.12.0: dependencies: @@ -14026,9 +13966,9 @@ snapshots: fast-uri@3.1.0: {} - fast-xml-parser@5.3.2: + fast-xml-parser@5.3.3: dependencies: - strnum: 2.1.1 + strnum: 2.1.2 fastq@1.19.1: dependencies: @@ -14072,7 +14012,7 @@ snapshots: dependencies: magic-string: 0.30.21 mlly: 1.8.0 - rollup: 4.53.2 + rollup: 4.53.3 flat-cache@3.2.0: dependencies: @@ -14097,7 +14037,7 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 - form-data@4.0.4: + form-data@4.0.5: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 @@ -14111,7 +14051,7 @@ snapshots: fraction.js@5.3.4: {} - framer-motion@12.23.24(@emotion/is-prop-valid@0.8.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + framer-motion@12.23.26(@emotion/is-prop-valid@0.8.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: motion-dom: 12.23.23 motion-utils: 12.23.6 @@ -14202,7 +14142,7 @@ snapshots: glob-to-regexp@0.4.1: {} - glob@10.4.5: + glob@10.5.0: dependencies: foreground-child: 3.3.1 jackspeak: 3.4.3 @@ -14211,6 +14151,15 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 1.11.1 + glob@11.1.0: + dependencies: + foreground-child: 3.3.1 + jackspeak: 4.1.1 + minimatch: 10.1.1 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 2.0.1 + glob@7.1.7: dependencies: fs.realpath: 1.0.0 @@ -14241,8 +14190,6 @@ snapshots: dependencies: type-fest: 0.20.2 - globals@15.15.0: {} - globalthis@1.0.4: dependencies: define-properties: 1.2.1 @@ -14270,15 +14217,12 @@ snapshots: js-base64: 3.7.8 unicode-trie: 2.0.0 - graphql-request@6.1.0(graphql@16.12.0): + graphql-request@7.1.2(graphql@16.12.0): dependencies: '@graphql-typed-document-node/core': 3.2.0(graphql@16.12.0) - cross-fetch: 3.2.0 graphql: 16.12.0 - transitivePeerDependencies: - - encoding - graphql-request@7.3.3(graphql@16.12.0): + graphql-request@7.4.0(graphql@16.12.0): dependencies: '@graphql-typed-document-node/core': 3.2.0(graphql@16.12.0) graphql: 16.12.0 @@ -14292,23 +14236,23 @@ snapshots: gray-matter@4.0.3: dependencies: - js-yaml: 3.14.1 + js-yaml: 3.14.2 kind-of: 6.0.3 section-matter: 1.0.0 strip-bom-string: 1.0.0 hachure-fill@0.5.2: {} - hardhat-watcher@2.5.0(hardhat@2.27.0(typescript@5.9.3)): + hardhat-watcher@2.5.0(hardhat@2.27.2(typescript@5.9.3)): dependencies: chokidar: 3.6.0 - hardhat: 2.27.0(typescript@5.9.3) + hardhat: 2.27.2(typescript@5.9.3) - hardhat@2.27.0(typescript@5.9.3): + hardhat@2.27.2(typescript@5.9.3): dependencies: '@ethereumjs/util': 9.1.0 '@ethersproject/abi': 5.8.0 - '@nomicfoundation/edr': 0.12.0-next.14 + '@nomicfoundation/edr': 0.12.0-next.16 '@nomicfoundation/solidity-analyzer': 0.1.2 '@sentry/node': 5.30.0 adm-zip: 0.4.16 @@ -14334,7 +14278,7 @@ snapshots: mocha: 10.8.2 p-map: 4.0.0 picocolors: 1.1.1 - raw-body: 2.5.2 + raw-body: 2.5.3 resolve: 1.17.0 semver: 6.3.1 solc: 0.8.26(debug@4.4.3) @@ -14429,7 +14373,7 @@ snapshots: mdast-util-mdx-jsx: 3.2.0 property-information: 7.1.0 space-separated-tokens: 2.0.2 - style-to-js: 1.1.19 + style-to-js: 1.1.21 transitivePeerDependencies: - supports-color @@ -14439,9 +14383,9 @@ snapshots: '@types/unist': 3.0.3 '@ungap/structured-clone': 1.3.0 hast-util-from-parse5: 8.0.3 - hast-util-to-parse5: 8.0.0 + hast-util-to-parse5: 8.0.1 html-void-elements: 3.0.0 - mdast-util-to-hast: 13.2.0 + mdast-util-to-hast: 13.2.1 parse5: 7.3.0 unist-util-position: 5.0.0 unist-util-visit: 5.0.0 @@ -14464,7 +14408,7 @@ snapshots: mdast-util-mdxjs-esm: 2.0.1 property-information: 7.1.0 space-separated-tokens: 2.0.2 - style-to-js: 1.1.19 + style-to-js: 1.1.21 unist-util-position: 5.0.0 zwitch: 2.0.4 transitivePeerDependencies: @@ -14478,7 +14422,7 @@ snapshots: comma-separated-tokens: 2.0.3 hast-util-whitespace: 3.0.0 html-void-elements: 3.0.0 - mdast-util-to-hast: 13.2.0 + mdast-util-to-hast: 13.2.1 property-information: 7.1.0 space-separated-tokens: 2.0.2 stringify-entities: 4.0.4 @@ -14498,18 +14442,18 @@ snapshots: mdast-util-mdxjs-esm: 2.0.1 property-information: 7.1.0 space-separated-tokens: 2.0.2 - style-to-js: 1.1.19 + style-to-js: 1.1.21 unist-util-position: 5.0.0 vfile-message: 4.0.3 transitivePeerDependencies: - supports-color - hast-util-to-parse5@8.0.0: + hast-util-to-parse5@8.0.1: dependencies: '@types/hast': 3.0.4 comma-separated-tokens: 2.0.3 devlop: 1.1.0 - property-information: 6.5.0 + property-information: 7.1.0 space-separated-tokens: 2.0.2 web-namespaces: 2.0.1 zwitch: 2.0.4 @@ -14565,12 +14509,12 @@ snapshots: html-void-elements@3.0.0: {} - http-errors@2.0.0: + http-errors@2.0.1: dependencies: depd: 2.0.0 inherits: 2.0.4 setprototypeof: 1.2.0 - statuses: 2.0.1 + statuses: 2.0.2 toidentifier: 1.0.1 http-proxy-agent@7.0.2: @@ -14632,7 +14576,7 @@ snapshots: ini@4.1.3: {} - inline-style-parser@0.2.6: {} + inline-style-parser@0.2.7: {} internal-slot@1.1.0: dependencies: @@ -14852,6 +14796,10 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 + jackspeak@4.1.1: + dependencies: + '@isaacs/cliui': 8.0.2 + jest-image-snapshot@6.5.1: dependencies: chalk: 4.1.2 @@ -14872,7 +14820,7 @@ snapshots: js-tokens@4.0.0: {} - js-yaml@3.14.1: + js-yaml@3.14.2: dependencies: argparse: 1.0.10 esprima: 4.0.1 @@ -14888,12 +14836,12 @@ snapshots: cssstyle: 4.6.0 data-urls: 5.0.0 decimal.js: 10.6.0 - form-data: 4.0.4 + form-data: 4.0.5 html-encoding-sniffer: 4.0.0 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.22 + nwsapi: 2.2.23 parse5: 7.3.0 rrweb-cssom: 0.7.1 saxes: 6.0.0 @@ -14944,7 +14892,7 @@ snapshots: object.assign: 4.1.7 object.values: 1.2.1 - katex@0.16.25: + katex@0.16.27: dependencies: commander: 8.3.0 @@ -14966,8 +14914,6 @@ snapshots: kleur@4.1.5: {} - kolorist@1.8.0: {} - langium@3.3.1: dependencies: chevrotain: 11.0.3 @@ -15013,12 +14959,6 @@ snapshots: load-tsconfig@0.2.5: {} - local-pkg@1.1.2: - dependencies: - mlly: 1.8.0 - pkg-types: 2.3.0 - quansync: 0.2.11 - locate-path@6.0.0: dependencies: p-locate: 5.0.0 @@ -15044,6 +14984,8 @@ snapshots: lru-cache@10.4.3: {} + lru-cache@11.2.4: {} + lru_map@0.3.3: {} magic-string@0.25.9: @@ -15233,7 +15175,7 @@ snapshots: '@types/mdast': 4.0.4 unist-util-is: 6.0.1 - mdast-util-to-hast@13.2.0: + mdast-util-to-hast@13.2.1: dependencies: '@types/hast': 3.0.4 '@types/mdast': 4.0.4 @@ -15267,10 +15209,10 @@ snapshots: merge2@1.4.1: {} - mermaid@11.12.1: + mermaid@11.12.2: dependencies: '@braintree/sanitize-url': 7.1.1 - '@iconify/utils': 3.0.2 + '@iconify/utils': 3.1.0 '@mermaid-js/parser': 0.6.3 '@types/d3': 7.4.3 cytoscape: 3.33.1 @@ -15280,8 +15222,8 @@ snapshots: d3-sankey: 0.12.3 dagre-d3-es: 7.0.13 dayjs: 1.11.19 - dompurify: 3.3.0 - katex: 0.16.25 + dompurify: 3.3.1 + katex: 0.16.27 khroma: 2.1.0 lodash-es: 4.17.21 marked: 16.4.2 @@ -15289,8 +15231,6 @@ snapshots: stylis: 4.3.6 ts-dedent: 2.2.0 uuid: 11.1.0 - transitivePeerDependencies: - - supports-color mhchemparser@4.2.1: {} @@ -15392,7 +15332,7 @@ snapshots: dependencies: '@types/katex': 0.16.7 devlop: 1.1.0 - katex: 0.16.25 + katex: 0.16.27 micromark-factory-space: 2.0.1 micromark-util-character: 2.1.1 micromark-util-symbol: 2.0.1 @@ -15698,9 +15638,9 @@ snapshots: motion-utils@12.23.6: {} - motion@12.23.24(@emotion/is-prop-valid@0.8.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + motion@12.23.26(@emotion/is-prop-valid@0.8.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - framer-motion: 12.23.24(@emotion/is-prop-valid@0.8.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + framer-motion: 12.23.26(@emotion/is-prop-valid@0.8.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) tslib: 2.8.1 optionalDependencies: '@emotion/is-prop-valid': 0.8.8 @@ -15727,26 +15667,26 @@ snapshots: negotiator@1.0.0: {} - next-seo@6.8.0(next@14.2.33(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next-seo@6.8.0(next@14.2.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - next: 14.2.33(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 14.2.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - next-sitemap@4.2.3(next@14.2.33(react-dom@18.3.1(react@18.3.1))(react@18.3.1)): + next-sitemap@4.2.3(next@14.2.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1)): dependencies: '@corex/deepmerge': 4.0.43 '@next/env': 13.5.11 fast-glob: 3.3.3 minimist: 1.2.8 - next: 14.2.33(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 14.2.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - next@14.2.33(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next@14.2.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@next/env': 14.2.33 + '@next/env': 14.2.35 '@swc/helpers': 0.5.5 busboy: 1.6.0 - caniuse-lite: 1.0.30001754 + caniuse-lite: 1.0.30001760 graceful-fs: 4.2.11 postcss: 8.4.31 react: 18.3.1 @@ -15766,7 +15706,7 @@ snapshots: - '@babel/core' - babel-plugin-macros - nextra@3.3.1(@types/react@18.3.27)(next@14.2.33(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3): + nextra@3.3.1(@types/react@18.3.27)(next@14.2.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.9.3): dependencies: '@formatjs/intl-localematcher': 0.5.10 '@headlessui/react': 2.2.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -15784,12 +15724,12 @@ snapshots: graceful-fs: 4.2.11 gray-matter: 4.0.3 hast-util-to-estree: 3.1.3 - katex: 0.16.25 + katex: 0.16.27 mdast-util-from-markdown: 2.0.2 mdast-util-gfm: 3.1.0 - mdast-util-to-hast: 13.2.0 + mdast-util-to-hast: 13.2.1 negotiator: 1.0.0 - next: 14.2.33(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 14.2.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1) p-limit: 6.2.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -15807,7 +15747,7 @@ snapshots: title: 4.0.1 unist-util-remove: 4.0.0 unist-util-visit: 5.0.0 - yaml: 2.8.1 + yaml: 2.8.2 zod: 3.25.76 zod-validation-error: 3.5.4(zod@3.25.76) transitivePeerDependencies: @@ -15821,10 +15761,6 @@ snapshots: node-addon-api@2.0.2: {} - node-fetch@2.7.0: - dependencies: - whatwg-url: 5.0.0 - node-gyp-build@4.8.4: {} node-releases@2.0.27: {} @@ -15871,7 +15807,7 @@ snapshots: numeral@2.0.6: {} - nwsapi@2.2.22: {} + nwsapi@2.2.23: {} object-assign@4.1.1: {} @@ -15901,14 +15837,14 @@ snapshots: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-object-atoms: 1.1.1 object.groupby@1.0.3: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 object.values@1.2.1: dependencies: @@ -15941,10 +15877,10 @@ snapshots: regex: 5.1.1 regex-recursion: 5.1.1 - oniguruma-to-es@4.3.3: + oniguruma-to-es@4.3.4: dependencies: oniguruma-parser: 0.12.1 - regex: 6.0.1 + regex: 6.1.0 regex-recursion: 6.0.2 openapi-types@12.1.3: {} @@ -15986,7 +15922,7 @@ snapshots: '@noble/hashes': 1.8.0 '@scure/bip32': 1.7.0 '@scure/bip39': 1.6.0 - abitype: 1.1.1(typescript@5.9.3)(zod@3.25.76) + abitype: 1.1.0(typescript@5.9.3)(zod@3.25.76) eventemitter3: 5.0.1 optionalDependencies: typescript: 5.9.3 @@ -16011,7 +15947,7 @@ snapshots: package-json-from-dist@1.0.1: {} - package-manager-detector@1.5.0: {} + package-manager-detector@1.6.0: {} pako@0.2.9: {} @@ -16085,6 +16021,11 @@ snapshots: lru-cache: 10.4.3 minipass: 7.1.2 + path-scurry@2.0.1: + dependencies: + lru-cache: 11.2.4 + minipass: 7.1.2 + path-to-regexp@6.3.0: {} path-type@4.0.0: {} @@ -16115,12 +16056,6 @@ snapshots: mlly: 1.8.0 pathe: 2.0.3 - pkg-types@2.3.0: - dependencies: - confbox: 0.2.2 - exsolve: 1.0.8 - pathe: 2.0.3 - pluralize@8.0.0: {} pngjs@3.4.0: {} @@ -16148,14 +16083,14 @@ snapshots: camelcase-css: 2.0.1 postcss: 8.5.6 - postcss-load-config@6.0.1(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.4)(yaml@2.8.1): + postcss-load-config@6.0.1(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.4)(yaml@2.8.2): dependencies: lilconfig: 3.1.3 optionalDependencies: jiti: 1.21.7 postcss: 8.5.6 tsx: 4.20.4 - yaml: 2.8.1 + yaml: 2.8.2 postcss-nested@6.2.0(postcss@8.5.6): dependencies: @@ -16183,13 +16118,13 @@ snapshots: prelude-ls@1.2.1: {} - prettier-plugin-tailwindcss@0.7.1(prettier@3.6.2): + prettier-plugin-tailwindcss@0.7.2(prettier@3.7.4): dependencies: - prettier: 3.6.2 + prettier: 3.7.4 prettier@2.8.8: {} - prettier@3.6.2: {} + prettier@3.7.4: {} printable-characters@1.0.42: {} @@ -16221,8 +16156,6 @@ snapshots: object-assign: 4.1.1 react-is: 16.13.1 - property-information@6.5.0: {} - property-information@7.1.0: {} psl@1.15.0: @@ -16235,8 +16168,6 @@ snapshots: dependencies: side-channel: 1.1.0 - quansync@0.2.11: {} - querystringify@2.2.0: {} queue-microtask@1.2.3: {} @@ -16245,10 +16176,10 @@ snapshots: dependencies: safe-buffer: 5.2.1 - raw-body@2.5.2: + raw-body@2.5.3: dependencies: bytes: 3.1.2 - http-errors: 2.0.0 + http-errors: 2.0.1 iconv-lite: 0.4.24 unpipe: 1.0.0 @@ -16334,7 +16265,7 @@ snapshots: react-is@18.3.1: {} - react-keyed-flatten-children@5.0.1(react-is@18.3.1)(react@18.3.1): + react-keyed-flatten-children@5.1.1(react-is@18.3.1)(react@18.3.1): dependencies: react: 18.3.1 react-is: 18.3.1 @@ -16347,7 +16278,7 @@ snapshots: devlop: 1.1.0 hast-util-to-jsx-runtime: 2.3.6 html-url-attributes: 3.0.1 - mdast-util-to-hast: 13.2.0 + mdast-util-to-hast: 13.2.1 react: 18.3.1 remark-parse: 11.0.0 remark-rehype: 11.1.2 @@ -16370,7 +16301,7 @@ snapshots: optionalDependencies: '@types/react': 18.3.27 - react-remove-scroll@2.7.1(@types/react@18.3.27)(react@18.3.1): + react-remove-scroll@2.7.2(@types/react@18.3.27)(react@18.3.1): dependencies: react: 18.3.1 react-remove-scroll-bar: 2.3.8(@types/react@18.3.27)(react@18.3.1) @@ -16383,7 +16314,7 @@ snapshots: react-smooth@4.0.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - fast-equals: 5.3.3 + fast-equals: 5.4.0 prop-types: 15.8.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -16406,7 +16337,7 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-virtuoso@4.14.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + react-virtuoso@4.17.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -16488,7 +16419,7 @@ snapshots: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-errors: 1.3.0 es-object-atoms: 1.1.1 get-intrinsic: 1.3.0 @@ -16510,7 +16441,7 @@ snapshots: dependencies: regex-utilities: 2.3.0 - regex@6.0.1: + regex@6.1.0: dependencies: regex-utilities: 2.3.0 @@ -16529,7 +16460,7 @@ snapshots: '@types/katex': 0.16.7 hast-util-from-html-isomorphic: 2.0.0 hast-util-to-text: 4.0.2 - katex: 0.16.25 + katex: 0.16.27 unist-util-visit-parents: 6.0.2 vfile: 6.0.3 @@ -16661,7 +16592,7 @@ snapshots: dependencies: '@types/hast': 3.0.4 '@types/mdast': 4.0.4 - mdast-util-to-hast: 13.2.0 + mdast-util-to-hast: 13.2.1 unified: 11.0.5 vfile: 6.0.3 @@ -16760,32 +16691,32 @@ snapshots: dependencies: estree-walker: 0.6.1 - rollup@4.53.2: + rollup@4.53.3: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.53.2 - '@rollup/rollup-android-arm64': 4.53.2 - '@rollup/rollup-darwin-arm64': 4.53.2 - '@rollup/rollup-darwin-x64': 4.53.2 - '@rollup/rollup-freebsd-arm64': 4.53.2 - '@rollup/rollup-freebsd-x64': 4.53.2 - '@rollup/rollup-linux-arm-gnueabihf': 4.53.2 - '@rollup/rollup-linux-arm-musleabihf': 4.53.2 - '@rollup/rollup-linux-arm64-gnu': 4.53.2 - '@rollup/rollup-linux-arm64-musl': 4.53.2 - '@rollup/rollup-linux-loong64-gnu': 4.53.2 - '@rollup/rollup-linux-ppc64-gnu': 4.53.2 - '@rollup/rollup-linux-riscv64-gnu': 4.53.2 - '@rollup/rollup-linux-riscv64-musl': 4.53.2 - '@rollup/rollup-linux-s390x-gnu': 4.53.2 - '@rollup/rollup-linux-x64-gnu': 4.53.2 - '@rollup/rollup-linux-x64-musl': 4.53.2 - '@rollup/rollup-openharmony-arm64': 4.53.2 - '@rollup/rollup-win32-arm64-msvc': 4.53.2 - '@rollup/rollup-win32-ia32-msvc': 4.53.2 - '@rollup/rollup-win32-x64-gnu': 4.53.2 - '@rollup/rollup-win32-x64-msvc': 4.53.2 + '@rollup/rollup-android-arm-eabi': 4.53.3 + '@rollup/rollup-android-arm64': 4.53.3 + '@rollup/rollup-darwin-arm64': 4.53.3 + '@rollup/rollup-darwin-x64': 4.53.3 + '@rollup/rollup-freebsd-arm64': 4.53.3 + '@rollup/rollup-freebsd-x64': 4.53.3 + '@rollup/rollup-linux-arm-gnueabihf': 4.53.3 + '@rollup/rollup-linux-arm-musleabihf': 4.53.3 + '@rollup/rollup-linux-arm64-gnu': 4.53.3 + '@rollup/rollup-linux-arm64-musl': 4.53.3 + '@rollup/rollup-linux-loong64-gnu': 4.53.3 + '@rollup/rollup-linux-ppc64-gnu': 4.53.3 + '@rollup/rollup-linux-riscv64-gnu': 4.53.3 + '@rollup/rollup-linux-riscv64-musl': 4.53.3 + '@rollup/rollup-linux-s390x-gnu': 4.53.3 + '@rollup/rollup-linux-x64-gnu': 4.53.3 + '@rollup/rollup-linux-x64-musl': 4.53.3 + '@rollup/rollup-openharmony-arm64': 4.53.3 + '@rollup/rollup-win32-arm64-msvc': 4.53.3 + '@rollup/rollup-win32-ia32-msvc': 4.53.3 + '@rollup/rollup-win32-x64-gnu': 4.53.3 + '@rollup/rollup-win32-x64-msvc': 4.53.3 fsevents: 2.3.3 roughjs@4.6.6: @@ -16941,14 +16872,14 @@ snapshots: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 - shiki@3.15.0: + shiki@3.20.0: dependencies: - '@shikijs/core': 3.15.0 - '@shikijs/engine-javascript': 3.15.0 - '@shikijs/engine-oniguruma': 3.15.0 - '@shikijs/langs': 3.15.0 - '@shikijs/themes': 3.15.0 - '@shikijs/types': 3.15.0 + '@shikijs/core': 3.20.0 + '@shikijs/engine-javascript': 3.20.0 + '@shikijs/engine-oniguruma': 3.20.0 + '@shikijs/langs': 3.20.0 + '@shikijs/themes': 3.20.0 + '@shikijs/types': 3.20.0 '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 @@ -17084,7 +17015,7 @@ snapshots: as-table: 1.0.55 get-source: 2.0.12 - statuses@2.0.1: {} + statuses@2.0.2: {} std-env@3.10.0: {} @@ -17121,14 +17052,14 @@ snapshots: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 string.prototype.matchall@4.0.12: dependencies: call-bind: 1.0.8 call-bound: 1.0.4 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-errors: 1.3.0 es-object-atoms: 1.1.1 get-intrinsic: 1.3.0 @@ -17142,7 +17073,7 @@ snapshots: string.prototype.repeat@1.0.0: dependencies: define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 string.prototype.trim@1.2.10: dependencies: @@ -17150,7 +17081,7 @@ snapshots: call-bound: 1.0.4 define-data-property: 1.1.4 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-object-atoms: 1.1.1 has-property-descriptors: 1.0.2 @@ -17198,15 +17129,15 @@ snapshots: strip-json-comments@3.1.1: {} - strnum@2.1.1: {} + strnum@2.1.2: {} - style-to-js@1.1.19: + style-to-js@1.1.21: dependencies: - style-to-object: 1.0.12 + style-to-object: 1.0.14 - style-to-object@1.0.12: + style-to-object@1.0.14: dependencies: - inline-style-parser: 0.2.6 + inline-style-parser: 0.2.7 styled-jsx@5.1.1(react@18.3.1): dependencies: @@ -17233,14 +17164,14 @@ snapshots: stylis@4.3.6: {} - sucrase@3.35.0: + sucrase@3.35.1: dependencies: '@jridgewell/gen-mapping': 0.3.13 commander: 4.1.1 - glob: 10.4.5 lines-and-columns: 1.2.4 mz: 2.7.0 pirates: 4.0.7 + tinyglobby: 0.2.15 ts-interface-checker: 0.1.13 supports-color@7.2.0: @@ -17265,7 +17196,7 @@ snapshots: tabbable@6.3.0: {} - tailwindcss@3.4.18(tsx@4.20.4)(yaml@2.8.1): + tailwindcss@3.4.19(tsx@4.20.4)(yaml@2.8.2): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -17284,11 +17215,11 @@ snapshots: postcss: 8.5.6 postcss-import: 15.1.0(postcss@8.5.6) postcss-js: 4.1.0(postcss@8.5.6) - postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.4)(yaml@2.8.1) + postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.4)(yaml@2.8.2) postcss-nested: 6.2.0(postcss@8.5.6) postcss-selector-parser: 6.1.2 resolve: 1.22.11 - sucrase: 3.35.0 + sucrase: 3.35.1 transitivePeerDependencies: - tsx - yaml @@ -17362,8 +17293,6 @@ snapshots: universalify: 0.2.0 url-parse: 1.5.10 - tr46@0.0.3: {} - tr46@5.1.1: dependencies: punycode: 2.3.1 @@ -17402,22 +17331,22 @@ snapshots: tsort@0.0.1: {} - tsup@8.5.1(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.4)(typescript@5.9.3)(yaml@2.8.1): + tsup@8.5.1(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.4)(typescript@5.9.3)(yaml@2.8.2): dependencies: - bundle-require: 5.1.0(esbuild@0.27.0) + bundle-require: 5.1.0(esbuild@0.27.1) cac: 6.7.14 chokidar: 4.0.3 consola: 3.4.2 debug: 4.4.3(supports-color@8.1.1) - esbuild: 0.27.0 + esbuild: 0.27.1 fix-dts-default-cjs-exports: 1.0.1 joycon: 3.1.1 picocolors: 1.1.1 - postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.4)(yaml@2.8.1) + postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.4)(yaml@2.8.2) resolve-from: 5.0.0 - rollup: 4.53.2 + rollup: 4.53.3 source-map: 0.7.6 - sucrase: 3.35.0 + sucrase: 3.35.1 tinyexec: 0.3.2 tinyglobby: 0.2.15 tree-kill: 1.2.2 @@ -17437,32 +17366,32 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - turbo-darwin-64@2.6.1: + turbo-darwin-64@2.6.3: optional: true - turbo-darwin-arm64@2.6.1: + turbo-darwin-arm64@2.6.3: optional: true - turbo-linux-64@2.6.1: + turbo-linux-64@2.6.3: optional: true - turbo-linux-arm64@2.6.1: + turbo-linux-arm64@2.6.3: optional: true - turbo-windows-64@2.6.1: + turbo-windows-64@2.6.3: optional: true - turbo-windows-arm64@2.6.1: + turbo-windows-arm64@2.6.3: optional: true - turbo@2.6.1: + turbo@2.6.3: optionalDependencies: - turbo-darwin-64: 2.6.1 - turbo-darwin-arm64: 2.6.1 - turbo-linux-64: 2.6.1 - turbo-linux-arm64: 2.6.1 - turbo-windows-64: 2.6.1 - turbo-windows-arm64: 2.6.1 + turbo-darwin-64: 2.6.3 + turbo-darwin-arm64: 2.6.3 + turbo-linux-64: 2.6.3 + turbo-linux-arm64: 2.6.3 + turbo-windows-64: 2.6.3 + turbo-windows-arm64: 2.6.3 twoslash-protocol@0.2.12: {} @@ -17564,12 +17493,12 @@ snapshots: '@types/concat-stream': 2.0.3 '@types/debug': 4.1.12 '@types/is-empty': 1.2.3 - '@types/node': 22.19.1 + '@types/node': 22.19.2 '@types/unist': 3.0.3 concat-stream: 2.0.0 debug: 4.4.3(supports-color@8.1.1) extend: 3.0.2 - glob: 10.4.5 + glob: 10.5.0 ignore: 6.0.2 is-empty: 1.2.0 is-plain-obj: 4.1.0 @@ -17581,7 +17510,7 @@ snapshots: vfile-message: 4.0.3 vfile-reporter: 8.1.1 vfile-statistics: 3.0.0 - yaml: 2.8.1 + yaml: 2.8.2 transitivePeerDependencies: - bluebird - supports-color @@ -17709,9 +17638,9 @@ snapshots: '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1 '@unrs/resolver-binding-win32-x64-msvc': 1.11.1 - update-browserslist-db@1.1.4(browserslist@4.28.0): + update-browserslist-db@1.2.2(browserslist@4.28.1): dependencies: - browserslist: 4.28.0 + browserslist: 4.28.1 escalade: 3.2.0 picocolors: 1.1.1 @@ -17822,7 +17751,7 @@ snapshots: d3-time: 3.1.0 d3-timer: 3.0.1 - viem@2.39.0(typescript@5.9.3)(zod@3.25.76): + viem@2.41.2(typescript@5.9.3)(zod@3.25.76): dependencies: '@noble/curves': 1.9.1 '@noble/hashes': 1.8.0 @@ -17839,13 +17768,13 @@ snapshots: - utf-8-validate - zod - vite-node@2.1.9(@types/node@22.19.1): + vite-node@2.1.9(@types/node@22.19.2): dependencies: cac: 6.7.14 debug: 4.4.3(supports-color@8.1.1) es-module-lexer: 1.7.0 pathe: 1.1.2 - vite: 5.4.21(@types/node@22.19.1) + vite: 5.4.21(@types/node@22.19.2) transitivePeerDependencies: - '@types/node' - less @@ -17857,19 +17786,19 @@ snapshots: - supports-color - terser - vite@5.4.21(@types/node@22.19.1): + vite@5.4.21(@types/node@22.19.2): dependencies: esbuild: 0.21.5 postcss: 8.5.6 - rollup: 4.53.2 + rollup: 4.53.3 optionalDependencies: - '@types/node': 22.19.1 + '@types/node': 22.19.2 fsevents: 2.3.3 - vitest@2.1.9(@types/node@22.19.1)(jsdom@24.1.3): + vitest@2.1.9(@types/node@22.19.2)(jsdom@24.1.3): dependencies: '@vitest/expect': 2.1.9 - '@vitest/mocker': 2.1.9(vite@5.4.21(@types/node@22.19.1)) + '@vitest/mocker': 2.1.9(vite@5.4.21(@types/node@22.19.2)) '@vitest/pretty-format': 2.1.9 '@vitest/runner': 2.1.9 '@vitest/snapshot': 2.1.9 @@ -17877,7 +17806,7 @@ snapshots: '@vitest/utils': 2.1.9 chai: 5.3.3 debug: 4.4.3(supports-color@8.1.1) - expect-type: 1.2.2 + expect-type: 1.3.0 magic-string: 0.30.21 pathe: 1.1.2 std-env: 3.10.0 @@ -17885,11 +17814,11 @@ snapshots: tinyexec: 0.3.2 tinypool: 1.1.1 tinyrainbow: 1.2.0 - vite: 5.4.21(@types/node@22.19.1) - vite-node: 2.1.9(@types/node@22.19.1) + vite: 5.4.21(@types/node@22.19.2) + vite-node: 2.1.9(@types/node@22.19.2) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 22.19.1 + '@types/node': 22.19.2 jsdom: 24.1.3 transitivePeerDependencies: - less @@ -17931,8 +17860,6 @@ snapshots: web-namespaces@2.0.1: {} - webidl-conversions@3.0.1: {} - webidl-conversions@7.0.0: {} whatwg-encoding@3.1.1: @@ -17946,11 +17873,6 @@ snapshots: tr46: 5.1.1 webidl-conversions: 7.0.0 - whatwg-url@5.0.0: - dependencies: - tr46: 0.0.3 - webidl-conversions: 3.0.1 - which-boxed-primitive@1.1.1: dependencies: is-bigint: 1.1.0 @@ -18023,7 +17945,7 @@ snapshots: workerpool@6.5.1: {} - wrangler@3.114.15(@cloudflare/workers-types@4.20251120.0): + wrangler@3.114.15(@cloudflare/workers-types@4.20251213.0): dependencies: '@cloudflare/kv-asset-handler': 0.3.4 '@cloudflare/unenv-preset': 2.0.2(unenv@2.0.0-rc.14)(workerd@1.20250718.0) @@ -18036,7 +17958,7 @@ snapshots: unenv: 2.0.0-rc.14 workerd: 1.20250718.0 optionalDependencies: - '@cloudflare/workers-types': 4.20251120.0 + '@cloudflare/workers-types': 4.20251213.0 fsevents: 2.3.3 sharp: 0.33.5 transitivePeerDependencies: @@ -18073,7 +17995,7 @@ snapshots: yaml@1.10.2: {} - yaml@2.8.1: {} + yaml@2.8.2: {} yargs-parser@20.2.9: {} @@ -18122,6 +18044,6 @@ snapshots: zod@3.25.76: {} - zod@4.1.12: {} + zod@4.1.13: {} zwitch@2.0.4: {} diff --git a/website/package.json b/website/package.json index e578836b6949..209aa3c9cd1c 100644 --- a/website/package.json +++ b/website/package.json @@ -19,8 +19,8 @@ "dependencies": { "@docsearch/react": "^3.9.0", "@edgeandnode/common": "^7.0.4", - "@edgeandnode/gds": "^6.7.8", - "@edgeandnode/go": "^10.3.12", + "@edgeandnode/gds": "^6.8.1", + "@edgeandnode/go": "^10.4.1", "@emotion/react": "^11.14.0", "@graphprotocol/contracts": "^7.3.0", "@pinax/graph-networks-registry": "^0.7.1", @@ -32,10 +32,10 @@ "hast-util-whitespace": "^3.0.0", "lodash": "^4.17.21", "mdast-util-mdx-jsx": "^3.2.0", - "mdast-util-to-hast": "^13.2.0", + "mdast-util-to-hast": "^13.2.1", "mixpanel-browser": "^2.72.0", - "motion": "^12.23.24", - "next": "^14.2.33", + "motion": "^12.23.26", + "next": "^14.2.35", "next-seo": "^6.8.0", "next-sitemap": "^4.2.3", "nextra": "^3.3.1", @@ -55,17 +55,17 @@ }, "devDependencies": { "@types/hast": "^3.0.4", - "@types/lodash": "^4.17.20", + "@types/lodash": "^4.17.21", "@types/mdast": "^4.0.4", "@types/mixpanel-browser": "^2.66.0", - "@types/node": "^22.19.1", + "@types/node": "^22.19.2", "@types/react": "^18.3.27", "@types/react-dom": "^18.3.7", "@types/vfile": "^4.0.0", "autoprefixer": "^10.4.22", - "fast-xml-parser": "^5.3.2", + "fast-xml-parser": "^5.3.3", "postcss": "^8.5.6", - "tailwindcss": "^3.4.18", + "tailwindcss": "^3.4.19", "tsup": "^8.5.1", "tsx": "4.20.4" } diff --git a/website/route-lockfile.txt b/website/route-lockfile.txt index d8d2c2233666..098bfe022482 100644 --- a/website/route-lockfile.txt +++ b/website/route-lockfile.txt @@ -68,7 +68,6 @@ /ar/subgraphs/developing/subgraphs/ /ar/subgraphs/explorer/ /ar/subgraphs/fair-use-policy/ -/ar/subgraphs/guides/arweave/ /ar/subgraphs/guides/contract-analyzer/ /ar/subgraphs/guides/enums/ /ar/subgraphs/guides/grafting/ @@ -119,7 +118,6 @@ /ar/supported-networks/blast-testnet/ /ar/supported-networks/bnb-op/ /ar/supported-networks/bnb-svm/ -/ar/supported-networks/boba-bnb/ /ar/supported-networks/boba-testnet/ /ar/supported-networks/boba/ /ar/supported-networks/botanix-testnet/ @@ -138,7 +136,6 @@ /ar/supported-networks/etherlink-mainnet/ /ar/supported-networks/etherlink-shadownet/ /ar/supported-networks/etherlink-testnet/ -/ar/supported-networks/expchain-testnet/ /ar/supported-networks/fantom-testnet/ /ar/supported-networks/fantom/ /ar/supported-networks/fraxtal/ @@ -187,6 +184,7 @@ /ar/supported-networks/mbase/ /ar/supported-networks/megaeth-testnet/ /ar/supported-networks/megaeth-timothy/ +/ar/supported-networks/megaeth/ /ar/supported-networks/metis/ /ar/supported-networks/mint-sepolia/ /ar/supported-networks/mint/ @@ -222,6 +220,7 @@ /ar/supported-networks/soneium/ /ar/supported-networks/sonic-testnet/ /ar/supported-networks/sonic/ +/ar/supported-networks/stable/ /ar/supported-networks/starknet-mainnet/ /ar/supported-networks/starknet-testnet/ /ar/supported-networks/status-sepolia/ @@ -241,6 +240,7 @@ /ar/supported-networks/viction/ /ar/supported-networks/wax-testnet/ /ar/supported-networks/wax/ +/ar/supported-networks/worldchain/ /ar/supported-networks/xlayer-mainnet/ /ar/supported-networks/xlayer-sepolia/ /ar/supported-networks/zetachain/ @@ -357,7 +357,6 @@ /cs/subgraphs/developing/subgraphs/ /cs/subgraphs/explorer/ /cs/subgraphs/fair-use-policy/ -/cs/subgraphs/guides/arweave/ /cs/subgraphs/guides/contract-analyzer/ /cs/subgraphs/guides/enums/ /cs/subgraphs/guides/grafting/ @@ -408,7 +407,6 @@ /cs/supported-networks/blast-testnet/ /cs/supported-networks/bnb-op/ /cs/supported-networks/bnb-svm/ -/cs/supported-networks/boba-bnb/ /cs/supported-networks/boba-testnet/ /cs/supported-networks/boba/ /cs/supported-networks/botanix-testnet/ @@ -427,7 +425,6 @@ /cs/supported-networks/etherlink-mainnet/ /cs/supported-networks/etherlink-shadownet/ /cs/supported-networks/etherlink-testnet/ -/cs/supported-networks/expchain-testnet/ /cs/supported-networks/fantom-testnet/ /cs/supported-networks/fantom/ /cs/supported-networks/fraxtal/ @@ -476,6 +473,7 @@ /cs/supported-networks/mbase/ /cs/supported-networks/megaeth-testnet/ /cs/supported-networks/megaeth-timothy/ +/cs/supported-networks/megaeth/ /cs/supported-networks/metis/ /cs/supported-networks/mint-sepolia/ /cs/supported-networks/mint/ @@ -511,6 +509,7 @@ /cs/supported-networks/soneium/ /cs/supported-networks/sonic-testnet/ /cs/supported-networks/sonic/ +/cs/supported-networks/stable/ /cs/supported-networks/starknet-mainnet/ /cs/supported-networks/starknet-testnet/ /cs/supported-networks/status-sepolia/ @@ -530,6 +529,7 @@ /cs/supported-networks/viction/ /cs/supported-networks/wax-testnet/ /cs/supported-networks/wax/ +/cs/supported-networks/worldchain/ /cs/supported-networks/xlayer-mainnet/ /cs/supported-networks/xlayer-sepolia/ /cs/supported-networks/zetachain/ @@ -646,7 +646,6 @@ /de/subgraphs/developing/subgraphs/ /de/subgraphs/explorer/ /de/subgraphs/fair-use-policy/ -/de/subgraphs/guides/arweave/ /de/subgraphs/guides/contract-analyzer/ /de/subgraphs/guides/enums/ /de/subgraphs/guides/grafting/ @@ -697,7 +696,6 @@ /de/supported-networks/blast-testnet/ /de/supported-networks/bnb-op/ /de/supported-networks/bnb-svm/ -/de/supported-networks/boba-bnb/ /de/supported-networks/boba-testnet/ /de/supported-networks/boba/ /de/supported-networks/botanix-testnet/ @@ -716,7 +714,6 @@ /de/supported-networks/etherlink-mainnet/ /de/supported-networks/etherlink-shadownet/ /de/supported-networks/etherlink-testnet/ -/de/supported-networks/expchain-testnet/ /de/supported-networks/fantom-testnet/ /de/supported-networks/fantom/ /de/supported-networks/fraxtal/ @@ -765,6 +762,7 @@ /de/supported-networks/mbase/ /de/supported-networks/megaeth-testnet/ /de/supported-networks/megaeth-timothy/ +/de/supported-networks/megaeth/ /de/supported-networks/metis/ /de/supported-networks/mint-sepolia/ /de/supported-networks/mint/ @@ -800,6 +798,7 @@ /de/supported-networks/soneium/ /de/supported-networks/sonic-testnet/ /de/supported-networks/sonic/ +/de/supported-networks/stable/ /de/supported-networks/starknet-mainnet/ /de/supported-networks/starknet-testnet/ /de/supported-networks/status-sepolia/ @@ -819,6 +818,7 @@ /de/supported-networks/viction/ /de/supported-networks/wax-testnet/ /de/supported-networks/wax/ +/de/supported-networks/worldchain/ /de/supported-networks/xlayer-mainnet/ /de/supported-networks/xlayer-sepolia/ /de/supported-networks/zetachain/ @@ -935,7 +935,6 @@ /en/subgraphs/developing/subgraphs/ /en/subgraphs/explorer/ /en/subgraphs/fair-use-policy/ -/en/subgraphs/guides/arweave/ /en/subgraphs/guides/contract-analyzer/ /en/subgraphs/guides/enums/ /en/subgraphs/guides/grafting/ @@ -986,7 +985,6 @@ /en/supported-networks/blast-testnet/ /en/supported-networks/bnb-op/ /en/supported-networks/bnb-svm/ -/en/supported-networks/boba-bnb/ /en/supported-networks/boba-testnet/ /en/supported-networks/boba/ /en/supported-networks/botanix-testnet/ @@ -1005,7 +1003,6 @@ /en/supported-networks/etherlink-mainnet/ /en/supported-networks/etherlink-shadownet/ /en/supported-networks/etherlink-testnet/ -/en/supported-networks/expchain-testnet/ /en/supported-networks/fantom-testnet/ /en/supported-networks/fantom/ /en/supported-networks/fraxtal/ @@ -1054,6 +1051,7 @@ /en/supported-networks/mbase/ /en/supported-networks/megaeth-testnet/ /en/supported-networks/megaeth-timothy/ +/en/supported-networks/megaeth/ /en/supported-networks/metis/ /en/supported-networks/mint-sepolia/ /en/supported-networks/mint/ @@ -1089,6 +1087,7 @@ /en/supported-networks/soneium/ /en/supported-networks/sonic-testnet/ /en/supported-networks/sonic/ +/en/supported-networks/stable/ /en/supported-networks/starknet-mainnet/ /en/supported-networks/starknet-testnet/ /en/supported-networks/status-sepolia/ @@ -1108,6 +1107,7 @@ /en/supported-networks/viction/ /en/supported-networks/wax-testnet/ /en/supported-networks/wax/ +/en/supported-networks/worldchain/ /en/supported-networks/xlayer-mainnet/ /en/supported-networks/xlayer-sepolia/ /en/supported-networks/zetachain/ @@ -1134,6 +1134,8 @@ /en/token-api/evm-tokens/tokens/ /en/token-api/evm-tokens/transfers/ /en/token-api/faq/ +/en/token-api/guides/gpt/ +/en/token-api/guides/upgrade-to-v1/ /en/token-api/monitoring/health/ /en/token-api/monitoring/networks/ /en/token-api/monitoring/version/ @@ -1154,7 +1156,6 @@ /en/token-api/tvm-tokens/tokens/ /en/token-api/tvm-tokens/transfers-native/ /en/token-api/tvm-tokens/transfers/ -/en/token-api/upgrade-to-v1/ /es/ /es/404/ /es/about/ @@ -1224,7 +1225,6 @@ /es/subgraphs/developing/subgraphs/ /es/subgraphs/explorer/ /es/subgraphs/fair-use-policy/ -/es/subgraphs/guides/arweave/ /es/subgraphs/guides/contract-analyzer/ /es/subgraphs/guides/enums/ /es/subgraphs/guides/grafting/ @@ -1275,7 +1275,6 @@ /es/supported-networks/blast-testnet/ /es/supported-networks/bnb-op/ /es/supported-networks/bnb-svm/ -/es/supported-networks/boba-bnb/ /es/supported-networks/boba-testnet/ /es/supported-networks/boba/ /es/supported-networks/botanix-testnet/ @@ -1294,7 +1293,6 @@ /es/supported-networks/etherlink-mainnet/ /es/supported-networks/etherlink-shadownet/ /es/supported-networks/etherlink-testnet/ -/es/supported-networks/expchain-testnet/ /es/supported-networks/fantom-testnet/ /es/supported-networks/fantom/ /es/supported-networks/fraxtal/ @@ -1343,6 +1341,7 @@ /es/supported-networks/mbase/ /es/supported-networks/megaeth-testnet/ /es/supported-networks/megaeth-timothy/ +/es/supported-networks/megaeth/ /es/supported-networks/metis/ /es/supported-networks/mint-sepolia/ /es/supported-networks/mint/ @@ -1378,6 +1377,7 @@ /es/supported-networks/soneium/ /es/supported-networks/sonic-testnet/ /es/supported-networks/sonic/ +/es/supported-networks/stable/ /es/supported-networks/starknet-mainnet/ /es/supported-networks/starknet-testnet/ /es/supported-networks/status-sepolia/ @@ -1397,6 +1397,7 @@ /es/supported-networks/viction/ /es/supported-networks/wax-testnet/ /es/supported-networks/wax/ +/es/supported-networks/worldchain/ /es/supported-networks/xlayer-mainnet/ /es/supported-networks/xlayer-sepolia/ /es/supported-networks/zetachain/ @@ -1513,7 +1514,6 @@ /fr/subgraphs/developing/subgraphs/ /fr/subgraphs/explorer/ /fr/subgraphs/fair-use-policy/ -/fr/subgraphs/guides/arweave/ /fr/subgraphs/guides/contract-analyzer/ /fr/subgraphs/guides/enums/ /fr/subgraphs/guides/grafting/ @@ -1564,7 +1564,6 @@ /fr/supported-networks/blast-testnet/ /fr/supported-networks/bnb-op/ /fr/supported-networks/bnb-svm/ -/fr/supported-networks/boba-bnb/ /fr/supported-networks/boba-testnet/ /fr/supported-networks/boba/ /fr/supported-networks/botanix-testnet/ @@ -1583,7 +1582,6 @@ /fr/supported-networks/etherlink-mainnet/ /fr/supported-networks/etherlink-shadownet/ /fr/supported-networks/etherlink-testnet/ -/fr/supported-networks/expchain-testnet/ /fr/supported-networks/fantom-testnet/ /fr/supported-networks/fantom/ /fr/supported-networks/fraxtal/ @@ -1632,6 +1630,7 @@ /fr/supported-networks/mbase/ /fr/supported-networks/megaeth-testnet/ /fr/supported-networks/megaeth-timothy/ +/fr/supported-networks/megaeth/ /fr/supported-networks/metis/ /fr/supported-networks/mint-sepolia/ /fr/supported-networks/mint/ @@ -1667,6 +1666,7 @@ /fr/supported-networks/soneium/ /fr/supported-networks/sonic-testnet/ /fr/supported-networks/sonic/ +/fr/supported-networks/stable/ /fr/supported-networks/starknet-mainnet/ /fr/supported-networks/starknet-testnet/ /fr/supported-networks/status-sepolia/ @@ -1686,6 +1686,7 @@ /fr/supported-networks/viction/ /fr/supported-networks/wax-testnet/ /fr/supported-networks/wax/ +/fr/supported-networks/worldchain/ /fr/supported-networks/xlayer-mainnet/ /fr/supported-networks/xlayer-sepolia/ /fr/supported-networks/zetachain/ @@ -1802,7 +1803,6 @@ /hi/subgraphs/developing/subgraphs/ /hi/subgraphs/explorer/ /hi/subgraphs/fair-use-policy/ -/hi/subgraphs/guides/arweave/ /hi/subgraphs/guides/contract-analyzer/ /hi/subgraphs/guides/enums/ /hi/subgraphs/guides/grafting/ @@ -1853,7 +1853,6 @@ /hi/supported-networks/blast-testnet/ /hi/supported-networks/bnb-op/ /hi/supported-networks/bnb-svm/ -/hi/supported-networks/boba-bnb/ /hi/supported-networks/boba-testnet/ /hi/supported-networks/boba/ /hi/supported-networks/botanix-testnet/ @@ -1872,7 +1871,6 @@ /hi/supported-networks/etherlink-mainnet/ /hi/supported-networks/etherlink-shadownet/ /hi/supported-networks/etherlink-testnet/ -/hi/supported-networks/expchain-testnet/ /hi/supported-networks/fantom-testnet/ /hi/supported-networks/fantom/ /hi/supported-networks/fraxtal/ @@ -1921,6 +1919,7 @@ /hi/supported-networks/mbase/ /hi/supported-networks/megaeth-testnet/ /hi/supported-networks/megaeth-timothy/ +/hi/supported-networks/megaeth/ /hi/supported-networks/metis/ /hi/supported-networks/mint-sepolia/ /hi/supported-networks/mint/ @@ -1956,6 +1955,7 @@ /hi/supported-networks/soneium/ /hi/supported-networks/sonic-testnet/ /hi/supported-networks/sonic/ +/hi/supported-networks/stable/ /hi/supported-networks/starknet-mainnet/ /hi/supported-networks/starknet-testnet/ /hi/supported-networks/status-sepolia/ @@ -1975,6 +1975,7 @@ /hi/supported-networks/viction/ /hi/supported-networks/wax-testnet/ /hi/supported-networks/wax/ +/hi/supported-networks/worldchain/ /hi/supported-networks/xlayer-mainnet/ /hi/supported-networks/xlayer-sepolia/ /hi/supported-networks/zetachain/ @@ -2091,7 +2092,6 @@ /it/subgraphs/developing/subgraphs/ /it/subgraphs/explorer/ /it/subgraphs/fair-use-policy/ -/it/subgraphs/guides/arweave/ /it/subgraphs/guides/contract-analyzer/ /it/subgraphs/guides/enums/ /it/subgraphs/guides/grafting/ @@ -2142,7 +2142,6 @@ /it/supported-networks/blast-testnet/ /it/supported-networks/bnb-op/ /it/supported-networks/bnb-svm/ -/it/supported-networks/boba-bnb/ /it/supported-networks/boba-testnet/ /it/supported-networks/boba/ /it/supported-networks/botanix-testnet/ @@ -2161,7 +2160,6 @@ /it/supported-networks/etherlink-mainnet/ /it/supported-networks/etherlink-shadownet/ /it/supported-networks/etherlink-testnet/ -/it/supported-networks/expchain-testnet/ /it/supported-networks/fantom-testnet/ /it/supported-networks/fantom/ /it/supported-networks/fraxtal/ @@ -2210,6 +2208,7 @@ /it/supported-networks/mbase/ /it/supported-networks/megaeth-testnet/ /it/supported-networks/megaeth-timothy/ +/it/supported-networks/megaeth/ /it/supported-networks/metis/ /it/supported-networks/mint-sepolia/ /it/supported-networks/mint/ @@ -2245,6 +2244,7 @@ /it/supported-networks/soneium/ /it/supported-networks/sonic-testnet/ /it/supported-networks/sonic/ +/it/supported-networks/stable/ /it/supported-networks/starknet-mainnet/ /it/supported-networks/starknet-testnet/ /it/supported-networks/status-sepolia/ @@ -2264,6 +2264,7 @@ /it/supported-networks/viction/ /it/supported-networks/wax-testnet/ /it/supported-networks/wax/ +/it/supported-networks/worldchain/ /it/supported-networks/xlayer-mainnet/ /it/supported-networks/xlayer-sepolia/ /it/supported-networks/zetachain/ @@ -2380,7 +2381,6 @@ /ja/subgraphs/developing/subgraphs/ /ja/subgraphs/explorer/ /ja/subgraphs/fair-use-policy/ -/ja/subgraphs/guides/arweave/ /ja/subgraphs/guides/contract-analyzer/ /ja/subgraphs/guides/enums/ /ja/subgraphs/guides/grafting/ @@ -2431,7 +2431,6 @@ /ja/supported-networks/blast-testnet/ /ja/supported-networks/bnb-op/ /ja/supported-networks/bnb-svm/ -/ja/supported-networks/boba-bnb/ /ja/supported-networks/boba-testnet/ /ja/supported-networks/boba/ /ja/supported-networks/botanix-testnet/ @@ -2450,7 +2449,6 @@ /ja/supported-networks/etherlink-mainnet/ /ja/supported-networks/etherlink-shadownet/ /ja/supported-networks/etherlink-testnet/ -/ja/supported-networks/expchain-testnet/ /ja/supported-networks/fantom-testnet/ /ja/supported-networks/fantom/ /ja/supported-networks/fraxtal/ @@ -2499,6 +2497,7 @@ /ja/supported-networks/mbase/ /ja/supported-networks/megaeth-testnet/ /ja/supported-networks/megaeth-timothy/ +/ja/supported-networks/megaeth/ /ja/supported-networks/metis/ /ja/supported-networks/mint-sepolia/ /ja/supported-networks/mint/ @@ -2534,6 +2533,7 @@ /ja/supported-networks/soneium/ /ja/supported-networks/sonic-testnet/ /ja/supported-networks/sonic/ +/ja/supported-networks/stable/ /ja/supported-networks/starknet-mainnet/ /ja/supported-networks/starknet-testnet/ /ja/supported-networks/status-sepolia/ @@ -2553,6 +2553,7 @@ /ja/supported-networks/viction/ /ja/supported-networks/wax-testnet/ /ja/supported-networks/wax/ +/ja/supported-networks/worldchain/ /ja/supported-networks/xlayer-mainnet/ /ja/supported-networks/xlayer-sepolia/ /ja/supported-networks/zetachain/ @@ -2667,7 +2668,6 @@ /ko/subgraphs/developing/subgraphs/ /ko/subgraphs/explorer/ /ko/subgraphs/fair-use-policy/ -/ko/subgraphs/guides/arweave/ /ko/subgraphs/guides/contract-analyzer/ /ko/subgraphs/guides/enums/ /ko/subgraphs/guides/grafting/ @@ -2807,7 +2807,6 @@ /mr/subgraphs/developing/subgraphs/ /mr/subgraphs/explorer/ /mr/subgraphs/fair-use-policy/ -/mr/subgraphs/guides/arweave/ /mr/subgraphs/guides/contract-analyzer/ /mr/subgraphs/guides/enums/ /mr/subgraphs/guides/grafting/ @@ -2858,7 +2857,6 @@ /mr/supported-networks/blast-testnet/ /mr/supported-networks/bnb-op/ /mr/supported-networks/bnb-svm/ -/mr/supported-networks/boba-bnb/ /mr/supported-networks/boba-testnet/ /mr/supported-networks/boba/ /mr/supported-networks/botanix-testnet/ @@ -2877,7 +2875,6 @@ /mr/supported-networks/etherlink-mainnet/ /mr/supported-networks/etherlink-shadownet/ /mr/supported-networks/etherlink-testnet/ -/mr/supported-networks/expchain-testnet/ /mr/supported-networks/fantom-testnet/ /mr/supported-networks/fantom/ /mr/supported-networks/fraxtal/ @@ -2926,6 +2923,7 @@ /mr/supported-networks/mbase/ /mr/supported-networks/megaeth-testnet/ /mr/supported-networks/megaeth-timothy/ +/mr/supported-networks/megaeth/ /mr/supported-networks/metis/ /mr/supported-networks/mint-sepolia/ /mr/supported-networks/mint/ @@ -2961,6 +2959,7 @@ /mr/supported-networks/soneium/ /mr/supported-networks/sonic-testnet/ /mr/supported-networks/sonic/ +/mr/supported-networks/stable/ /mr/supported-networks/starknet-mainnet/ /mr/supported-networks/starknet-testnet/ /mr/supported-networks/status-sepolia/ @@ -2980,6 +2979,7 @@ /mr/supported-networks/viction/ /mr/supported-networks/wax-testnet/ /mr/supported-networks/wax/ +/mr/supported-networks/worldchain/ /mr/supported-networks/xlayer-mainnet/ /mr/supported-networks/xlayer-sepolia/ /mr/supported-networks/zetachain/ @@ -3094,7 +3094,6 @@ /nl/subgraphs/developing/subgraphs/ /nl/subgraphs/explorer/ /nl/subgraphs/fair-use-policy/ -/nl/subgraphs/guides/arweave/ /nl/subgraphs/guides/contract-analyzer/ /nl/subgraphs/guides/enums/ /nl/subgraphs/guides/grafting/ @@ -3232,7 +3231,6 @@ /pl/subgraphs/developing/subgraphs/ /pl/subgraphs/explorer/ /pl/subgraphs/fair-use-policy/ -/pl/subgraphs/guides/arweave/ /pl/subgraphs/guides/contract-analyzer/ /pl/subgraphs/guides/enums/ /pl/subgraphs/guides/grafting/ @@ -3372,7 +3370,6 @@ /pt/subgraphs/developing/subgraphs/ /pt/subgraphs/explorer/ /pt/subgraphs/fair-use-policy/ -/pt/subgraphs/guides/arweave/ /pt/subgraphs/guides/contract-analyzer/ /pt/subgraphs/guides/enums/ /pt/subgraphs/guides/grafting/ @@ -3423,7 +3420,6 @@ /pt/supported-networks/blast-testnet/ /pt/supported-networks/bnb-op/ /pt/supported-networks/bnb-svm/ -/pt/supported-networks/boba-bnb/ /pt/supported-networks/boba-testnet/ /pt/supported-networks/boba/ /pt/supported-networks/botanix-testnet/ @@ -3442,7 +3438,6 @@ /pt/supported-networks/etherlink-mainnet/ /pt/supported-networks/etherlink-shadownet/ /pt/supported-networks/etherlink-testnet/ -/pt/supported-networks/expchain-testnet/ /pt/supported-networks/fantom-testnet/ /pt/supported-networks/fantom/ /pt/supported-networks/fraxtal/ @@ -3491,6 +3486,7 @@ /pt/supported-networks/mbase/ /pt/supported-networks/megaeth-testnet/ /pt/supported-networks/megaeth-timothy/ +/pt/supported-networks/megaeth/ /pt/supported-networks/metis/ /pt/supported-networks/mint-sepolia/ /pt/supported-networks/mint/ @@ -3526,6 +3522,7 @@ /pt/supported-networks/soneium/ /pt/supported-networks/sonic-testnet/ /pt/supported-networks/sonic/ +/pt/supported-networks/stable/ /pt/supported-networks/starknet-mainnet/ /pt/supported-networks/starknet-testnet/ /pt/supported-networks/status-sepolia/ @@ -3545,6 +3542,7 @@ /pt/supported-networks/viction/ /pt/supported-networks/wax-testnet/ /pt/supported-networks/wax/ +/pt/supported-networks/worldchain/ /pt/supported-networks/xlayer-mainnet/ /pt/supported-networks/xlayer-sepolia/ /pt/supported-networks/zetachain/ @@ -3659,7 +3657,6 @@ /ro/subgraphs/developing/subgraphs/ /ro/subgraphs/explorer/ /ro/subgraphs/fair-use-policy/ -/ro/subgraphs/guides/arweave/ /ro/subgraphs/guides/contract-analyzer/ /ro/subgraphs/guides/enums/ /ro/subgraphs/guides/grafting/ @@ -3799,7 +3796,6 @@ /ru/subgraphs/developing/subgraphs/ /ru/subgraphs/explorer/ /ru/subgraphs/fair-use-policy/ -/ru/subgraphs/guides/arweave/ /ru/subgraphs/guides/contract-analyzer/ /ru/subgraphs/guides/enums/ /ru/subgraphs/guides/grafting/ @@ -3850,7 +3846,6 @@ /ru/supported-networks/blast-testnet/ /ru/supported-networks/bnb-op/ /ru/supported-networks/bnb-svm/ -/ru/supported-networks/boba-bnb/ /ru/supported-networks/boba-testnet/ /ru/supported-networks/boba/ /ru/supported-networks/botanix-testnet/ @@ -3869,7 +3864,6 @@ /ru/supported-networks/etherlink-mainnet/ /ru/supported-networks/etherlink-shadownet/ /ru/supported-networks/etherlink-testnet/ -/ru/supported-networks/expchain-testnet/ /ru/supported-networks/fantom-testnet/ /ru/supported-networks/fantom/ /ru/supported-networks/fraxtal/ @@ -3918,6 +3912,7 @@ /ru/supported-networks/mbase/ /ru/supported-networks/megaeth-testnet/ /ru/supported-networks/megaeth-timothy/ +/ru/supported-networks/megaeth/ /ru/supported-networks/metis/ /ru/supported-networks/mint-sepolia/ /ru/supported-networks/mint/ @@ -3953,6 +3948,7 @@ /ru/supported-networks/soneium/ /ru/supported-networks/sonic-testnet/ /ru/supported-networks/sonic/ +/ru/supported-networks/stable/ /ru/supported-networks/starknet-mainnet/ /ru/supported-networks/starknet-testnet/ /ru/supported-networks/status-sepolia/ @@ -3972,6 +3968,7 @@ /ru/supported-networks/viction/ /ru/supported-networks/wax-testnet/ /ru/supported-networks/wax/ +/ru/supported-networks/worldchain/ /ru/supported-networks/xlayer-mainnet/ /ru/supported-networks/xlayer-sepolia/ /ru/supported-networks/zetachain/ @@ -4088,7 +4085,6 @@ /sv/subgraphs/developing/subgraphs/ /sv/subgraphs/explorer/ /sv/subgraphs/fair-use-policy/ -/sv/subgraphs/guides/arweave/ /sv/subgraphs/guides/contract-analyzer/ /sv/subgraphs/guides/enums/ /sv/subgraphs/guides/grafting/ @@ -4139,7 +4135,6 @@ /sv/supported-networks/blast-testnet/ /sv/supported-networks/bnb-op/ /sv/supported-networks/bnb-svm/ -/sv/supported-networks/boba-bnb/ /sv/supported-networks/boba-testnet/ /sv/supported-networks/boba/ /sv/supported-networks/botanix-testnet/ @@ -4158,7 +4153,6 @@ /sv/supported-networks/etherlink-mainnet/ /sv/supported-networks/etherlink-shadownet/ /sv/supported-networks/etherlink-testnet/ -/sv/supported-networks/expchain-testnet/ /sv/supported-networks/fantom-testnet/ /sv/supported-networks/fantom/ /sv/supported-networks/fraxtal/ @@ -4207,6 +4201,7 @@ /sv/supported-networks/mbase/ /sv/supported-networks/megaeth-testnet/ /sv/supported-networks/megaeth-timothy/ +/sv/supported-networks/megaeth/ /sv/supported-networks/metis/ /sv/supported-networks/mint-sepolia/ /sv/supported-networks/mint/ @@ -4242,6 +4237,7 @@ /sv/supported-networks/soneium/ /sv/supported-networks/sonic-testnet/ /sv/supported-networks/sonic/ +/sv/supported-networks/stable/ /sv/supported-networks/starknet-mainnet/ /sv/supported-networks/starknet-testnet/ /sv/supported-networks/status-sepolia/ @@ -4261,9 +4257,15 @@ /sv/supported-networks/viction/ /sv/supported-networks/wax-testnet/ /sv/supported-networks/wax/ +/sv/supported-networks/worldchain/ /sv/supported-networks/xlayer-mainnet/ /sv/supported-networks/xlayer-sepolia/ /sv/supported-networks/zetachain/ +/sv/supported-networks/zilliqa-testnet/ +/sv/supported-networks/zilliqa/ +/sv/supported-networks/zksync-era-sepolia/ +/sv/supported-networks/zksync-era/ +/sv/supported-networks/zora/ /sv/token-api/endpoint-pricing/ /sv/token-api/evm-dexs/dexes/ /sv/token-api/evm-dexs/pools-ohlc/ @@ -4372,7 +4374,6 @@ /tr/subgraphs/developing/subgraphs/ /tr/subgraphs/explorer/ /tr/subgraphs/fair-use-policy/ -/tr/subgraphs/guides/arweave/ /tr/subgraphs/guides/contract-analyzer/ /tr/subgraphs/guides/enums/ /tr/subgraphs/guides/grafting/ @@ -4404,6 +4405,9 @@ /tr/substreams/publishing/ /tr/substreams/quick-start/ /tr/supported-networks/ +/tr/supported-networks/abstract-testnet/ +/tr/supported-networks/abstract/ +/tr/supported-networks/apechain-curtis/ /tr/token-api/endpoint-pricing/ /tr/token-api/evm-dexs/dexes/ /tr/token-api/evm-dexs/pools-ohlc/ @@ -4510,7 +4514,6 @@ /uk/subgraphs/developing/subgraphs/ /uk/subgraphs/explorer/ /uk/subgraphs/fair-use-policy/ -/uk/subgraphs/guides/arweave/ /uk/subgraphs/guides/contract-analyzer/ /uk/subgraphs/guides/enums/ /uk/subgraphs/guides/grafting/ @@ -4650,7 +4653,6 @@ /ur/subgraphs/developing/subgraphs/ /ur/subgraphs/explorer/ /ur/subgraphs/fair-use-policy/ -/ur/subgraphs/guides/arweave/ /ur/subgraphs/guides/contract-analyzer/ /ur/subgraphs/guides/enums/ /ur/subgraphs/guides/grafting/ @@ -4788,7 +4790,6 @@ /vi/subgraphs/developing/subgraphs/ /vi/subgraphs/explorer/ /vi/subgraphs/fair-use-policy/ -/vi/subgraphs/guides/arweave/ /vi/subgraphs/guides/contract-analyzer/ /vi/subgraphs/guides/enums/ /vi/subgraphs/guides/grafting/ @@ -4928,7 +4929,6 @@ /zh/subgraphs/developing/subgraphs/ /zh/subgraphs/explorer/ /zh/subgraphs/fair-use-policy/ -/zh/subgraphs/guides/arweave/ /zh/subgraphs/guides/contract-analyzer/ /zh/subgraphs/guides/enums/ /zh/subgraphs/guides/grafting/ diff --git a/website/src/HomePage.tsx b/website/src/HomePage.tsx index 300268104c90..1894df4dd0b0 100644 --- a/website/src/HomePage.tsx +++ b/website/src/HomePage.tsx @@ -181,7 +181,7 @@ export default function HomePage({ supportedNetworks }: { supportedNetworks: Sup

{t('index.supportedNetworks.description.base', [ - 90+ {t('index.supportedNetworks.description.networks')} + 80+ {t('index.supportedNetworks.description.networks')} , {t('index.supportedNetworks.description.completeThisForm')} diff --git a/website/src/components/Card.tsx b/website/src/components/Card.tsx index 5b2eb4efc0ab..fa0c4a22f445 100644 --- a/website/src/components/Card.tsx +++ b/website/src/components/Card.tsx @@ -18,14 +18,11 @@ export declare namespace CardProps { } interface ButtonProps extends BaseProps, Omit {} interface ExternalLinkProps - extends BaseProps, - Omit {} + extends BaseProps, Omit {} interface ClientLinkProps - extends BaseProps, - Omit {} + extends BaseProps, Omit {} interface OtherElementProps - extends BaseProps, - Omit {} + extends BaseProps, Omit {} } type CardProps = diff --git a/website/src/layout/Layout.tsx b/website/src/layout/Layout.tsx index b1e76d3d29c6..ea8018a90231 100644 --- a/website/src/layout/Layout.tsx +++ b/website/src/layout/Layout.tsx @@ -35,6 +35,7 @@ import { APIToken, BookOpenText, Files, + Horizon, House, Hypergraph, MagnifyingGlass, @@ -48,7 +49,6 @@ import { Stack, Subgraph, Substreams, - SubstreamsPoweredSubgraph, TheGraph, Translate, } from '@edgeandnode/gds/icons' @@ -194,9 +194,6 @@ export default function Layout({ pageOpts, children }: NextraThemeLayoutProps } - if (routeWithoutLocale === '/sps' || routeWithoutLocale.startsWith('/sps/')) { - return - } if (routeWithoutLocale === '/token-api' || routeWithoutLocale.startsWith('/token-api/')) { return } @@ -209,6 +206,9 @@ export default function Layout({ pageOpts, children }: NextraThemeLayoutProps } + if (routeWithoutLocale === '/graph-horizon' || routeWithoutLocale.startsWith('/graph-horizon/')) { + return + } if ( routeWithoutLocale === '/resources' || routeWithoutLocale.startsWith('/resources/') || diff --git a/website/src/openApi/tokenApi.json b/website/src/openApi/tokenApi.json index e5a19c0a692b..f27c13f5e7a4 100644 --- a/website/src/openApi/tokenApi.json +++ b/website/src/openApi/tokenApi.json @@ -3,7 +3,7 @@ "info": { "title": "Token API", "description": "Power your apps & AI agents with real-time token data.", - "version": "3.6.0+da03655 (2025-11-20)" + "version": "3.6.3+5808c37 (2025-12-11)" }, "servers": [ { @@ -597,7 +597,7 @@ "name": "start_time", "schema": { "type": "string", - "default": "2025-10-20" + "default": "2025-11-11" }, "description": "UNIX timestamp in seconds or date string (e.g. \"2025-01-01T00:00:00Z\", \"2025-01-01\", ...)." }, @@ -8163,7 +8163,7 @@ "name": "start_time", "schema": { "type": "string", - "default": "2025-10-20" + "default": "2025-11-11" }, "description": "UNIX timestamp in seconds or date string (e.g. \"2025-01-01T00:00:00Z\", \"2025-01-01\", ...)." }, @@ -13841,7 +13841,7 @@ "name": "start_time", "schema": { "type": "string", - "default": "2025-10-20" + "default": "2025-11-11" }, "description": "UNIX timestamp in seconds or date string (e.g. \"2025-01-01T00:00:00Z\", \"2025-01-01\", ...)." }, @@ -17726,7 +17726,7 @@ "name": "start_time", "schema": { "type": "string", - "default": "2025-10-20" + "default": "2025-11-11" }, "description": "UNIX timestamp in seconds or date string (e.g. \"2025-01-01T00:00:00Z\", \"2025-01-01\", ...)." }, @@ -21096,9 +21096,9 @@ "examples": { "example": { "value": { - "version": "3.6.0", - "commit": "da03655", - "date": "2025-11-20", + "version": "3.6.3", + "commit": "5808c37", + "date": "2025-12-11", "repo": "pinax-network/token-api" } } diff --git a/website/src/pages/ar/index.json b/website/src/pages/ar/index.json index d7b50df1c3ee..8de6ca3dd107 100644 --- a/website/src/pages/ar/index.json +++ b/website/src/pages/ar/index.json @@ -2,7 +2,7 @@ "title": "Home", "hero": { "title": "The Graph Docs", - "description": "The Graph is a blockchain data solution that powers applications, analytics, and AI on 90+ chains. The Graph's core products include the Token API for web3 apps, Subgraphs for indexing smart contracts, and Substreams for real-time and historical data streaming.", + "description": "The Graph is a blockchain data solution that powers applications, analytics, and AI on 80+ chains. The Graph's core products include the Token API for web3 apps, Subgraphs for indexing smart contracts, and Substreams for real-time and historical data streaming.", "cta1": "How The Graph works", "cta2": "Build your first subgraph" }, diff --git a/website/src/pages/ar/token-api/_meta.js b/website/src/pages/ar/token-api/_meta.js index a8624da52e7f..9588f70cec53 100644 --- a/website/src/pages/ar/token-api/_meta.js +++ b/website/src/pages/ar/token-api/_meta.js @@ -11,6 +11,6 @@ export default { 'tvm-dexs': titles['tvm-dexs'] ?? '', monitoring: titles['monitoring'] ?? '', 'endpoint-pricing': '', + guides: titles['guides'] ?? '', faq: '', - 'upgrade-to-v1': '', } diff --git a/website/src/pages/ar/token-api/guides/_meta-titles.json b/website/src/pages/ar/token-api/guides/_meta-titles.json new file mode 100644 index 000000000000..cd93dcc0fc0b --- /dev/null +++ b/website/src/pages/ar/token-api/guides/_meta-titles.json @@ -0,0 +1,4 @@ +{ + "gpt": "Create Custom GPTS", + "upgrade-to-v1": "" +} diff --git a/website/src/pages/ar/token-api/guides/_meta.js b/website/src/pages/ar/token-api/guides/_meta.js new file mode 100644 index 000000000000..e5aaaadd78f2 --- /dev/null +++ b/website/src/pages/ar/token-api/guides/_meta.js @@ -0,0 +1,4 @@ +export default { + gpt: '', + 'upgrade-to-v1': '', +} diff --git a/website/src/pages/ar/token-api/guides/gpt.mdx b/website/src/pages/ar/token-api/guides/gpt.mdx new file mode 100644 index 000000000000..564d013dea20 --- /dev/null +++ b/website/src/pages/ar/token-api/guides/gpt.mdx @@ -0,0 +1,121 @@ +--- +title: How the Token API Powers Custom GPTs +sidebarTitle: Create Custom GPTs +--- + +## Overview + +The Token API is a pre-indexed blockchain data service that provides real-time access to token balances, metadata, prices, liquidity, and volume across multiple chains. Developers use its REST endpoints to build wallets, trading dashboards, DeFi analytics, and AI systems without maintaining their own indexing stack. Custom GPTs can connect directly to the Token API's OpenAPI schema. + +The Token API enables developers to build **Custom GPTs** to reason over live blockchain data inside ChatGPT that can reason over and respond with live blockchain data directly inside ChatGPT. + +## What the Token API Enables in Custom GPTs + +When a Custom GPT is wired to the Token API, it gains access to a machine-readable schema and authenticated endpoints. Developers can use this to: + +- **Query real-time onchain data**: Balances, token prices, liquidity, and transaction history. +- **Automate domain-specific tasks**: Portfolio tracking, accounting, reconciliation, and market analysis. +- **Power AI agents with verifiable blockchain context**: Use the same data sources dapps rely on. + +Because the Token API provides a machine-readable schema and authenticated requests, it serves as a structured data layer that enables GPT-5 agents to combine natural language reasoning with live onchain data from The Graph. + +## When to Use the Token API for Custom GPTs + +Use the Token API when your GPT needs repeatable, domain-specific behavior grounded in blockchain data. This is most effective when the GPT performs the same type of task frequently or enforces a workflow you define. For one-off or exploratory questions, standard ChatGPT prompts are sufficient. + +## Choosing a Use Case + +Start with a clear, narrow objective, then expand as needed. Common patterns include: + +- **Accounting GPT**: Onchain accounting, tax tagging, and portfolio reconciliation. +- **Trading GPT**: Liquidity, pricing, and volume analysis for trading strategies. +- **Protocol Tracking GPT**: Real-time monitoring of transaction activity and liquidity pools. + +A focused initial goal such as “Retrieve token balances and prices for a wallet” makes it easier to configure reliable behavior before adding complex workflows. + +## Requirements + +| Requirement | Description | +| ---------------------- | -------------------------------------------------------- | +| ChatGPT 5 | Custom GPT creation requires GPT-5 tier or Pro. | +| Token API Subscription | Sign up at [The Graph Market](https://thegraph.market./) | +| Token API Key | Available in your dashboard as the Authentication JWT. | + +## Setting Up a Custom GPT + +Below is an explanatory outline of what happens during setup. This section provides conceptual understanding. + +### Create Custom GPT + +1. Visit chat.openai.com/gpts in your browser. 2, Click Create (top right). +2. Under Configure (in the top left panel), set up your GPT's personality and scope. + +### Configure Your GPT + +You define the GPT's role, scope, and metadata so it knows what it is designed to do. This includes: + +- **Name and Description**: Helps users discover your GPT. + - For example: **Name**: Token Tracker GPT **Description**: An onchain analytics assistant that retrieves live token balances, prices, and liquidity data using The Graph's Token API. +- **Instructions**: Tells the GPT what tasks it should perform using the Token API. + - For example: You are a blockchain data assistant retrieving onchain token data from The Graph's Token API. Use endpoints to fetch balances, liquidity, and price history across EVM chains. Present results in tables with token symbols, prices, and USD values. +- **Knowledge**: Optional context files such as wallet references, accounting rules, or code snippets. +- **New Action**: At the bottom, click “Create new action” to connect your GPT to the Token API. + +### Connect the Token API + +To enable live blockchain queries inside ChatGPT, you connect the GPT to the Token API through: + +#### Authentication + +1. Set Authentication to API Key → Bearer. +2. Open [The Graph Market](https://thegraph.market./) and copy your Authentication JWT from your dashboard. +3. Paste the token into the ChatGPT prompt where the field shows [HIDDEN]. + +#### Schema + +1. Above the Schema box, click Import from URL. +2. Paste: https://token-api.thegraph.com/openapi +3. Click Import. You'll now see endpoints like: + - `getV1EvmTokens` + - `getV1EvmDexes` + - `getV1EvmBalances` +4. Click Test on one (for example `getV1EvmDexes`) to verify connection. + +##### Privacy + +1. At the bottom, under Privacy, paste: https://pinax.network/en/legal/privacy + +### Privacy + +You can attach a privacy policy URL such as: https://pinax.network/en/legal/privacy + +## Example Prompt Patterns + +These examples help illustrate how a GPT reasons over Token API data. + +### Wallet and Portfolio + +Get the total USD balance for a wallet across multiple chains, returning token name, symbol, balance, and price. + +### Trading Analysis + +Compare USDC and DAI liquidity across Uniswap and Curve. Return the top 5 pools by TVL. + +### Accounting + +List all ERC-20 transfers for this address in the last 30 days. Group by token and total incoming/outgoing volume. + +## Best Practices + +| Tip | Why It Matters | +| --------------------------------- | ---------------------------------------------------------------------- | +| Scope your GPT narrowly first | Simplifies debugging and validates schema integration. | +| Use clear role instructions | Helps the GPT choose the right endpoints and avoid assumptions. | +| Name endpoints explicitly | Improves routing accuracy when fetching balances, prices, or DEX data. | +| Combine with code | Enables custom parsing or logic for complex workflows. | +| Add Subgraph or Substream context | Provides richer analytics when combined with Token API data. | + +## FAQs & Resources + +- Builders Office Hours (October 23, 2025) +- Watch the full session: https://x.com/i/broadcasts/1mrGmBzBarNJy diff --git a/website/src/pages/ar/token-api/upgrade-to-v1.mdx b/website/src/pages/ar/token-api/guides/upgrade-to-v1.mdx similarity index 74% rename from website/src/pages/ar/token-api/upgrade-to-v1.mdx rename to website/src/pages/ar/token-api/guides/upgrade-to-v1.mdx index fbe09101eaa5..e2a7ccf973fa 100644 --- a/website/src/pages/ar/token-api/upgrade-to-v1.mdx +++ b/website/src/pages/ar/token-api/guides/upgrade-to-v1.mdx @@ -16,7 +16,7 @@ Used to describe endpoints supporting Solana (currently the only SVM chain suppo ## 🔑 Breaking Changes Summary -### 1. **API Versioning** +### 1. API Versioning All endpoints now use the `/v1` prefix. @@ -34,7 +34,7 @@ GET /v1/evm/balances GET /v1/evm/nft/items ``` -### 2. **Route Structure Reorganization** +### 2. Route Structure Reorganization #### 2.1 EVM Endpoints @@ -92,7 +92,7 @@ Consolidated under `/v1/svm/*` ## 📝 Parameter Changes -### 3. **Path Parameters → Query Parameters** +### 3. Path Parameters → Query Parameters All path parameters have been moved to query parameters. @@ -112,7 +112,7 @@ GET /v1/evm/holders?network=mainnet&contract=0x... GET /v1/evm/nft/items?network=mainnet&contract=0x...&token_id=5712 ``` -### 4. **Standardized Parameter Naming** +### 4. Standardized Parameter Naming All query parameters have been standardized to use snake_case naming convention. @@ -136,7 +136,7 @@ All query parameters have been standardized to use snake_case naming convention. **Important:** `matic` network has been renamed to `polygon`. -### 5. **Batched Parameters** +### 5. Batched Parameters Many parameters now support batching - accepting single values or comma-separated strings. @@ -151,17 +151,17 @@ Many parameters now support batching - accepting single values or comma-separate **Examples:** ```console -# Single value +## Single value ?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 -# Comma-separated, single parameter +## Comma-separated, single parameter ?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 -# Repeated parameter values +## Repeated parameter values ?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&contract=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 ``` -### 6. **New Parameters** +### 6. New Parameters #### `include_null_balances` @@ -175,7 +175,7 @@ Added to balance endpoints to optionally include zero/null balances. ## 🔄 Response Changes -### 7. **Pagination Changes** +### 7. Pagination Changes Pagination responses have been simplified. The API no longer computes total result counts due to performance and accuracy considerations when working with ClickHouse views and materialized tables. @@ -212,21 +212,51 @@ Pagination responses have been simplified. The API no longer computes total resu **Important:** To retrieve all results, continue incrementing the `page` parameter until the API returns an empty `data` array. This indicates you've reached the end of the results. -### 8. **Removed Parameters** +### 8. Removed Parameters The following deprecated parameters have been removed: - `orderBy` - Results are now ordered by timestamp/block by default - `orderDirection` - Always descending (newest first) +### 9. Cached Queries + +Queries are now cached on the ClickHouse side for better performance. + +You can specifically request to not use the cache by setting the `Cache-Control` header to `no-cache`. + +#### Example + +**Cache** + +```console +$ curl -s 'https://token-api.thegraph.com/v1/...' | jq .statistics +{ + "bytes_read": 221, + "rows_read": 1, + "elapsed": 0.002212065 +} +``` + +**No cache** + +```console +$ curl -s 'http://localhost:8000/v1/...' --header 'Cache-Control: no-cache' | jq .statistics +{ + "bytes_read": 14621174348, + "rows_read": 223244390, + "elapsed": 0.971064066 +} +``` + ## 📚 Example Migrations -### Old vs New: Get Token Balances +### Example 1: Get Token Balances **Before:** ```bash -GET /balances/evm/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045?network_id=mainnet&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 +GET /token/balances/evm/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045?network_id=mainnet&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 ``` **After:** @@ -235,7 +265,63 @@ GET /balances/evm/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045?network_id=mainnet& GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 ``` -### New Feature: Batched Queries +### Example 2: Get NFT Items + +**Before:** + +```bash +GET /nft/items/evm/contract/0xbd3531da5cf5857e7cfaa92426877b022e612cf8/token_id/5712?network_id=mainnet +``` + +**After:** + +```bash +GET /v1/evm/nft/items?network=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&token_id=5712 +``` + +### Example 3: Get Token Transfers with Time Filter + +**Before:** + +```bash +GET /token/transfers/evm?network_id=mainnet&from=0xd8da6bf26964af9d7eed9e03e53415d37aa96045&startTime=1735689600&endTime=1767225600 +``` + +**After:** + +```bash +GET /v1/evm/transfers?network=mainnet&from_address=0xd8da6bf26964af9d7eed9e03e53415d37aa96045&start_time=1735689600&end_time=1767225600 +``` + +### Example 4: Get NFT Transfer Activities + +**Before:** + +```bash +GET /nft/activities/evm?network_id=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&anyAddress=0xd8da6bf26964af9d7eed9e03e53415d37aa96045 +``` + +**After:** + +```bash +GET /v1/evm/nft/transfers?network=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&address=0xd8da6bf26964af9d7eed9e03e53415d37aa96045 +``` + +### Example 5: Get Pool OHLC Data + +**Before:** + +```bash +GET /token/ohlc/pools/evm/0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640?network_id=mainnet&interval=1h&startTime=1735689600 +``` + +**After:** + +```bash +GET /v1/evm/pools/ohlc?network=mainnet&pool=0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640&interval=1h&start_time=1735689600 +``` + +### Example 6: Batched Query (New Feature) Query balances for multiple contracts in a single request: @@ -243,9 +329,15 @@ Query balances for multiple contracts in a single request: GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 ``` +Query transfers from multiple addresses: + +```bash +GET /v1/evm/transfers?network=mainnet&from_address=0xabc...,0xdef...,0x123...&start_time=1735689600 +``` + ## ⚠️ Important Notes -1. **Backward Compatibility:** The old endpoints are deprecated and will be removed in the future. Migrate by **Oct 30, 2025**. +1. **Migration Notes:** The old endpoints were deprecated and removed on **October 30, 2025**. Please ensure all integrations have been migrated to the new Token API v1 endpoints. 2. **Default Sorting:** All results are now sorted by timestamp (descending) by default. Custom sorting is no longer supported. diff --git a/website/src/pages/cs/index.json b/website/src/pages/cs/index.json index 80e16a746c4e..ed010dc5dc94 100644 --- a/website/src/pages/cs/index.json +++ b/website/src/pages/cs/index.json @@ -2,7 +2,7 @@ "title": "Domov", "hero": { "title": "The Graph Docs", - "description": "The Graph is a blockchain data solution that powers applications, analytics, and AI on 90+ chains. The Graph's core products include the Token API for web3 apps, Subgraphs for indexing smart contracts, and Substreams for real-time and historical data streaming.", + "description": "The Graph is a blockchain data solution that powers applications, analytics, and AI on 80+ chains. The Graph's core products include the Token API for web3 apps, Subgraphs for indexing smart contracts, and Substreams for real-time and historical data streaming.", "cta1": "How The Graph works", "cta2": "Build your first subgraph" }, diff --git a/website/src/pages/cs/subgraphs/guides/_meta.js b/website/src/pages/cs/subgraphs/guides/_meta.js index fd5608dcceb2..1c081848ea08 100644 --- a/website/src/pages/cs/subgraphs/guides/_meta.js +++ b/website/src/pages/cs/subgraphs/guides/_meta.js @@ -2,7 +2,6 @@ export default { 'subgraph-composition': '', 'subgraph-debug-forking': '', near: '', - grafting: '', 'subgraph-uncrashable': '', 'transfer-to-the-graph': '', diff --git a/website/src/pages/cs/token-api/_meta.js b/website/src/pages/cs/token-api/_meta.js index a8624da52e7f..9588f70cec53 100644 --- a/website/src/pages/cs/token-api/_meta.js +++ b/website/src/pages/cs/token-api/_meta.js @@ -11,6 +11,6 @@ export default { 'tvm-dexs': titles['tvm-dexs'] ?? '', monitoring: titles['monitoring'] ?? '', 'endpoint-pricing': '', + guides: titles['guides'] ?? '', faq: '', - 'upgrade-to-v1': '', } diff --git a/website/src/pages/cs/token-api/guides/_meta-titles.json b/website/src/pages/cs/token-api/guides/_meta-titles.json new file mode 100644 index 000000000000..cd93dcc0fc0b --- /dev/null +++ b/website/src/pages/cs/token-api/guides/_meta-titles.json @@ -0,0 +1,4 @@ +{ + "gpt": "Create Custom GPTS", + "upgrade-to-v1": "" +} diff --git a/website/src/pages/cs/token-api/guides/_meta.js b/website/src/pages/cs/token-api/guides/_meta.js new file mode 100644 index 000000000000..e5aaaadd78f2 --- /dev/null +++ b/website/src/pages/cs/token-api/guides/_meta.js @@ -0,0 +1,4 @@ +export default { + gpt: '', + 'upgrade-to-v1': '', +} diff --git a/website/src/pages/cs/token-api/guides/gpt.mdx b/website/src/pages/cs/token-api/guides/gpt.mdx new file mode 100644 index 000000000000..564d013dea20 --- /dev/null +++ b/website/src/pages/cs/token-api/guides/gpt.mdx @@ -0,0 +1,121 @@ +--- +title: How the Token API Powers Custom GPTs +sidebarTitle: Create Custom GPTs +--- + +## Overview + +The Token API is a pre-indexed blockchain data service that provides real-time access to token balances, metadata, prices, liquidity, and volume across multiple chains. Developers use its REST endpoints to build wallets, trading dashboards, DeFi analytics, and AI systems without maintaining their own indexing stack. Custom GPTs can connect directly to the Token API's OpenAPI schema. + +The Token API enables developers to build **Custom GPTs** to reason over live blockchain data inside ChatGPT that can reason over and respond with live blockchain data directly inside ChatGPT. + +## What the Token API Enables in Custom GPTs + +When a Custom GPT is wired to the Token API, it gains access to a machine-readable schema and authenticated endpoints. Developers can use this to: + +- **Query real-time onchain data**: Balances, token prices, liquidity, and transaction history. +- **Automate domain-specific tasks**: Portfolio tracking, accounting, reconciliation, and market analysis. +- **Power AI agents with verifiable blockchain context**: Use the same data sources dapps rely on. + +Because the Token API provides a machine-readable schema and authenticated requests, it serves as a structured data layer that enables GPT-5 agents to combine natural language reasoning with live onchain data from The Graph. + +## When to Use the Token API for Custom GPTs + +Use the Token API when your GPT needs repeatable, domain-specific behavior grounded in blockchain data. This is most effective when the GPT performs the same type of task frequently or enforces a workflow you define. For one-off or exploratory questions, standard ChatGPT prompts are sufficient. + +## Choosing a Use Case + +Start with a clear, narrow objective, then expand as needed. Common patterns include: + +- **Accounting GPT**: Onchain accounting, tax tagging, and portfolio reconciliation. +- **Trading GPT**: Liquidity, pricing, and volume analysis for trading strategies. +- **Protocol Tracking GPT**: Real-time monitoring of transaction activity and liquidity pools. + +A focused initial goal such as “Retrieve token balances and prices for a wallet” makes it easier to configure reliable behavior before adding complex workflows. + +## Requirements + +| Requirement | Description | +| ---------------------- | -------------------------------------------------------- | +| ChatGPT 5 | Custom GPT creation requires GPT-5 tier or Pro. | +| Token API Subscription | Sign up at [The Graph Market](https://thegraph.market./) | +| Token API Key | Available in your dashboard as the Authentication JWT. | + +## Setting Up a Custom GPT + +Below is an explanatory outline of what happens during setup. This section provides conceptual understanding. + +### Create Custom GPT + +1. Visit chat.openai.com/gpts in your browser. 2, Click Create (top right). +2. Under Configure (in the top left panel), set up your GPT's personality and scope. + +### Configure Your GPT + +You define the GPT's role, scope, and metadata so it knows what it is designed to do. This includes: + +- **Name and Description**: Helps users discover your GPT. + - For example: **Name**: Token Tracker GPT **Description**: An onchain analytics assistant that retrieves live token balances, prices, and liquidity data using The Graph's Token API. +- **Instructions**: Tells the GPT what tasks it should perform using the Token API. + - For example: You are a blockchain data assistant retrieving onchain token data from The Graph's Token API. Use endpoints to fetch balances, liquidity, and price history across EVM chains. Present results in tables with token symbols, prices, and USD values. +- **Knowledge**: Optional context files such as wallet references, accounting rules, or code snippets. +- **New Action**: At the bottom, click “Create new action” to connect your GPT to the Token API. + +### Connect the Token API + +To enable live blockchain queries inside ChatGPT, you connect the GPT to the Token API through: + +#### Authentication + +1. Set Authentication to API Key → Bearer. +2. Open [The Graph Market](https://thegraph.market./) and copy your Authentication JWT from your dashboard. +3. Paste the token into the ChatGPT prompt where the field shows [HIDDEN]. + +#### Schema + +1. Above the Schema box, click Import from URL. +2. Paste: https://token-api.thegraph.com/openapi +3. Click Import. You'll now see endpoints like: + - `getV1EvmTokens` + - `getV1EvmDexes` + - `getV1EvmBalances` +4. Click Test on one (for example `getV1EvmDexes`) to verify connection. + +##### Privacy + +1. At the bottom, under Privacy, paste: https://pinax.network/en/legal/privacy + +### Privacy + +You can attach a privacy policy URL such as: https://pinax.network/en/legal/privacy + +## Example Prompt Patterns + +These examples help illustrate how a GPT reasons over Token API data. + +### Wallet and Portfolio + +Get the total USD balance for a wallet across multiple chains, returning token name, symbol, balance, and price. + +### Trading Analysis + +Compare USDC and DAI liquidity across Uniswap and Curve. Return the top 5 pools by TVL. + +### Accounting + +List all ERC-20 transfers for this address in the last 30 days. Group by token and total incoming/outgoing volume. + +## Best Practices + +| Tip | Why It Matters | +| --------------------------------- | ---------------------------------------------------------------------- | +| Scope your GPT narrowly first | Simplifies debugging and validates schema integration. | +| Use clear role instructions | Helps the GPT choose the right endpoints and avoid assumptions. | +| Name endpoints explicitly | Improves routing accuracy when fetching balances, prices, or DEX data. | +| Combine with code | Enables custom parsing or logic for complex workflows. | +| Add Subgraph or Substream context | Provides richer analytics when combined with Token API data. | + +## FAQs & Resources + +- Builders Office Hours (October 23, 2025) +- Watch the full session: https://x.com/i/broadcasts/1mrGmBzBarNJy diff --git a/website/src/pages/cs/token-api/upgrade-to-v1.mdx b/website/src/pages/cs/token-api/guides/upgrade-to-v1.mdx similarity index 74% rename from website/src/pages/cs/token-api/upgrade-to-v1.mdx rename to website/src/pages/cs/token-api/guides/upgrade-to-v1.mdx index fbe09101eaa5..e2a7ccf973fa 100644 --- a/website/src/pages/cs/token-api/upgrade-to-v1.mdx +++ b/website/src/pages/cs/token-api/guides/upgrade-to-v1.mdx @@ -16,7 +16,7 @@ Used to describe endpoints supporting Solana (currently the only SVM chain suppo ## 🔑 Breaking Changes Summary -### 1. **API Versioning** +### 1. API Versioning All endpoints now use the `/v1` prefix. @@ -34,7 +34,7 @@ GET /v1/evm/balances GET /v1/evm/nft/items ``` -### 2. **Route Structure Reorganization** +### 2. Route Structure Reorganization #### 2.1 EVM Endpoints @@ -92,7 +92,7 @@ Consolidated under `/v1/svm/*` ## 📝 Parameter Changes -### 3. **Path Parameters → Query Parameters** +### 3. Path Parameters → Query Parameters All path parameters have been moved to query parameters. @@ -112,7 +112,7 @@ GET /v1/evm/holders?network=mainnet&contract=0x... GET /v1/evm/nft/items?network=mainnet&contract=0x...&token_id=5712 ``` -### 4. **Standardized Parameter Naming** +### 4. Standardized Parameter Naming All query parameters have been standardized to use snake_case naming convention. @@ -136,7 +136,7 @@ All query parameters have been standardized to use snake_case naming convention. **Important:** `matic` network has been renamed to `polygon`. -### 5. **Batched Parameters** +### 5. Batched Parameters Many parameters now support batching - accepting single values or comma-separated strings. @@ -151,17 +151,17 @@ Many parameters now support batching - accepting single values or comma-separate **Examples:** ```console -# Single value +## Single value ?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 -# Comma-separated, single parameter +## Comma-separated, single parameter ?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 -# Repeated parameter values +## Repeated parameter values ?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&contract=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 ``` -### 6. **New Parameters** +### 6. New Parameters #### `include_null_balances` @@ -175,7 +175,7 @@ Added to balance endpoints to optionally include zero/null balances. ## 🔄 Response Changes -### 7. **Pagination Changes** +### 7. Pagination Changes Pagination responses have been simplified. The API no longer computes total result counts due to performance and accuracy considerations when working with ClickHouse views and materialized tables. @@ -212,21 +212,51 @@ Pagination responses have been simplified. The API no longer computes total resu **Important:** To retrieve all results, continue incrementing the `page` parameter until the API returns an empty `data` array. This indicates you've reached the end of the results. -### 8. **Removed Parameters** +### 8. Removed Parameters The following deprecated parameters have been removed: - `orderBy` - Results are now ordered by timestamp/block by default - `orderDirection` - Always descending (newest first) +### 9. Cached Queries + +Queries are now cached on the ClickHouse side for better performance. + +You can specifically request to not use the cache by setting the `Cache-Control` header to `no-cache`. + +#### Example + +**Cache** + +```console +$ curl -s 'https://token-api.thegraph.com/v1/...' | jq .statistics +{ + "bytes_read": 221, + "rows_read": 1, + "elapsed": 0.002212065 +} +``` + +**No cache** + +```console +$ curl -s 'http://localhost:8000/v1/...' --header 'Cache-Control: no-cache' | jq .statistics +{ + "bytes_read": 14621174348, + "rows_read": 223244390, + "elapsed": 0.971064066 +} +``` + ## 📚 Example Migrations -### Old vs New: Get Token Balances +### Example 1: Get Token Balances **Before:** ```bash -GET /balances/evm/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045?network_id=mainnet&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 +GET /token/balances/evm/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045?network_id=mainnet&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 ``` **After:** @@ -235,7 +265,63 @@ GET /balances/evm/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045?network_id=mainnet& GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 ``` -### New Feature: Batched Queries +### Example 2: Get NFT Items + +**Before:** + +```bash +GET /nft/items/evm/contract/0xbd3531da5cf5857e7cfaa92426877b022e612cf8/token_id/5712?network_id=mainnet +``` + +**After:** + +```bash +GET /v1/evm/nft/items?network=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&token_id=5712 +``` + +### Example 3: Get Token Transfers with Time Filter + +**Before:** + +```bash +GET /token/transfers/evm?network_id=mainnet&from=0xd8da6bf26964af9d7eed9e03e53415d37aa96045&startTime=1735689600&endTime=1767225600 +``` + +**After:** + +```bash +GET /v1/evm/transfers?network=mainnet&from_address=0xd8da6bf26964af9d7eed9e03e53415d37aa96045&start_time=1735689600&end_time=1767225600 +``` + +### Example 4: Get NFT Transfer Activities + +**Before:** + +```bash +GET /nft/activities/evm?network_id=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&anyAddress=0xd8da6bf26964af9d7eed9e03e53415d37aa96045 +``` + +**After:** + +```bash +GET /v1/evm/nft/transfers?network=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&address=0xd8da6bf26964af9d7eed9e03e53415d37aa96045 +``` + +### Example 5: Get Pool OHLC Data + +**Before:** + +```bash +GET /token/ohlc/pools/evm/0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640?network_id=mainnet&interval=1h&startTime=1735689600 +``` + +**After:** + +```bash +GET /v1/evm/pools/ohlc?network=mainnet&pool=0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640&interval=1h&start_time=1735689600 +``` + +### Example 6: Batched Query (New Feature) Query balances for multiple contracts in a single request: @@ -243,9 +329,15 @@ Query balances for multiple contracts in a single request: GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 ``` +Query transfers from multiple addresses: + +```bash +GET /v1/evm/transfers?network=mainnet&from_address=0xabc...,0xdef...,0x123...&start_time=1735689600 +``` + ## ⚠️ Important Notes -1. **Backward Compatibility:** The old endpoints are deprecated and will be removed in the future. Migrate by **Oct 30, 2025**. +1. **Migration Notes:** The old endpoints were deprecated and removed on **October 30, 2025**. Please ensure all integrations have been migrated to the new Token API v1 endpoints. 2. **Default Sorting:** All results are now sorted by timestamp (descending) by default. Custom sorting is no longer supported. diff --git a/website/src/pages/de/index.json b/website/src/pages/de/index.json index a388badaa79e..13f1eb675b9f 100644 --- a/website/src/pages/de/index.json +++ b/website/src/pages/de/index.json @@ -2,7 +2,7 @@ "title": "Home", "hero": { "title": "The Graph Docs", - "description": "The Graph is a blockchain data solution that powers applications, analytics, and AI on 90+ chains. The Graph's core products include the Token API for web3 apps, Subgraphs for indexing smart contracts, and Substreams for real-time and historical data streaming.", + "description": "The Graph is a blockchain data solution that powers applications, analytics, and AI on 80+ chains. The Graph's core products include the Token API for web3 apps, Subgraphs for indexing smart contracts, and Substreams for real-time and historical data streaming.", "cta1": "Funktionsweise von The Graph", "cta2": "Erstellen Sie Ihren ersten Subgraphen" }, diff --git a/website/src/pages/de/subgraphs/guides/_meta.js b/website/src/pages/de/subgraphs/guides/_meta.js index fd5608dcceb2..1c081848ea08 100644 --- a/website/src/pages/de/subgraphs/guides/_meta.js +++ b/website/src/pages/de/subgraphs/guides/_meta.js @@ -2,7 +2,6 @@ export default { 'subgraph-composition': '', 'subgraph-debug-forking': '', near: '', - grafting: '', 'subgraph-uncrashable': '', 'transfer-to-the-graph': '', diff --git a/website/src/pages/de/token-api/_meta.js b/website/src/pages/de/token-api/_meta.js index a8624da52e7f..9588f70cec53 100644 --- a/website/src/pages/de/token-api/_meta.js +++ b/website/src/pages/de/token-api/_meta.js @@ -11,6 +11,6 @@ export default { 'tvm-dexs': titles['tvm-dexs'] ?? '', monitoring: titles['monitoring'] ?? '', 'endpoint-pricing': '', + guides: titles['guides'] ?? '', faq: '', - 'upgrade-to-v1': '', } diff --git a/website/src/pages/de/token-api/guides/_meta-titles.json b/website/src/pages/de/token-api/guides/_meta-titles.json new file mode 100644 index 000000000000..cd93dcc0fc0b --- /dev/null +++ b/website/src/pages/de/token-api/guides/_meta-titles.json @@ -0,0 +1,4 @@ +{ + "gpt": "Create Custom GPTS", + "upgrade-to-v1": "" +} diff --git a/website/src/pages/de/token-api/guides/_meta.js b/website/src/pages/de/token-api/guides/_meta.js new file mode 100644 index 000000000000..e5aaaadd78f2 --- /dev/null +++ b/website/src/pages/de/token-api/guides/_meta.js @@ -0,0 +1,4 @@ +export default { + gpt: '', + 'upgrade-to-v1': '', +} diff --git a/website/src/pages/de/token-api/guides/gpt.mdx b/website/src/pages/de/token-api/guides/gpt.mdx new file mode 100644 index 000000000000..564d013dea20 --- /dev/null +++ b/website/src/pages/de/token-api/guides/gpt.mdx @@ -0,0 +1,121 @@ +--- +title: How the Token API Powers Custom GPTs +sidebarTitle: Create Custom GPTs +--- + +## Overview + +The Token API is a pre-indexed blockchain data service that provides real-time access to token balances, metadata, prices, liquidity, and volume across multiple chains. Developers use its REST endpoints to build wallets, trading dashboards, DeFi analytics, and AI systems without maintaining their own indexing stack. Custom GPTs can connect directly to the Token API's OpenAPI schema. + +The Token API enables developers to build **Custom GPTs** to reason over live blockchain data inside ChatGPT that can reason over and respond with live blockchain data directly inside ChatGPT. + +## What the Token API Enables in Custom GPTs + +When a Custom GPT is wired to the Token API, it gains access to a machine-readable schema and authenticated endpoints. Developers can use this to: + +- **Query real-time onchain data**: Balances, token prices, liquidity, and transaction history. +- **Automate domain-specific tasks**: Portfolio tracking, accounting, reconciliation, and market analysis. +- **Power AI agents with verifiable blockchain context**: Use the same data sources dapps rely on. + +Because the Token API provides a machine-readable schema and authenticated requests, it serves as a structured data layer that enables GPT-5 agents to combine natural language reasoning with live onchain data from The Graph. + +## When to Use the Token API for Custom GPTs + +Use the Token API when your GPT needs repeatable, domain-specific behavior grounded in blockchain data. This is most effective when the GPT performs the same type of task frequently or enforces a workflow you define. For one-off or exploratory questions, standard ChatGPT prompts are sufficient. + +## Choosing a Use Case + +Start with a clear, narrow objective, then expand as needed. Common patterns include: + +- **Accounting GPT**: Onchain accounting, tax tagging, and portfolio reconciliation. +- **Trading GPT**: Liquidity, pricing, and volume analysis for trading strategies. +- **Protocol Tracking GPT**: Real-time monitoring of transaction activity and liquidity pools. + +A focused initial goal such as “Retrieve token balances and prices for a wallet” makes it easier to configure reliable behavior before adding complex workflows. + +## Requirements + +| Requirement | Description | +| ---------------------- | -------------------------------------------------------- | +| ChatGPT 5 | Custom GPT creation requires GPT-5 tier or Pro. | +| Token API Subscription | Sign up at [The Graph Market](https://thegraph.market./) | +| Token API Key | Available in your dashboard as the Authentication JWT. | + +## Setting Up a Custom GPT + +Below is an explanatory outline of what happens during setup. This section provides conceptual understanding. + +### Create Custom GPT + +1. Visit chat.openai.com/gpts in your browser. 2, Click Create (top right). +2. Under Configure (in the top left panel), set up your GPT's personality and scope. + +### Configure Your GPT + +You define the GPT's role, scope, and metadata so it knows what it is designed to do. This includes: + +- **Name and Description**: Helps users discover your GPT. + - For example: **Name**: Token Tracker GPT **Description**: An onchain analytics assistant that retrieves live token balances, prices, and liquidity data using The Graph's Token API. +- **Instructions**: Tells the GPT what tasks it should perform using the Token API. + - For example: You are a blockchain data assistant retrieving onchain token data from The Graph's Token API. Use endpoints to fetch balances, liquidity, and price history across EVM chains. Present results in tables with token symbols, prices, and USD values. +- **Knowledge**: Optional context files such as wallet references, accounting rules, or code snippets. +- **New Action**: At the bottom, click “Create new action” to connect your GPT to the Token API. + +### Connect the Token API + +To enable live blockchain queries inside ChatGPT, you connect the GPT to the Token API through: + +#### Authentication + +1. Set Authentication to API Key → Bearer. +2. Open [The Graph Market](https://thegraph.market./) and copy your Authentication JWT from your dashboard. +3. Paste the token into the ChatGPT prompt where the field shows [HIDDEN]. + +#### Schema + +1. Above the Schema box, click Import from URL. +2. Paste: https://token-api.thegraph.com/openapi +3. Click Import. You'll now see endpoints like: + - `getV1EvmTokens` + - `getV1EvmDexes` + - `getV1EvmBalances` +4. Click Test on one (for example `getV1EvmDexes`) to verify connection. + +##### Privacy + +1. At the bottom, under Privacy, paste: https://pinax.network/en/legal/privacy + +### Privacy + +You can attach a privacy policy URL such as: https://pinax.network/en/legal/privacy + +## Example Prompt Patterns + +These examples help illustrate how a GPT reasons over Token API data. + +### Wallet and Portfolio + +Get the total USD balance for a wallet across multiple chains, returning token name, symbol, balance, and price. + +### Trading Analysis + +Compare USDC and DAI liquidity across Uniswap and Curve. Return the top 5 pools by TVL. + +### Accounting + +List all ERC-20 transfers for this address in the last 30 days. Group by token and total incoming/outgoing volume. + +## Best Practices + +| Tip | Why It Matters | +| --------------------------------- | ---------------------------------------------------------------------- | +| Scope your GPT narrowly first | Simplifies debugging and validates schema integration. | +| Use clear role instructions | Helps the GPT choose the right endpoints and avoid assumptions. | +| Name endpoints explicitly | Improves routing accuracy when fetching balances, prices, or DEX data. | +| Combine with code | Enables custom parsing or logic for complex workflows. | +| Add Subgraph or Substream context | Provides richer analytics when combined with Token API data. | + +## FAQs & Resources + +- Builders Office Hours (October 23, 2025) +- Watch the full session: https://x.com/i/broadcasts/1mrGmBzBarNJy diff --git a/website/src/pages/de/token-api/upgrade-to-v1.mdx b/website/src/pages/de/token-api/guides/upgrade-to-v1.mdx similarity index 74% rename from website/src/pages/de/token-api/upgrade-to-v1.mdx rename to website/src/pages/de/token-api/guides/upgrade-to-v1.mdx index fbe09101eaa5..e2a7ccf973fa 100644 --- a/website/src/pages/de/token-api/upgrade-to-v1.mdx +++ b/website/src/pages/de/token-api/guides/upgrade-to-v1.mdx @@ -16,7 +16,7 @@ Used to describe endpoints supporting Solana (currently the only SVM chain suppo ## 🔑 Breaking Changes Summary -### 1. **API Versioning** +### 1. API Versioning All endpoints now use the `/v1` prefix. @@ -34,7 +34,7 @@ GET /v1/evm/balances GET /v1/evm/nft/items ``` -### 2. **Route Structure Reorganization** +### 2. Route Structure Reorganization #### 2.1 EVM Endpoints @@ -92,7 +92,7 @@ Consolidated under `/v1/svm/*` ## 📝 Parameter Changes -### 3. **Path Parameters → Query Parameters** +### 3. Path Parameters → Query Parameters All path parameters have been moved to query parameters. @@ -112,7 +112,7 @@ GET /v1/evm/holders?network=mainnet&contract=0x... GET /v1/evm/nft/items?network=mainnet&contract=0x...&token_id=5712 ``` -### 4. **Standardized Parameter Naming** +### 4. Standardized Parameter Naming All query parameters have been standardized to use snake_case naming convention. @@ -136,7 +136,7 @@ All query parameters have been standardized to use snake_case naming convention. **Important:** `matic` network has been renamed to `polygon`. -### 5. **Batched Parameters** +### 5. Batched Parameters Many parameters now support batching - accepting single values or comma-separated strings. @@ -151,17 +151,17 @@ Many parameters now support batching - accepting single values or comma-separate **Examples:** ```console -# Single value +## Single value ?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 -# Comma-separated, single parameter +## Comma-separated, single parameter ?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 -# Repeated parameter values +## Repeated parameter values ?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&contract=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 ``` -### 6. **New Parameters** +### 6. New Parameters #### `include_null_balances` @@ -175,7 +175,7 @@ Added to balance endpoints to optionally include zero/null balances. ## 🔄 Response Changes -### 7. **Pagination Changes** +### 7. Pagination Changes Pagination responses have been simplified. The API no longer computes total result counts due to performance and accuracy considerations when working with ClickHouse views and materialized tables. @@ -212,21 +212,51 @@ Pagination responses have been simplified. The API no longer computes total resu **Important:** To retrieve all results, continue incrementing the `page` parameter until the API returns an empty `data` array. This indicates you've reached the end of the results. -### 8. **Removed Parameters** +### 8. Removed Parameters The following deprecated parameters have been removed: - `orderBy` - Results are now ordered by timestamp/block by default - `orderDirection` - Always descending (newest first) +### 9. Cached Queries + +Queries are now cached on the ClickHouse side for better performance. + +You can specifically request to not use the cache by setting the `Cache-Control` header to `no-cache`. + +#### Example + +**Cache** + +```console +$ curl -s 'https://token-api.thegraph.com/v1/...' | jq .statistics +{ + "bytes_read": 221, + "rows_read": 1, + "elapsed": 0.002212065 +} +``` + +**No cache** + +```console +$ curl -s 'http://localhost:8000/v1/...' --header 'Cache-Control: no-cache' | jq .statistics +{ + "bytes_read": 14621174348, + "rows_read": 223244390, + "elapsed": 0.971064066 +} +``` + ## 📚 Example Migrations -### Old vs New: Get Token Balances +### Example 1: Get Token Balances **Before:** ```bash -GET /balances/evm/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045?network_id=mainnet&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 +GET /token/balances/evm/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045?network_id=mainnet&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 ``` **After:** @@ -235,7 +265,63 @@ GET /balances/evm/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045?network_id=mainnet& GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 ``` -### New Feature: Batched Queries +### Example 2: Get NFT Items + +**Before:** + +```bash +GET /nft/items/evm/contract/0xbd3531da5cf5857e7cfaa92426877b022e612cf8/token_id/5712?network_id=mainnet +``` + +**After:** + +```bash +GET /v1/evm/nft/items?network=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&token_id=5712 +``` + +### Example 3: Get Token Transfers with Time Filter + +**Before:** + +```bash +GET /token/transfers/evm?network_id=mainnet&from=0xd8da6bf26964af9d7eed9e03e53415d37aa96045&startTime=1735689600&endTime=1767225600 +``` + +**After:** + +```bash +GET /v1/evm/transfers?network=mainnet&from_address=0xd8da6bf26964af9d7eed9e03e53415d37aa96045&start_time=1735689600&end_time=1767225600 +``` + +### Example 4: Get NFT Transfer Activities + +**Before:** + +```bash +GET /nft/activities/evm?network_id=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&anyAddress=0xd8da6bf26964af9d7eed9e03e53415d37aa96045 +``` + +**After:** + +```bash +GET /v1/evm/nft/transfers?network=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&address=0xd8da6bf26964af9d7eed9e03e53415d37aa96045 +``` + +### Example 5: Get Pool OHLC Data + +**Before:** + +```bash +GET /token/ohlc/pools/evm/0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640?network_id=mainnet&interval=1h&startTime=1735689600 +``` + +**After:** + +```bash +GET /v1/evm/pools/ohlc?network=mainnet&pool=0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640&interval=1h&start_time=1735689600 +``` + +### Example 6: Batched Query (New Feature) Query balances for multiple contracts in a single request: @@ -243,9 +329,15 @@ Query balances for multiple contracts in a single request: GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 ``` +Query transfers from multiple addresses: + +```bash +GET /v1/evm/transfers?network=mainnet&from_address=0xabc...,0xdef...,0x123...&start_time=1735689600 +``` + ## ⚠️ Important Notes -1. **Backward Compatibility:** The old endpoints are deprecated and will be removed in the future. Migrate by **Oct 30, 2025**. +1. **Migration Notes:** The old endpoints were deprecated and removed on **October 30, 2025**. Please ensure all integrations have been migrated to the new Token API v1 endpoints. 2. **Default Sorting:** All results are now sorted by timestamp (descending) by default. Custom sorting is no longer supported. diff --git a/website/src/pages/en/about.mdx b/website/src/pages/en/about.mdx index 990d80701228..d4d5f313096b 100644 --- a/website/src/pages/en/about.mdx +++ b/website/src/pages/en/about.mdx @@ -5,7 +5,7 @@ description: This page summarizes the core concepts and basics of The Graph Netw ## What is The Graph? -The Graph is a decentralized protocol for indexing and querying blockchain data across [90+ networks](/supported-networks/). +The Graph is a decentralized protocol for indexing and querying blockchain data across [80+ networks](/supported-networks/). Its data services include: diff --git a/website/src/pages/en/index.json b/website/src/pages/en/index.json index be1398f172c3..99b597dcf0ad 100644 --- a/website/src/pages/en/index.json +++ b/website/src/pages/en/index.json @@ -2,7 +2,7 @@ "title": "Home", "hero": { "title": "The Graph Docs", - "description": "The Graph is a blockchain data solution that powers applications, analytics, and AI on 90+ chains. The Graph's core products include the Token API for web3 apps, Subgraphs for indexing smart contracts, and Substreams for real-time and historical data streaming.", + "description": "The Graph is a blockchain data solution that powers applications, analytics, and AI on 80+ chains. The Graph's core products include the Token API for web3 apps, Subgraphs for indexing smart contracts, and Substreams for real-time and historical data streaming.", "cta1": "How The Graph works", "cta2": "Build your first subgraph" }, diff --git a/website/src/pages/en/subgraphs/guides/_meta.js b/website/src/pages/en/subgraphs/guides/_meta.js index fd5608dcceb2..1c081848ea08 100644 --- a/website/src/pages/en/subgraphs/guides/_meta.js +++ b/website/src/pages/en/subgraphs/guides/_meta.js @@ -2,7 +2,6 @@ export default { 'subgraph-composition': '', 'subgraph-debug-forking': '', near: '', - grafting: '', 'subgraph-uncrashable': '', 'transfer-to-the-graph': '', diff --git a/website/src/pages/en/token-api/_meta-titles.json b/website/src/pages/en/token-api/_meta-titles.json index 7971cf40716c..f7416a115cfb 100644 --- a/website/src/pages/en/token-api/_meta-titles.json +++ b/website/src/pages/en/token-api/_meta-titles.json @@ -6,5 +6,6 @@ "svm-dexs": "SVM DEX Endpoints", "tvm-tokens": "TVM Token Endpoints", "tvm-dexs": "TVM DEX Endpoints", - "monitoring": "Monitoring Endpoints" + "monitoring": "Monitoring Endpoints", + "guides": "Guides" } diff --git a/website/src/pages/en/token-api/_meta.js b/website/src/pages/en/token-api/_meta.js index 94368944d673..9588f70cec53 100644 --- a/website/src/pages/en/token-api/_meta.js +++ b/website/src/pages/en/token-api/_meta.js @@ -11,6 +11,6 @@ export default { 'tvm-dexs': titles['tvm-dexs'] ?? '', monitoring: titles['monitoring'] ?? '', 'endpoint-pricing': '', - guides: 'Guides', + guides: titles['guides'] ?? '', faq: '', } diff --git a/website/src/pages/es/index.json b/website/src/pages/es/index.json index 55ad2d38b392..558edfcbc555 100644 --- a/website/src/pages/es/index.json +++ b/website/src/pages/es/index.json @@ -2,7 +2,7 @@ "title": "Inicio", "hero": { "title": "Documentación de The Graph", - "description": "The Graph is a blockchain data solution that powers applications, analytics, and AI on 90+ chains. The Graph's core products include the Token API for web3 apps, Subgraphs for indexing smart contracts, and Substreams for real-time and historical data streaming.", + "description": "The Graph is a blockchain data solution that powers applications, analytics, and AI on 80+ chains. The Graph's core products include the Token API for web3 apps, Subgraphs for indexing smart contracts, and Substreams for real-time and historical data streaming.", "cta1": "Cómo funciona The Graph", "cta2": "Crea tu primer subgrafo" }, diff --git a/website/src/pages/es/subgraphs/guides/_meta.js b/website/src/pages/es/subgraphs/guides/_meta.js index fd5608dcceb2..1c081848ea08 100644 --- a/website/src/pages/es/subgraphs/guides/_meta.js +++ b/website/src/pages/es/subgraphs/guides/_meta.js @@ -2,7 +2,6 @@ export default { 'subgraph-composition': '', 'subgraph-debug-forking': '', near: '', - grafting: '', 'subgraph-uncrashable': '', 'transfer-to-the-graph': '', diff --git a/website/src/pages/es/token-api/_meta.js b/website/src/pages/es/token-api/_meta.js index a8624da52e7f..9588f70cec53 100644 --- a/website/src/pages/es/token-api/_meta.js +++ b/website/src/pages/es/token-api/_meta.js @@ -11,6 +11,6 @@ export default { 'tvm-dexs': titles['tvm-dexs'] ?? '', monitoring: titles['monitoring'] ?? '', 'endpoint-pricing': '', + guides: titles['guides'] ?? '', faq: '', - 'upgrade-to-v1': '', } diff --git a/website/src/pages/es/token-api/guides/_meta-titles.json b/website/src/pages/es/token-api/guides/_meta-titles.json new file mode 100644 index 000000000000..cd93dcc0fc0b --- /dev/null +++ b/website/src/pages/es/token-api/guides/_meta-titles.json @@ -0,0 +1,4 @@ +{ + "gpt": "Create Custom GPTS", + "upgrade-to-v1": "" +} diff --git a/website/src/pages/es/token-api/guides/_meta.js b/website/src/pages/es/token-api/guides/_meta.js new file mode 100644 index 000000000000..e5aaaadd78f2 --- /dev/null +++ b/website/src/pages/es/token-api/guides/_meta.js @@ -0,0 +1,4 @@ +export default { + gpt: '', + 'upgrade-to-v1': '', +} diff --git a/website/src/pages/es/token-api/guides/gpt.mdx b/website/src/pages/es/token-api/guides/gpt.mdx new file mode 100644 index 000000000000..564d013dea20 --- /dev/null +++ b/website/src/pages/es/token-api/guides/gpt.mdx @@ -0,0 +1,121 @@ +--- +title: How the Token API Powers Custom GPTs +sidebarTitle: Create Custom GPTs +--- + +## Overview + +The Token API is a pre-indexed blockchain data service that provides real-time access to token balances, metadata, prices, liquidity, and volume across multiple chains. Developers use its REST endpoints to build wallets, trading dashboards, DeFi analytics, and AI systems without maintaining their own indexing stack. Custom GPTs can connect directly to the Token API's OpenAPI schema. + +The Token API enables developers to build **Custom GPTs** to reason over live blockchain data inside ChatGPT that can reason over and respond with live blockchain data directly inside ChatGPT. + +## What the Token API Enables in Custom GPTs + +When a Custom GPT is wired to the Token API, it gains access to a machine-readable schema and authenticated endpoints. Developers can use this to: + +- **Query real-time onchain data**: Balances, token prices, liquidity, and transaction history. +- **Automate domain-specific tasks**: Portfolio tracking, accounting, reconciliation, and market analysis. +- **Power AI agents with verifiable blockchain context**: Use the same data sources dapps rely on. + +Because the Token API provides a machine-readable schema and authenticated requests, it serves as a structured data layer that enables GPT-5 agents to combine natural language reasoning with live onchain data from The Graph. + +## When to Use the Token API for Custom GPTs + +Use the Token API when your GPT needs repeatable, domain-specific behavior grounded in blockchain data. This is most effective when the GPT performs the same type of task frequently or enforces a workflow you define. For one-off or exploratory questions, standard ChatGPT prompts are sufficient. + +## Choosing a Use Case + +Start with a clear, narrow objective, then expand as needed. Common patterns include: + +- **Accounting GPT**: Onchain accounting, tax tagging, and portfolio reconciliation. +- **Trading GPT**: Liquidity, pricing, and volume analysis for trading strategies. +- **Protocol Tracking GPT**: Real-time monitoring of transaction activity and liquidity pools. + +A focused initial goal such as “Retrieve token balances and prices for a wallet” makes it easier to configure reliable behavior before adding complex workflows. + +## Requirements + +| Requirement | Description | +| ---------------------- | -------------------------------------------------------- | +| ChatGPT 5 | Custom GPT creation requires GPT-5 tier or Pro. | +| Token API Subscription | Sign up at [The Graph Market](https://thegraph.market./) | +| Token API Key | Available in your dashboard as the Authentication JWT. | + +## Setting Up a Custom GPT + +Below is an explanatory outline of what happens during setup. This section provides conceptual understanding. + +### Create Custom GPT + +1. Visit chat.openai.com/gpts in your browser. 2, Click Create (top right). +2. Under Configure (in the top left panel), set up your GPT's personality and scope. + +### Configure Your GPT + +You define the GPT's role, scope, and metadata so it knows what it is designed to do. This includes: + +- **Name and Description**: Helps users discover your GPT. + - For example: **Name**: Token Tracker GPT **Description**: An onchain analytics assistant that retrieves live token balances, prices, and liquidity data using The Graph's Token API. +- **Instructions**: Tells the GPT what tasks it should perform using the Token API. + - For example: You are a blockchain data assistant retrieving onchain token data from The Graph's Token API. Use endpoints to fetch balances, liquidity, and price history across EVM chains. Present results in tables with token symbols, prices, and USD values. +- **Knowledge**: Optional context files such as wallet references, accounting rules, or code snippets. +- **New Action**: At the bottom, click “Create new action” to connect your GPT to the Token API. + +### Connect the Token API + +To enable live blockchain queries inside ChatGPT, you connect the GPT to the Token API through: + +#### Authentication + +1. Set Authentication to API Key → Bearer. +2. Open [The Graph Market](https://thegraph.market./) and copy your Authentication JWT from your dashboard. +3. Paste the token into the ChatGPT prompt where the field shows [HIDDEN]. + +#### Schema + +1. Above the Schema box, click Import from URL. +2. Paste: https://token-api.thegraph.com/openapi +3. Click Import. You'll now see endpoints like: + - `getV1EvmTokens` + - `getV1EvmDexes` + - `getV1EvmBalances` +4. Click Test on one (for example `getV1EvmDexes`) to verify connection. + +##### Privacy + +1. At the bottom, under Privacy, paste: https://pinax.network/en/legal/privacy + +### Privacy + +You can attach a privacy policy URL such as: https://pinax.network/en/legal/privacy + +## Example Prompt Patterns + +These examples help illustrate how a GPT reasons over Token API data. + +### Wallet and Portfolio + +Get the total USD balance for a wallet across multiple chains, returning token name, symbol, balance, and price. + +### Trading Analysis + +Compare USDC and DAI liquidity across Uniswap and Curve. Return the top 5 pools by TVL. + +### Accounting + +List all ERC-20 transfers for this address in the last 30 days. Group by token and total incoming/outgoing volume. + +## Best Practices + +| Tip | Why It Matters | +| --------------------------------- | ---------------------------------------------------------------------- | +| Scope your GPT narrowly first | Simplifies debugging and validates schema integration. | +| Use clear role instructions | Helps the GPT choose the right endpoints and avoid assumptions. | +| Name endpoints explicitly | Improves routing accuracy when fetching balances, prices, or DEX data. | +| Combine with code | Enables custom parsing or logic for complex workflows. | +| Add Subgraph or Substream context | Provides richer analytics when combined with Token API data. | + +## FAQs & Resources + +- Builders Office Hours (October 23, 2025) +- Watch the full session: https://x.com/i/broadcasts/1mrGmBzBarNJy diff --git a/website/src/pages/es/token-api/upgrade-to-v1.mdx b/website/src/pages/es/token-api/guides/upgrade-to-v1.mdx similarity index 74% rename from website/src/pages/es/token-api/upgrade-to-v1.mdx rename to website/src/pages/es/token-api/guides/upgrade-to-v1.mdx index fbe09101eaa5..e2a7ccf973fa 100644 --- a/website/src/pages/es/token-api/upgrade-to-v1.mdx +++ b/website/src/pages/es/token-api/guides/upgrade-to-v1.mdx @@ -16,7 +16,7 @@ Used to describe endpoints supporting Solana (currently the only SVM chain suppo ## 🔑 Breaking Changes Summary -### 1. **API Versioning** +### 1. API Versioning All endpoints now use the `/v1` prefix. @@ -34,7 +34,7 @@ GET /v1/evm/balances GET /v1/evm/nft/items ``` -### 2. **Route Structure Reorganization** +### 2. Route Structure Reorganization #### 2.1 EVM Endpoints @@ -92,7 +92,7 @@ Consolidated under `/v1/svm/*` ## 📝 Parameter Changes -### 3. **Path Parameters → Query Parameters** +### 3. Path Parameters → Query Parameters All path parameters have been moved to query parameters. @@ -112,7 +112,7 @@ GET /v1/evm/holders?network=mainnet&contract=0x... GET /v1/evm/nft/items?network=mainnet&contract=0x...&token_id=5712 ``` -### 4. **Standardized Parameter Naming** +### 4. Standardized Parameter Naming All query parameters have been standardized to use snake_case naming convention. @@ -136,7 +136,7 @@ All query parameters have been standardized to use snake_case naming convention. **Important:** `matic` network has been renamed to `polygon`. -### 5. **Batched Parameters** +### 5. Batched Parameters Many parameters now support batching - accepting single values or comma-separated strings. @@ -151,17 +151,17 @@ Many parameters now support batching - accepting single values or comma-separate **Examples:** ```console -# Single value +## Single value ?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 -# Comma-separated, single parameter +## Comma-separated, single parameter ?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 -# Repeated parameter values +## Repeated parameter values ?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&contract=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 ``` -### 6. **New Parameters** +### 6. New Parameters #### `include_null_balances` @@ -175,7 +175,7 @@ Added to balance endpoints to optionally include zero/null balances. ## 🔄 Response Changes -### 7. **Pagination Changes** +### 7. Pagination Changes Pagination responses have been simplified. The API no longer computes total result counts due to performance and accuracy considerations when working with ClickHouse views and materialized tables. @@ -212,21 +212,51 @@ Pagination responses have been simplified. The API no longer computes total resu **Important:** To retrieve all results, continue incrementing the `page` parameter until the API returns an empty `data` array. This indicates you've reached the end of the results. -### 8. **Removed Parameters** +### 8. Removed Parameters The following deprecated parameters have been removed: - `orderBy` - Results are now ordered by timestamp/block by default - `orderDirection` - Always descending (newest first) +### 9. Cached Queries + +Queries are now cached on the ClickHouse side for better performance. + +You can specifically request to not use the cache by setting the `Cache-Control` header to `no-cache`. + +#### Example + +**Cache** + +```console +$ curl -s 'https://token-api.thegraph.com/v1/...' | jq .statistics +{ + "bytes_read": 221, + "rows_read": 1, + "elapsed": 0.002212065 +} +``` + +**No cache** + +```console +$ curl -s 'http://localhost:8000/v1/...' --header 'Cache-Control: no-cache' | jq .statistics +{ + "bytes_read": 14621174348, + "rows_read": 223244390, + "elapsed": 0.971064066 +} +``` + ## 📚 Example Migrations -### Old vs New: Get Token Balances +### Example 1: Get Token Balances **Before:** ```bash -GET /balances/evm/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045?network_id=mainnet&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 +GET /token/balances/evm/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045?network_id=mainnet&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 ``` **After:** @@ -235,7 +265,63 @@ GET /balances/evm/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045?network_id=mainnet& GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 ``` -### New Feature: Batched Queries +### Example 2: Get NFT Items + +**Before:** + +```bash +GET /nft/items/evm/contract/0xbd3531da5cf5857e7cfaa92426877b022e612cf8/token_id/5712?network_id=mainnet +``` + +**After:** + +```bash +GET /v1/evm/nft/items?network=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&token_id=5712 +``` + +### Example 3: Get Token Transfers with Time Filter + +**Before:** + +```bash +GET /token/transfers/evm?network_id=mainnet&from=0xd8da6bf26964af9d7eed9e03e53415d37aa96045&startTime=1735689600&endTime=1767225600 +``` + +**After:** + +```bash +GET /v1/evm/transfers?network=mainnet&from_address=0xd8da6bf26964af9d7eed9e03e53415d37aa96045&start_time=1735689600&end_time=1767225600 +``` + +### Example 4: Get NFT Transfer Activities + +**Before:** + +```bash +GET /nft/activities/evm?network_id=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&anyAddress=0xd8da6bf26964af9d7eed9e03e53415d37aa96045 +``` + +**After:** + +```bash +GET /v1/evm/nft/transfers?network=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&address=0xd8da6bf26964af9d7eed9e03e53415d37aa96045 +``` + +### Example 5: Get Pool OHLC Data + +**Before:** + +```bash +GET /token/ohlc/pools/evm/0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640?network_id=mainnet&interval=1h&startTime=1735689600 +``` + +**After:** + +```bash +GET /v1/evm/pools/ohlc?network=mainnet&pool=0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640&interval=1h&start_time=1735689600 +``` + +### Example 6: Batched Query (New Feature) Query balances for multiple contracts in a single request: @@ -243,9 +329,15 @@ Query balances for multiple contracts in a single request: GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 ``` +Query transfers from multiple addresses: + +```bash +GET /v1/evm/transfers?network=mainnet&from_address=0xabc...,0xdef...,0x123...&start_time=1735689600 +``` + ## ⚠️ Important Notes -1. **Backward Compatibility:** The old endpoints are deprecated and will be removed in the future. Migrate by **Oct 30, 2025**. +1. **Migration Notes:** The old endpoints were deprecated and removed on **October 30, 2025**. Please ensure all integrations have been migrated to the new Token API v1 endpoints. 2. **Default Sorting:** All results are now sorted by timestamp (descending) by default. Custom sorting is no longer supported. diff --git a/website/src/pages/fr/index.json b/website/src/pages/fr/index.json index a4cba5dad8de..436b0552f061 100644 --- a/website/src/pages/fr/index.json +++ b/website/src/pages/fr/index.json @@ -2,7 +2,7 @@ "title": "Accueil", "hero": { "title": "The Graph Docs", - "description": "The Graph is a blockchain data solution that powers applications, analytics, and AI on 90+ chains. The Graph's core products include the Token API for web3 apps, Subgraphs for indexing smart contracts, and Substreams for real-time and historical data streaming.", + "description": "The Graph is a blockchain data solution that powers applications, analytics, and AI on 80+ chains. The Graph's core products include the Token API for web3 apps, Subgraphs for indexing smart contracts, and Substreams for real-time and historical data streaming.", "cta1": "How The Graph works", "cta2": "Construisez votre premier subgraph" }, diff --git a/website/src/pages/fr/subgraphs/guides/_meta.js b/website/src/pages/fr/subgraphs/guides/_meta.js index fd5608dcceb2..1c081848ea08 100644 --- a/website/src/pages/fr/subgraphs/guides/_meta.js +++ b/website/src/pages/fr/subgraphs/guides/_meta.js @@ -2,7 +2,6 @@ export default { 'subgraph-composition': '', 'subgraph-debug-forking': '', near: '', - grafting: '', 'subgraph-uncrashable': '', 'transfer-to-the-graph': '', diff --git a/website/src/pages/fr/token-api/_meta.js b/website/src/pages/fr/token-api/_meta.js index a8624da52e7f..9588f70cec53 100644 --- a/website/src/pages/fr/token-api/_meta.js +++ b/website/src/pages/fr/token-api/_meta.js @@ -11,6 +11,6 @@ export default { 'tvm-dexs': titles['tvm-dexs'] ?? '', monitoring: titles['monitoring'] ?? '', 'endpoint-pricing': '', + guides: titles['guides'] ?? '', faq: '', - 'upgrade-to-v1': '', } diff --git a/website/src/pages/fr/token-api/guides/_meta-titles.json b/website/src/pages/fr/token-api/guides/_meta-titles.json new file mode 100644 index 000000000000..cd93dcc0fc0b --- /dev/null +++ b/website/src/pages/fr/token-api/guides/_meta-titles.json @@ -0,0 +1,4 @@ +{ + "gpt": "Create Custom GPTS", + "upgrade-to-v1": "" +} diff --git a/website/src/pages/fr/token-api/guides/_meta.js b/website/src/pages/fr/token-api/guides/_meta.js new file mode 100644 index 000000000000..e5aaaadd78f2 --- /dev/null +++ b/website/src/pages/fr/token-api/guides/_meta.js @@ -0,0 +1,4 @@ +export default { + gpt: '', + 'upgrade-to-v1': '', +} diff --git a/website/src/pages/fr/token-api/guides/gpt.mdx b/website/src/pages/fr/token-api/guides/gpt.mdx new file mode 100644 index 000000000000..564d013dea20 --- /dev/null +++ b/website/src/pages/fr/token-api/guides/gpt.mdx @@ -0,0 +1,121 @@ +--- +title: How the Token API Powers Custom GPTs +sidebarTitle: Create Custom GPTs +--- + +## Overview + +The Token API is a pre-indexed blockchain data service that provides real-time access to token balances, metadata, prices, liquidity, and volume across multiple chains. Developers use its REST endpoints to build wallets, trading dashboards, DeFi analytics, and AI systems without maintaining their own indexing stack. Custom GPTs can connect directly to the Token API's OpenAPI schema. + +The Token API enables developers to build **Custom GPTs** to reason over live blockchain data inside ChatGPT that can reason over and respond with live blockchain data directly inside ChatGPT. + +## What the Token API Enables in Custom GPTs + +When a Custom GPT is wired to the Token API, it gains access to a machine-readable schema and authenticated endpoints. Developers can use this to: + +- **Query real-time onchain data**: Balances, token prices, liquidity, and transaction history. +- **Automate domain-specific tasks**: Portfolio tracking, accounting, reconciliation, and market analysis. +- **Power AI agents with verifiable blockchain context**: Use the same data sources dapps rely on. + +Because the Token API provides a machine-readable schema and authenticated requests, it serves as a structured data layer that enables GPT-5 agents to combine natural language reasoning with live onchain data from The Graph. + +## When to Use the Token API for Custom GPTs + +Use the Token API when your GPT needs repeatable, domain-specific behavior grounded in blockchain data. This is most effective when the GPT performs the same type of task frequently or enforces a workflow you define. For one-off or exploratory questions, standard ChatGPT prompts are sufficient. + +## Choosing a Use Case + +Start with a clear, narrow objective, then expand as needed. Common patterns include: + +- **Accounting GPT**: Onchain accounting, tax tagging, and portfolio reconciliation. +- **Trading GPT**: Liquidity, pricing, and volume analysis for trading strategies. +- **Protocol Tracking GPT**: Real-time monitoring of transaction activity and liquidity pools. + +A focused initial goal such as “Retrieve token balances and prices for a wallet” makes it easier to configure reliable behavior before adding complex workflows. + +## Requirements + +| Requirement | Description | +| ---------------------- | -------------------------------------------------------- | +| ChatGPT 5 | Custom GPT creation requires GPT-5 tier or Pro. | +| Token API Subscription | Sign up at [The Graph Market](https://thegraph.market./) | +| Token API Key | Available in your dashboard as the Authentication JWT. | + +## Setting Up a Custom GPT + +Below is an explanatory outline of what happens during setup. This section provides conceptual understanding. + +### Create Custom GPT + +1. Visit chat.openai.com/gpts in your browser. 2, Click Create (top right). +2. Under Configure (in the top left panel), set up your GPT's personality and scope. + +### Configure Your GPT + +You define the GPT's role, scope, and metadata so it knows what it is designed to do. This includes: + +- **Name and Description**: Helps users discover your GPT. + - For example: **Name**: Token Tracker GPT **Description**: An onchain analytics assistant that retrieves live token balances, prices, and liquidity data using The Graph's Token API. +- **Instructions**: Tells the GPT what tasks it should perform using the Token API. + - For example: You are a blockchain data assistant retrieving onchain token data from The Graph's Token API. Use endpoints to fetch balances, liquidity, and price history across EVM chains. Present results in tables with token symbols, prices, and USD values. +- **Knowledge**: Optional context files such as wallet references, accounting rules, or code snippets. +- **New Action**: At the bottom, click “Create new action” to connect your GPT to the Token API. + +### Connect the Token API + +To enable live blockchain queries inside ChatGPT, you connect the GPT to the Token API through: + +#### Authentication + +1. Set Authentication to API Key → Bearer. +2. Open [The Graph Market](https://thegraph.market./) and copy your Authentication JWT from your dashboard. +3. Paste the token into the ChatGPT prompt where the field shows [HIDDEN]. + +#### Schema + +1. Above the Schema box, click Import from URL. +2. Paste: https://token-api.thegraph.com/openapi +3. Click Import. You'll now see endpoints like: + - `getV1EvmTokens` + - `getV1EvmDexes` + - `getV1EvmBalances` +4. Click Test on one (for example `getV1EvmDexes`) to verify connection. + +##### Privacy + +1. At the bottom, under Privacy, paste: https://pinax.network/en/legal/privacy + +### Privacy + +You can attach a privacy policy URL such as: https://pinax.network/en/legal/privacy + +## Example Prompt Patterns + +These examples help illustrate how a GPT reasons over Token API data. + +### Wallet and Portfolio + +Get the total USD balance for a wallet across multiple chains, returning token name, symbol, balance, and price. + +### Trading Analysis + +Compare USDC and DAI liquidity across Uniswap and Curve. Return the top 5 pools by TVL. + +### Accounting + +List all ERC-20 transfers for this address in the last 30 days. Group by token and total incoming/outgoing volume. + +## Best Practices + +| Tip | Why It Matters | +| --------------------------------- | ---------------------------------------------------------------------- | +| Scope your GPT narrowly first | Simplifies debugging and validates schema integration. | +| Use clear role instructions | Helps the GPT choose the right endpoints and avoid assumptions. | +| Name endpoints explicitly | Improves routing accuracy when fetching balances, prices, or DEX data. | +| Combine with code | Enables custom parsing or logic for complex workflows. | +| Add Subgraph or Substream context | Provides richer analytics when combined with Token API data. | + +## FAQs & Resources + +- Builders Office Hours (October 23, 2025) +- Watch the full session: https://x.com/i/broadcasts/1mrGmBzBarNJy diff --git a/website/src/pages/fr/token-api/guides/upgrade-to-v1.mdx b/website/src/pages/fr/token-api/guides/upgrade-to-v1.mdx new file mode 100644 index 000000000000..e2a7ccf973fa --- /dev/null +++ b/website/src/pages/fr/token-api/guides/upgrade-to-v1.mdx @@ -0,0 +1,346 @@ +--- +title: Upgrade to v1 +--- + +This guide covers the migration from the legacy API structure to the new v1 API. The refactoring introduces versioned endpoints, standardized query parameters, improved batching support, and consistent naming conventions. + +**Note** + +- `EVM` = Ethereum Virtual Machine + +Used to describe endpoints supporting EVM-based chains (e.g. `base`, `bsc`, `mainnet`, ...). + +- `SVM` = Solana Virtual Machine + +Used to describe endpoints supporting Solana (currently the only SVM chain supported). + +## 🔑 Breaking Changes Summary + +### 1. API Versioning + +All endpoints now use the `/v1` prefix. + +**Before:** + +``` +GET /balances/evm +GET /nft/items/contract/:contract/token_id/:token_id +``` + +**After:** + +``` +GET /v1/evm/balances +GET /v1/evm/nft/items +``` + +### 2. Route Structure Reorganization + +#### 2.1 EVM Endpoints + +Consolidated under `/v1/evm/*` + +| Old Endpoint | New Endpoint | +| ------------------------------------------------------ | ----------------------------- | +| `/balances/evm` | `/v1/evm/balances` | +| `/historical/balances/evm` | `/v1/evm/balances/historical` | +| `/holders/evm/:contract` | `/v1/evm/holders` | +| `/tokens/evm/:contract` | `/v1/evm/tokens` | +| `/transfers/evm` | `/v1/evm/transfers` | +| `/pools/evm` | `/v1/evm/pools` | +| `/swaps/evm` | `/v1/evm/swaps` | +| `/dexes/evm` | `/v1/evm/dexes` | +| `/ohlc/prices/evm/:contract` | _(removed)_ | +| `/ohlc/pools/evm/:pool` | `/v1/evm/pools/ohlc` | +| `/nft/ownerships/evm/:address` | `/v1/evm/nft/ownerships` | +| `/nft/collections/evm/:contract` | `/v1/evm/nft/collections` | +| `/nft/items/evm/contract/:contract/token_id/:token_id` | `/v1/evm/nft/items` | +| `/nft/holders/evm/:contract` | `/v1/evm/nft/holders` | +| `/nft/activities/evm` | `/v1/evm/nft/transfers` | +| `/nft/sales/evm` | `/v1/evm/nft/sales` | + +**Important:** The NFT endpoint `/nft/activities` has been renamed to `/v1/evm/nft/transfers` to better reflect its purpose. + +**Important:** The EVM Token OHLCV Data endpoint `/ohlc/prices/evm/{contract}` has been removed. You can use `/v1/evm/pools` to find stablecoin pairs for your contract and `/v1/evm/pools/ohlc` for OHLCV data for that pair. + +--- + +#### 2.2 New EVM native balances endpoint + +Native balances for EVM chains can be found under `/v1/evm/balances/native`. They will not show up in the `/v1/evm/balances` endpoint. + +Other endpoints can still use native token under the `0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee` contract. + +--- + +#### 2.3 SVM Endpoints + +Consolidated under `/v1/svm/*` + +| Old Endpoint | New Endpoint | +| ------------------------ | ------------------------- | +| `/balances/svm` | `/v1/svm/balances` | +| `/balances/native/svm` | `/v1/svm/balances/native` | +| `/holders/svm/:contract` | `/v1/svm/holders` | +| `/tokens/svm/:mint` | `/v1/svm/tokens` | +| `/transfers/svm` | `/v1/svm/transfers` | +| `/pools/svm` | `/v1/svm/pools` | +| `/swaps/svm` | `/v1/svm/swaps` | +| `/dexes/svm` | `/v1/svm/dexes` | +| `/owner/svm/:account` | `/v1/svm/owner` | +| `/ohlc/pools/svm/:pool` | `/v1/svm/pools/ohlc` | + +## 📝 Parameter Changes + +### 3. Path Parameters → Query Parameters + +All path parameters have been moved to query parameters. + +**Before:** + +```bash +GET /balances/evm/:address +GET /holders/evm/:contract +GET /nft/items/evm/contract/:contract/token_id/:token_id +``` + +**After:** + +```bash +GET /v1/evm/balances?network=mainnet&address=0x... +GET /v1/evm/holders?network=mainnet&contract=0x... +GET /v1/evm/nft/items?network=mainnet&contract=0x...&token_id=5712 +``` + +### 4. Standardized Parameter Naming + +All query parameters have been standardized to use snake_case naming convention. + +| Old Parameter | New Parameter | Notes | +| --- | --- | --- | +| `network_id` | `network` | Renamed, `matic` has also been renamed to `polygon` | +| `anyAddress` | `address` | Matches either `from` or `to` address | +| `from`, `fromAddress`, `offererAddress` | `from_address`, `offerer` | - | +| `to`, `toAddress`, `recipientAddress` | `to_address`, `recipient` | - | +| `startTime` | `start_time` | Default: `1735689600` (`2025-01-01`) | +| `endTime` | `end_time` | Default: `9999999999` | +| - | `start_block` | New parameter, default: `0` | +| - | `end_block` | New parameter, default: `9999999999` | +| - | `include_null_balances` | New parameter, default: `false` | +| `tx_hash` | `transaction_id` | - | +| `token` | `input_token`, `output_token` | More explicit for pool queries | +| `pool` | `amm_pool` | - | +| `orderBy`, `orderDirection` | _(removed)_ | Always sorted by most recent timestamp first | + +**Important:** The `network_id` parameter has been renamed to `network`. + +**Important:** `matic` network has been renamed to `polygon`. + +### 5. Batched Parameters + +Many parameters now support batching - accepting single values or comma-separated strings. + +**Supported Batched Parameters:** + +- `address`, `from_address`, `to_address` +- `contract`, `token_id` +- `factory`, `pool` +- `owner`, `token_account`, `mint` +- `transaction_id`, `signature` + +**Examples:** + +```console +## Single value +?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 + +## Comma-separated, single parameter +?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 + +## Repeated parameter values +?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&contract=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 +``` + +### 6. New Parameters + +#### `include_null_balances` + +Added to balance endpoints to optionally include zero/null balances. + +```bash +?include_null_balances=true +``` + +**Default:** `false` + +## 🔄 Response Changes + +### 7. Pagination Changes + +Pagination responses have been simplified. The API no longer computes total result counts due to performance and accuracy considerations when working with ClickHouse views and materialized tables. + +**Before:** + +```json +{ + "pagination": { + "previous_page": 1, + "current_page": 2, + "next_page": 3, + "total_pages": 10 + }, + "total_results": 1234 +} +``` + +**After:** + +```json +{ + "pagination": { + "previous_page": 1, + "current_page": 2 + } +} +``` + +**Removed fields:** + +- `next_page` +- `total_pages` +- `total_results` + +**Important:** To retrieve all results, continue incrementing the `page` parameter until the API returns an empty `data` array. This indicates you've reached the end of the results. + +### 8. Removed Parameters + +The following deprecated parameters have been removed: + +- `orderBy` - Results are now ordered by timestamp/block by default +- `orderDirection` - Always descending (newest first) + +### 9. Cached Queries + +Queries are now cached on the ClickHouse side for better performance. + +You can specifically request to not use the cache by setting the `Cache-Control` header to `no-cache`. + +#### Example + +**Cache** + +```console +$ curl -s 'https://token-api.thegraph.com/v1/...' | jq .statistics +{ + "bytes_read": 221, + "rows_read": 1, + "elapsed": 0.002212065 +} +``` + +**No cache** + +```console +$ curl -s 'http://localhost:8000/v1/...' --header 'Cache-Control: no-cache' | jq .statistics +{ + "bytes_read": 14621174348, + "rows_read": 223244390, + "elapsed": 0.971064066 +} +``` + +## 📚 Example Migrations + +### Example 1: Get Token Balances + +**Before:** + +```bash +GET /token/balances/evm/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045?network_id=mainnet&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 +``` + +**After:** + +```bash +GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 +``` + +### Example 2: Get NFT Items + +**Before:** + +```bash +GET /nft/items/evm/contract/0xbd3531da5cf5857e7cfaa92426877b022e612cf8/token_id/5712?network_id=mainnet +``` + +**After:** + +```bash +GET /v1/evm/nft/items?network=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&token_id=5712 +``` + +### Example 3: Get Token Transfers with Time Filter + +**Before:** + +```bash +GET /token/transfers/evm?network_id=mainnet&from=0xd8da6bf26964af9d7eed9e03e53415d37aa96045&startTime=1735689600&endTime=1767225600 +``` + +**After:** + +```bash +GET /v1/evm/transfers?network=mainnet&from_address=0xd8da6bf26964af9d7eed9e03e53415d37aa96045&start_time=1735689600&end_time=1767225600 +``` + +### Example 4: Get NFT Transfer Activities + +**Before:** + +```bash +GET /nft/activities/evm?network_id=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&anyAddress=0xd8da6bf26964af9d7eed9e03e53415d37aa96045 +``` + +**After:** + +```bash +GET /v1/evm/nft/transfers?network=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&address=0xd8da6bf26964af9d7eed9e03e53415d37aa96045 +``` + +### Example 5: Get Pool OHLC Data + +**Before:** + +```bash +GET /token/ohlc/pools/evm/0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640?network_id=mainnet&interval=1h&startTime=1735689600 +``` + +**After:** + +```bash +GET /v1/evm/pools/ohlc?network=mainnet&pool=0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640&interval=1h&start_time=1735689600 +``` + +### Example 6: Batched Query (New Feature) + +Query balances for multiple contracts in a single request: + +```bash +GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 +``` + +Query transfers from multiple addresses: + +```bash +GET /v1/evm/transfers?network=mainnet&from_address=0xabc...,0xdef...,0x123...&start_time=1735689600 +``` + +## ⚠️ Important Notes + +1. **Migration Notes:** The old endpoints were deprecated and removed on **October 30, 2025**. Please ensure all integrations have been migrated to the new Token API v1 endpoints. + +2. **Default Sorting:** All results are now sorted by timestamp (descending) by default. Custom sorting is no longer supported. + +3. **Pagination:** Continue paging through results by incrementing the `page` parameter until you receive an empty `data` array. The API no longer provides total counts due to performance optimizations with ClickHouse. + +4. **Time Defaults:** If you previously relied on fetching all historical data without time filters, note that `start_time` now defaults to `2025-01-01`. Adjust accordingly if you need earlier data. diff --git a/website/src/pages/fr/token-api/upgrade-to-v1.mdx b/website/src/pages/fr/token-api/upgrade-to-v1.mdx deleted file mode 100644 index fbe09101eaa5..000000000000 --- a/website/src/pages/fr/token-api/upgrade-to-v1.mdx +++ /dev/null @@ -1,254 +0,0 @@ ---- -title: Upgrade to v1 ---- - -This guide covers the migration from the legacy API structure to the new v1 API. The refactoring introduces versioned endpoints, standardized query parameters, improved batching support, and consistent naming conventions. - -**Note** - -- `EVM` = Ethereum Virtual Machine - -Used to describe endpoints supporting EVM-based chains (e.g. `base`, `bsc`, `mainnet`, ...). - -- `SVM` = Solana Virtual Machine - -Used to describe endpoints supporting Solana (currently the only SVM chain supported). - -## 🔑 Breaking Changes Summary - -### 1. **API Versioning** - -All endpoints now use the `/v1` prefix. - -**Before:** - -``` -GET /balances/evm -GET /nft/items/contract/:contract/token_id/:token_id -``` - -**After:** - -``` -GET /v1/evm/balances -GET /v1/evm/nft/items -``` - -### 2. **Route Structure Reorganization** - -#### 2.1 EVM Endpoints - -Consolidated under `/v1/evm/*` - -| Old Endpoint | New Endpoint | -| ------------------------------------------------------ | ----------------------------- | -| `/balances/evm` | `/v1/evm/balances` | -| `/historical/balances/evm` | `/v1/evm/balances/historical` | -| `/holders/evm/:contract` | `/v1/evm/holders` | -| `/tokens/evm/:contract` | `/v1/evm/tokens` | -| `/transfers/evm` | `/v1/evm/transfers` | -| `/pools/evm` | `/v1/evm/pools` | -| `/swaps/evm` | `/v1/evm/swaps` | -| `/dexes/evm` | `/v1/evm/dexes` | -| `/ohlc/prices/evm/:contract` | _(removed)_ | -| `/ohlc/pools/evm/:pool` | `/v1/evm/pools/ohlc` | -| `/nft/ownerships/evm/:address` | `/v1/evm/nft/ownerships` | -| `/nft/collections/evm/:contract` | `/v1/evm/nft/collections` | -| `/nft/items/evm/contract/:contract/token_id/:token_id` | `/v1/evm/nft/items` | -| `/nft/holders/evm/:contract` | `/v1/evm/nft/holders` | -| `/nft/activities/evm` | `/v1/evm/nft/transfers` | -| `/nft/sales/evm` | `/v1/evm/nft/sales` | - -**Important:** The NFT endpoint `/nft/activities` has been renamed to `/v1/evm/nft/transfers` to better reflect its purpose. - -**Important:** The EVM Token OHLCV Data endpoint `/ohlc/prices/evm/{contract}` has been removed. You can use `/v1/evm/pools` to find stablecoin pairs for your contract and `/v1/evm/pools/ohlc` for OHLCV data for that pair. - ---- - -#### 2.2 New EVM native balances endpoint - -Native balances for EVM chains can be found under `/v1/evm/balances/native`. They will not show up in the `/v1/evm/balances` endpoint. - -Other endpoints can still use native token under the `0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee` contract. - ---- - -#### 2.3 SVM Endpoints - -Consolidated under `/v1/svm/*` - -| Old Endpoint | New Endpoint | -| ------------------------ | ------------------------- | -| `/balances/svm` | `/v1/svm/balances` | -| `/balances/native/svm` | `/v1/svm/balances/native` | -| `/holders/svm/:contract` | `/v1/svm/holders` | -| `/tokens/svm/:mint` | `/v1/svm/tokens` | -| `/transfers/svm` | `/v1/svm/transfers` | -| `/pools/svm` | `/v1/svm/pools` | -| `/swaps/svm` | `/v1/svm/swaps` | -| `/dexes/svm` | `/v1/svm/dexes` | -| `/owner/svm/:account` | `/v1/svm/owner` | -| `/ohlc/pools/svm/:pool` | `/v1/svm/pools/ohlc` | - -## 📝 Parameter Changes - -### 3. **Path Parameters → Query Parameters** - -All path parameters have been moved to query parameters. - -**Before:** - -```bash -GET /balances/evm/:address -GET /holders/evm/:contract -GET /nft/items/evm/contract/:contract/token_id/:token_id -``` - -**After:** - -```bash -GET /v1/evm/balances?network=mainnet&address=0x... -GET /v1/evm/holders?network=mainnet&contract=0x... -GET /v1/evm/nft/items?network=mainnet&contract=0x...&token_id=5712 -``` - -### 4. **Standardized Parameter Naming** - -All query parameters have been standardized to use snake_case naming convention. - -| Old Parameter | New Parameter | Notes | -| --- | --- | --- | -| `network_id` | `network` | Renamed, `matic` has also been renamed to `polygon` | -| `anyAddress` | `address` | Matches either `from` or `to` address | -| `from`, `fromAddress`, `offererAddress` | `from_address`, `offerer` | - | -| `to`, `toAddress`, `recipientAddress` | `to_address`, `recipient` | - | -| `startTime` | `start_time` | Default: `1735689600` (`2025-01-01`) | -| `endTime` | `end_time` | Default: `9999999999` | -| - | `start_block` | New parameter, default: `0` | -| - | `end_block` | New parameter, default: `9999999999` | -| - | `include_null_balances` | New parameter, default: `false` | -| `tx_hash` | `transaction_id` | - | -| `token` | `input_token`, `output_token` | More explicit for pool queries | -| `pool` | `amm_pool` | - | -| `orderBy`, `orderDirection` | _(removed)_ | Always sorted by most recent timestamp first | - -**Important:** The `network_id` parameter has been renamed to `network`. - -**Important:** `matic` network has been renamed to `polygon`. - -### 5. **Batched Parameters** - -Many parameters now support batching - accepting single values or comma-separated strings. - -**Supported Batched Parameters:** - -- `address`, `from_address`, `to_address` -- `contract`, `token_id` -- `factory`, `pool` -- `owner`, `token_account`, `mint` -- `transaction_id`, `signature` - -**Examples:** - -```console -# Single value -?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 - -# Comma-separated, single parameter -?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 - -# Repeated parameter values -?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&contract=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 -``` - -### 6. **New Parameters** - -#### `include_null_balances` - -Added to balance endpoints to optionally include zero/null balances. - -```bash -?include_null_balances=true -``` - -**Default:** `false` - -## 🔄 Response Changes - -### 7. **Pagination Changes** - -Pagination responses have been simplified. The API no longer computes total result counts due to performance and accuracy considerations when working with ClickHouse views and materialized tables. - -**Before:** - -```json -{ - "pagination": { - "previous_page": 1, - "current_page": 2, - "next_page": 3, - "total_pages": 10 - }, - "total_results": 1234 -} -``` - -**After:** - -```json -{ - "pagination": { - "previous_page": 1, - "current_page": 2 - } -} -``` - -**Removed fields:** - -- `next_page` -- `total_pages` -- `total_results` - -**Important:** To retrieve all results, continue incrementing the `page` parameter until the API returns an empty `data` array. This indicates you've reached the end of the results. - -### 8. **Removed Parameters** - -The following deprecated parameters have been removed: - -- `orderBy` - Results are now ordered by timestamp/block by default -- `orderDirection` - Always descending (newest first) - -## 📚 Example Migrations - -### Old vs New: Get Token Balances - -**Before:** - -```bash -GET /balances/evm/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045?network_id=mainnet&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 -``` - -**After:** - -```bash -GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 -``` - -### New Feature: Batched Queries - -Query balances for multiple contracts in a single request: - -```bash -GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 -``` - -## ⚠️ Important Notes - -1. **Backward Compatibility:** The old endpoints are deprecated and will be removed in the future. Migrate by **Oct 30, 2025**. - -2. **Default Sorting:** All results are now sorted by timestamp (descending) by default. Custom sorting is no longer supported. - -3. **Pagination:** Continue paging through results by incrementing the `page` parameter until you receive an empty `data` array. The API no longer provides total counts due to performance optimizations with ClickHouse. - -4. **Time Defaults:** If you previously relied on fetching all historical data without time filters, note that `start_time` now defaults to `2025-01-01`. Adjust accordingly if you need earlier data. diff --git a/website/src/pages/hi/index.json b/website/src/pages/hi/index.json index 192262297c87..977876223319 100644 --- a/website/src/pages/hi/index.json +++ b/website/src/pages/hi/index.json @@ -2,7 +2,7 @@ "title": "Home", "hero": { "title": "The Graph डॉक्स", - "description": "The Graph is a blockchain data solution that powers applications, analytics, and AI on 90+ chains. The Graph's core products include the Token API for web3 apps, Subgraphs for indexing smart contracts, and Substreams for real-time and historical data streaming.", + "description": "The Graph is a blockchain data solution that powers applications, analytics, and AI on 80+ chains. The Graph's core products include the Token API for web3 apps, Subgraphs for indexing smart contracts, and Substreams for real-time and historical data streaming.", "cta1": "The Graph कैसे काम करता है", "cta2": "अपना पहला Subgraph बनाएं" }, diff --git a/website/src/pages/hi/subgraphs/guides/_meta.js b/website/src/pages/hi/subgraphs/guides/_meta.js index fd5608dcceb2..1c081848ea08 100644 --- a/website/src/pages/hi/subgraphs/guides/_meta.js +++ b/website/src/pages/hi/subgraphs/guides/_meta.js @@ -2,7 +2,6 @@ export default { 'subgraph-composition': '', 'subgraph-debug-forking': '', near: '', - grafting: '', 'subgraph-uncrashable': '', 'transfer-to-the-graph': '', diff --git a/website/src/pages/hi/token-api/_meta.js b/website/src/pages/hi/token-api/_meta.js index a8624da52e7f..9588f70cec53 100644 --- a/website/src/pages/hi/token-api/_meta.js +++ b/website/src/pages/hi/token-api/_meta.js @@ -11,6 +11,6 @@ export default { 'tvm-dexs': titles['tvm-dexs'] ?? '', monitoring: titles['monitoring'] ?? '', 'endpoint-pricing': '', + guides: titles['guides'] ?? '', faq: '', - 'upgrade-to-v1': '', } diff --git a/website/src/pages/hi/token-api/guides/_meta-titles.json b/website/src/pages/hi/token-api/guides/_meta-titles.json new file mode 100644 index 000000000000..cd93dcc0fc0b --- /dev/null +++ b/website/src/pages/hi/token-api/guides/_meta-titles.json @@ -0,0 +1,4 @@ +{ + "gpt": "Create Custom GPTS", + "upgrade-to-v1": "" +} diff --git a/website/src/pages/hi/token-api/guides/_meta.js b/website/src/pages/hi/token-api/guides/_meta.js new file mode 100644 index 000000000000..e5aaaadd78f2 --- /dev/null +++ b/website/src/pages/hi/token-api/guides/_meta.js @@ -0,0 +1,4 @@ +export default { + gpt: '', + 'upgrade-to-v1': '', +} diff --git a/website/src/pages/hi/token-api/guides/gpt.mdx b/website/src/pages/hi/token-api/guides/gpt.mdx new file mode 100644 index 000000000000..564d013dea20 --- /dev/null +++ b/website/src/pages/hi/token-api/guides/gpt.mdx @@ -0,0 +1,121 @@ +--- +title: How the Token API Powers Custom GPTs +sidebarTitle: Create Custom GPTs +--- + +## Overview + +The Token API is a pre-indexed blockchain data service that provides real-time access to token balances, metadata, prices, liquidity, and volume across multiple chains. Developers use its REST endpoints to build wallets, trading dashboards, DeFi analytics, and AI systems without maintaining their own indexing stack. Custom GPTs can connect directly to the Token API's OpenAPI schema. + +The Token API enables developers to build **Custom GPTs** to reason over live blockchain data inside ChatGPT that can reason over and respond with live blockchain data directly inside ChatGPT. + +## What the Token API Enables in Custom GPTs + +When a Custom GPT is wired to the Token API, it gains access to a machine-readable schema and authenticated endpoints. Developers can use this to: + +- **Query real-time onchain data**: Balances, token prices, liquidity, and transaction history. +- **Automate domain-specific tasks**: Portfolio tracking, accounting, reconciliation, and market analysis. +- **Power AI agents with verifiable blockchain context**: Use the same data sources dapps rely on. + +Because the Token API provides a machine-readable schema and authenticated requests, it serves as a structured data layer that enables GPT-5 agents to combine natural language reasoning with live onchain data from The Graph. + +## When to Use the Token API for Custom GPTs + +Use the Token API when your GPT needs repeatable, domain-specific behavior grounded in blockchain data. This is most effective when the GPT performs the same type of task frequently or enforces a workflow you define. For one-off or exploratory questions, standard ChatGPT prompts are sufficient. + +## Choosing a Use Case + +Start with a clear, narrow objective, then expand as needed. Common patterns include: + +- **Accounting GPT**: Onchain accounting, tax tagging, and portfolio reconciliation. +- **Trading GPT**: Liquidity, pricing, and volume analysis for trading strategies. +- **Protocol Tracking GPT**: Real-time monitoring of transaction activity and liquidity pools. + +A focused initial goal such as “Retrieve token balances and prices for a wallet” makes it easier to configure reliable behavior before adding complex workflows. + +## Requirements + +| Requirement | Description | +| ---------------------- | -------------------------------------------------------- | +| ChatGPT 5 | Custom GPT creation requires GPT-5 tier or Pro. | +| Token API Subscription | Sign up at [The Graph Market](https://thegraph.market./) | +| Token API Key | Available in your dashboard as the Authentication JWT. | + +## Setting Up a Custom GPT + +Below is an explanatory outline of what happens during setup. This section provides conceptual understanding. + +### Create Custom GPT + +1. Visit chat.openai.com/gpts in your browser. 2, Click Create (top right). +2. Under Configure (in the top left panel), set up your GPT's personality and scope. + +### Configure Your GPT + +You define the GPT's role, scope, and metadata so it knows what it is designed to do. This includes: + +- **Name and Description**: Helps users discover your GPT. + - For example: **Name**: Token Tracker GPT **Description**: An onchain analytics assistant that retrieves live token balances, prices, and liquidity data using The Graph's Token API. +- **Instructions**: Tells the GPT what tasks it should perform using the Token API. + - For example: You are a blockchain data assistant retrieving onchain token data from The Graph's Token API. Use endpoints to fetch balances, liquidity, and price history across EVM chains. Present results in tables with token symbols, prices, and USD values. +- **Knowledge**: Optional context files such as wallet references, accounting rules, or code snippets. +- **New Action**: At the bottom, click “Create new action” to connect your GPT to the Token API. + +### Connect the Token API + +To enable live blockchain queries inside ChatGPT, you connect the GPT to the Token API through: + +#### Authentication + +1. Set Authentication to API Key → Bearer. +2. Open [The Graph Market](https://thegraph.market./) and copy your Authentication JWT from your dashboard. +3. Paste the token into the ChatGPT prompt where the field shows [HIDDEN]. + +#### Schema + +1. Above the Schema box, click Import from URL. +2. Paste: https://token-api.thegraph.com/openapi +3. Click Import. You'll now see endpoints like: + - `getV1EvmTokens` + - `getV1EvmDexes` + - `getV1EvmBalances` +4. Click Test on one (for example `getV1EvmDexes`) to verify connection. + +##### Privacy + +1. At the bottom, under Privacy, paste: https://pinax.network/en/legal/privacy + +### Privacy + +You can attach a privacy policy URL such as: https://pinax.network/en/legal/privacy + +## Example Prompt Patterns + +These examples help illustrate how a GPT reasons over Token API data. + +### Wallet and Portfolio + +Get the total USD balance for a wallet across multiple chains, returning token name, symbol, balance, and price. + +### Trading Analysis + +Compare USDC and DAI liquidity across Uniswap and Curve. Return the top 5 pools by TVL. + +### Accounting + +List all ERC-20 transfers for this address in the last 30 days. Group by token and total incoming/outgoing volume. + +## Best Practices + +| Tip | Why It Matters | +| --------------------------------- | ---------------------------------------------------------------------- | +| Scope your GPT narrowly first | Simplifies debugging and validates schema integration. | +| Use clear role instructions | Helps the GPT choose the right endpoints and avoid assumptions. | +| Name endpoints explicitly | Improves routing accuracy when fetching balances, prices, or DEX data. | +| Combine with code | Enables custom parsing or logic for complex workflows. | +| Add Subgraph or Substream context | Provides richer analytics when combined with Token API data. | + +## FAQs & Resources + +- Builders Office Hours (October 23, 2025) +- Watch the full session: https://x.com/i/broadcasts/1mrGmBzBarNJy diff --git a/website/src/pages/hi/token-api/guides/upgrade-to-v1.mdx b/website/src/pages/hi/token-api/guides/upgrade-to-v1.mdx new file mode 100644 index 000000000000..e2a7ccf973fa --- /dev/null +++ b/website/src/pages/hi/token-api/guides/upgrade-to-v1.mdx @@ -0,0 +1,346 @@ +--- +title: Upgrade to v1 +--- + +This guide covers the migration from the legacy API structure to the new v1 API. The refactoring introduces versioned endpoints, standardized query parameters, improved batching support, and consistent naming conventions. + +**Note** + +- `EVM` = Ethereum Virtual Machine + +Used to describe endpoints supporting EVM-based chains (e.g. `base`, `bsc`, `mainnet`, ...). + +- `SVM` = Solana Virtual Machine + +Used to describe endpoints supporting Solana (currently the only SVM chain supported). + +## 🔑 Breaking Changes Summary + +### 1. API Versioning + +All endpoints now use the `/v1` prefix. + +**Before:** + +``` +GET /balances/evm +GET /nft/items/contract/:contract/token_id/:token_id +``` + +**After:** + +``` +GET /v1/evm/balances +GET /v1/evm/nft/items +``` + +### 2. Route Structure Reorganization + +#### 2.1 EVM Endpoints + +Consolidated under `/v1/evm/*` + +| Old Endpoint | New Endpoint | +| ------------------------------------------------------ | ----------------------------- | +| `/balances/evm` | `/v1/evm/balances` | +| `/historical/balances/evm` | `/v1/evm/balances/historical` | +| `/holders/evm/:contract` | `/v1/evm/holders` | +| `/tokens/evm/:contract` | `/v1/evm/tokens` | +| `/transfers/evm` | `/v1/evm/transfers` | +| `/pools/evm` | `/v1/evm/pools` | +| `/swaps/evm` | `/v1/evm/swaps` | +| `/dexes/evm` | `/v1/evm/dexes` | +| `/ohlc/prices/evm/:contract` | _(removed)_ | +| `/ohlc/pools/evm/:pool` | `/v1/evm/pools/ohlc` | +| `/nft/ownerships/evm/:address` | `/v1/evm/nft/ownerships` | +| `/nft/collections/evm/:contract` | `/v1/evm/nft/collections` | +| `/nft/items/evm/contract/:contract/token_id/:token_id` | `/v1/evm/nft/items` | +| `/nft/holders/evm/:contract` | `/v1/evm/nft/holders` | +| `/nft/activities/evm` | `/v1/evm/nft/transfers` | +| `/nft/sales/evm` | `/v1/evm/nft/sales` | + +**Important:** The NFT endpoint `/nft/activities` has been renamed to `/v1/evm/nft/transfers` to better reflect its purpose. + +**Important:** The EVM Token OHLCV Data endpoint `/ohlc/prices/evm/{contract}` has been removed. You can use `/v1/evm/pools` to find stablecoin pairs for your contract and `/v1/evm/pools/ohlc` for OHLCV data for that pair. + +--- + +#### 2.2 New EVM native balances endpoint + +Native balances for EVM chains can be found under `/v1/evm/balances/native`. They will not show up in the `/v1/evm/balances` endpoint. + +Other endpoints can still use native token under the `0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee` contract. + +--- + +#### 2.3 SVM Endpoints + +Consolidated under `/v1/svm/*` + +| Old Endpoint | New Endpoint | +| ------------------------ | ------------------------- | +| `/balances/svm` | `/v1/svm/balances` | +| `/balances/native/svm` | `/v1/svm/balances/native` | +| `/holders/svm/:contract` | `/v1/svm/holders` | +| `/tokens/svm/:mint` | `/v1/svm/tokens` | +| `/transfers/svm` | `/v1/svm/transfers` | +| `/pools/svm` | `/v1/svm/pools` | +| `/swaps/svm` | `/v1/svm/swaps` | +| `/dexes/svm` | `/v1/svm/dexes` | +| `/owner/svm/:account` | `/v1/svm/owner` | +| `/ohlc/pools/svm/:pool` | `/v1/svm/pools/ohlc` | + +## 📝 Parameter Changes + +### 3. Path Parameters → Query Parameters + +All path parameters have been moved to query parameters. + +**Before:** + +```bash +GET /balances/evm/:address +GET /holders/evm/:contract +GET /nft/items/evm/contract/:contract/token_id/:token_id +``` + +**After:** + +```bash +GET /v1/evm/balances?network=mainnet&address=0x... +GET /v1/evm/holders?network=mainnet&contract=0x... +GET /v1/evm/nft/items?network=mainnet&contract=0x...&token_id=5712 +``` + +### 4. Standardized Parameter Naming + +All query parameters have been standardized to use snake_case naming convention. + +| Old Parameter | New Parameter | Notes | +| --- | --- | --- | +| `network_id` | `network` | Renamed, `matic` has also been renamed to `polygon` | +| `anyAddress` | `address` | Matches either `from` or `to` address | +| `from`, `fromAddress`, `offererAddress` | `from_address`, `offerer` | - | +| `to`, `toAddress`, `recipientAddress` | `to_address`, `recipient` | - | +| `startTime` | `start_time` | Default: `1735689600` (`2025-01-01`) | +| `endTime` | `end_time` | Default: `9999999999` | +| - | `start_block` | New parameter, default: `0` | +| - | `end_block` | New parameter, default: `9999999999` | +| - | `include_null_balances` | New parameter, default: `false` | +| `tx_hash` | `transaction_id` | - | +| `token` | `input_token`, `output_token` | More explicit for pool queries | +| `pool` | `amm_pool` | - | +| `orderBy`, `orderDirection` | _(removed)_ | Always sorted by most recent timestamp first | + +**Important:** The `network_id` parameter has been renamed to `network`. + +**Important:** `matic` network has been renamed to `polygon`. + +### 5. Batched Parameters + +Many parameters now support batching - accepting single values or comma-separated strings. + +**Supported Batched Parameters:** + +- `address`, `from_address`, `to_address` +- `contract`, `token_id` +- `factory`, `pool` +- `owner`, `token_account`, `mint` +- `transaction_id`, `signature` + +**Examples:** + +```console +## Single value +?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 + +## Comma-separated, single parameter +?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 + +## Repeated parameter values +?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&contract=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 +``` + +### 6. New Parameters + +#### `include_null_balances` + +Added to balance endpoints to optionally include zero/null balances. + +```bash +?include_null_balances=true +``` + +**Default:** `false` + +## 🔄 Response Changes + +### 7. Pagination Changes + +Pagination responses have been simplified. The API no longer computes total result counts due to performance and accuracy considerations when working with ClickHouse views and materialized tables. + +**Before:** + +```json +{ + "pagination": { + "previous_page": 1, + "current_page": 2, + "next_page": 3, + "total_pages": 10 + }, + "total_results": 1234 +} +``` + +**After:** + +```json +{ + "pagination": { + "previous_page": 1, + "current_page": 2 + } +} +``` + +**Removed fields:** + +- `next_page` +- `total_pages` +- `total_results` + +**Important:** To retrieve all results, continue incrementing the `page` parameter until the API returns an empty `data` array. This indicates you've reached the end of the results. + +### 8. Removed Parameters + +The following deprecated parameters have been removed: + +- `orderBy` - Results are now ordered by timestamp/block by default +- `orderDirection` - Always descending (newest first) + +### 9. Cached Queries + +Queries are now cached on the ClickHouse side for better performance. + +You can specifically request to not use the cache by setting the `Cache-Control` header to `no-cache`. + +#### Example + +**Cache** + +```console +$ curl -s 'https://token-api.thegraph.com/v1/...' | jq .statistics +{ + "bytes_read": 221, + "rows_read": 1, + "elapsed": 0.002212065 +} +``` + +**No cache** + +```console +$ curl -s 'http://localhost:8000/v1/...' --header 'Cache-Control: no-cache' | jq .statistics +{ + "bytes_read": 14621174348, + "rows_read": 223244390, + "elapsed": 0.971064066 +} +``` + +## 📚 Example Migrations + +### Example 1: Get Token Balances + +**Before:** + +```bash +GET /token/balances/evm/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045?network_id=mainnet&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 +``` + +**After:** + +```bash +GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 +``` + +### Example 2: Get NFT Items + +**Before:** + +```bash +GET /nft/items/evm/contract/0xbd3531da5cf5857e7cfaa92426877b022e612cf8/token_id/5712?network_id=mainnet +``` + +**After:** + +```bash +GET /v1/evm/nft/items?network=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&token_id=5712 +``` + +### Example 3: Get Token Transfers with Time Filter + +**Before:** + +```bash +GET /token/transfers/evm?network_id=mainnet&from=0xd8da6bf26964af9d7eed9e03e53415d37aa96045&startTime=1735689600&endTime=1767225600 +``` + +**After:** + +```bash +GET /v1/evm/transfers?network=mainnet&from_address=0xd8da6bf26964af9d7eed9e03e53415d37aa96045&start_time=1735689600&end_time=1767225600 +``` + +### Example 4: Get NFT Transfer Activities + +**Before:** + +```bash +GET /nft/activities/evm?network_id=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&anyAddress=0xd8da6bf26964af9d7eed9e03e53415d37aa96045 +``` + +**After:** + +```bash +GET /v1/evm/nft/transfers?network=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&address=0xd8da6bf26964af9d7eed9e03e53415d37aa96045 +``` + +### Example 5: Get Pool OHLC Data + +**Before:** + +```bash +GET /token/ohlc/pools/evm/0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640?network_id=mainnet&interval=1h&startTime=1735689600 +``` + +**After:** + +```bash +GET /v1/evm/pools/ohlc?network=mainnet&pool=0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640&interval=1h&start_time=1735689600 +``` + +### Example 6: Batched Query (New Feature) + +Query balances for multiple contracts in a single request: + +```bash +GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 +``` + +Query transfers from multiple addresses: + +```bash +GET /v1/evm/transfers?network=mainnet&from_address=0xabc...,0xdef...,0x123...&start_time=1735689600 +``` + +## ⚠️ Important Notes + +1. **Migration Notes:** The old endpoints were deprecated and removed on **October 30, 2025**. Please ensure all integrations have been migrated to the new Token API v1 endpoints. + +2. **Default Sorting:** All results are now sorted by timestamp (descending) by default. Custom sorting is no longer supported. + +3. **Pagination:** Continue paging through results by incrementing the `page` parameter until you receive an empty `data` array. The API no longer provides total counts due to performance optimizations with ClickHouse. + +4. **Time Defaults:** If you previously relied on fetching all historical data without time filters, note that `start_time` now defaults to `2025-01-01`. Adjust accordingly if you need earlier data. diff --git a/website/src/pages/hi/token-api/upgrade-to-v1.mdx b/website/src/pages/hi/token-api/upgrade-to-v1.mdx deleted file mode 100644 index fbe09101eaa5..000000000000 --- a/website/src/pages/hi/token-api/upgrade-to-v1.mdx +++ /dev/null @@ -1,254 +0,0 @@ ---- -title: Upgrade to v1 ---- - -This guide covers the migration from the legacy API structure to the new v1 API. The refactoring introduces versioned endpoints, standardized query parameters, improved batching support, and consistent naming conventions. - -**Note** - -- `EVM` = Ethereum Virtual Machine - -Used to describe endpoints supporting EVM-based chains (e.g. `base`, `bsc`, `mainnet`, ...). - -- `SVM` = Solana Virtual Machine - -Used to describe endpoints supporting Solana (currently the only SVM chain supported). - -## 🔑 Breaking Changes Summary - -### 1. **API Versioning** - -All endpoints now use the `/v1` prefix. - -**Before:** - -``` -GET /balances/evm -GET /nft/items/contract/:contract/token_id/:token_id -``` - -**After:** - -``` -GET /v1/evm/balances -GET /v1/evm/nft/items -``` - -### 2. **Route Structure Reorganization** - -#### 2.1 EVM Endpoints - -Consolidated under `/v1/evm/*` - -| Old Endpoint | New Endpoint | -| ------------------------------------------------------ | ----------------------------- | -| `/balances/evm` | `/v1/evm/balances` | -| `/historical/balances/evm` | `/v1/evm/balances/historical` | -| `/holders/evm/:contract` | `/v1/evm/holders` | -| `/tokens/evm/:contract` | `/v1/evm/tokens` | -| `/transfers/evm` | `/v1/evm/transfers` | -| `/pools/evm` | `/v1/evm/pools` | -| `/swaps/evm` | `/v1/evm/swaps` | -| `/dexes/evm` | `/v1/evm/dexes` | -| `/ohlc/prices/evm/:contract` | _(removed)_ | -| `/ohlc/pools/evm/:pool` | `/v1/evm/pools/ohlc` | -| `/nft/ownerships/evm/:address` | `/v1/evm/nft/ownerships` | -| `/nft/collections/evm/:contract` | `/v1/evm/nft/collections` | -| `/nft/items/evm/contract/:contract/token_id/:token_id` | `/v1/evm/nft/items` | -| `/nft/holders/evm/:contract` | `/v1/evm/nft/holders` | -| `/nft/activities/evm` | `/v1/evm/nft/transfers` | -| `/nft/sales/evm` | `/v1/evm/nft/sales` | - -**Important:** The NFT endpoint `/nft/activities` has been renamed to `/v1/evm/nft/transfers` to better reflect its purpose. - -**Important:** The EVM Token OHLCV Data endpoint `/ohlc/prices/evm/{contract}` has been removed. You can use `/v1/evm/pools` to find stablecoin pairs for your contract and `/v1/evm/pools/ohlc` for OHLCV data for that pair. - ---- - -#### 2.2 New EVM native balances endpoint - -Native balances for EVM chains can be found under `/v1/evm/balances/native`. They will not show up in the `/v1/evm/balances` endpoint. - -Other endpoints can still use native token under the `0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee` contract. - ---- - -#### 2.3 SVM Endpoints - -Consolidated under `/v1/svm/*` - -| Old Endpoint | New Endpoint | -| ------------------------ | ------------------------- | -| `/balances/svm` | `/v1/svm/balances` | -| `/balances/native/svm` | `/v1/svm/balances/native` | -| `/holders/svm/:contract` | `/v1/svm/holders` | -| `/tokens/svm/:mint` | `/v1/svm/tokens` | -| `/transfers/svm` | `/v1/svm/transfers` | -| `/pools/svm` | `/v1/svm/pools` | -| `/swaps/svm` | `/v1/svm/swaps` | -| `/dexes/svm` | `/v1/svm/dexes` | -| `/owner/svm/:account` | `/v1/svm/owner` | -| `/ohlc/pools/svm/:pool` | `/v1/svm/pools/ohlc` | - -## 📝 Parameter Changes - -### 3. **Path Parameters → Query Parameters** - -All path parameters have been moved to query parameters. - -**Before:** - -```bash -GET /balances/evm/:address -GET /holders/evm/:contract -GET /nft/items/evm/contract/:contract/token_id/:token_id -``` - -**After:** - -```bash -GET /v1/evm/balances?network=mainnet&address=0x... -GET /v1/evm/holders?network=mainnet&contract=0x... -GET /v1/evm/nft/items?network=mainnet&contract=0x...&token_id=5712 -``` - -### 4. **Standardized Parameter Naming** - -All query parameters have been standardized to use snake_case naming convention. - -| Old Parameter | New Parameter | Notes | -| --- | --- | --- | -| `network_id` | `network` | Renamed, `matic` has also been renamed to `polygon` | -| `anyAddress` | `address` | Matches either `from` or `to` address | -| `from`, `fromAddress`, `offererAddress` | `from_address`, `offerer` | - | -| `to`, `toAddress`, `recipientAddress` | `to_address`, `recipient` | - | -| `startTime` | `start_time` | Default: `1735689600` (`2025-01-01`) | -| `endTime` | `end_time` | Default: `9999999999` | -| - | `start_block` | New parameter, default: `0` | -| - | `end_block` | New parameter, default: `9999999999` | -| - | `include_null_balances` | New parameter, default: `false` | -| `tx_hash` | `transaction_id` | - | -| `token` | `input_token`, `output_token` | More explicit for pool queries | -| `pool` | `amm_pool` | - | -| `orderBy`, `orderDirection` | _(removed)_ | Always sorted by most recent timestamp first | - -**Important:** The `network_id` parameter has been renamed to `network`. - -**Important:** `matic` network has been renamed to `polygon`. - -### 5. **Batched Parameters** - -Many parameters now support batching - accepting single values or comma-separated strings. - -**Supported Batched Parameters:** - -- `address`, `from_address`, `to_address` -- `contract`, `token_id` -- `factory`, `pool` -- `owner`, `token_account`, `mint` -- `transaction_id`, `signature` - -**Examples:** - -```console -# Single value -?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 - -# Comma-separated, single parameter -?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 - -# Repeated parameter values -?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&contract=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 -``` - -### 6. **New Parameters** - -#### `include_null_balances` - -Added to balance endpoints to optionally include zero/null balances. - -```bash -?include_null_balances=true -``` - -**Default:** `false` - -## 🔄 Response Changes - -### 7. **Pagination Changes** - -Pagination responses have been simplified. The API no longer computes total result counts due to performance and accuracy considerations when working with ClickHouse views and materialized tables. - -**Before:** - -```json -{ - "pagination": { - "previous_page": 1, - "current_page": 2, - "next_page": 3, - "total_pages": 10 - }, - "total_results": 1234 -} -``` - -**After:** - -```json -{ - "pagination": { - "previous_page": 1, - "current_page": 2 - } -} -``` - -**Removed fields:** - -- `next_page` -- `total_pages` -- `total_results` - -**Important:** To retrieve all results, continue incrementing the `page` parameter until the API returns an empty `data` array. This indicates you've reached the end of the results. - -### 8. **Removed Parameters** - -The following deprecated parameters have been removed: - -- `orderBy` - Results are now ordered by timestamp/block by default -- `orderDirection` - Always descending (newest first) - -## 📚 Example Migrations - -### Old vs New: Get Token Balances - -**Before:** - -```bash -GET /balances/evm/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045?network_id=mainnet&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 -``` - -**After:** - -```bash -GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 -``` - -### New Feature: Batched Queries - -Query balances for multiple contracts in a single request: - -```bash -GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 -``` - -## ⚠️ Important Notes - -1. **Backward Compatibility:** The old endpoints are deprecated and will be removed in the future. Migrate by **Oct 30, 2025**. - -2. **Default Sorting:** All results are now sorted by timestamp (descending) by default. Custom sorting is no longer supported. - -3. **Pagination:** Continue paging through results by incrementing the `page` parameter until you receive an empty `data` array. The API no longer provides total counts due to performance optimizations with ClickHouse. - -4. **Time Defaults:** If you previously relied on fetching all historical data without time filters, note that `start_time` now defaults to `2025-01-01`. Adjust accordingly if you need earlier data. diff --git a/website/src/pages/it/index.json b/website/src/pages/it/index.json index c86981bd867e..a30047cd5cc5 100644 --- a/website/src/pages/it/index.json +++ b/website/src/pages/it/index.json @@ -2,7 +2,7 @@ "title": "Home", "hero": { "title": "The Graph Docs", - "description": "The Graph is a blockchain data solution that powers applications, analytics, and AI on 90+ chains. The Graph's core products include the Token API for web3 apps, Subgraphs for indexing smart contracts, and Substreams for real-time and historical data streaming.", + "description": "The Graph is a blockchain data solution that powers applications, analytics, and AI on 80+ chains. The Graph's core products include the Token API for web3 apps, Subgraphs for indexing smart contracts, and Substreams for real-time and historical data streaming.", "cta1": "How The Graph works", "cta2": "Build your first subgraph" }, diff --git a/website/src/pages/it/subgraphs/guides/_meta.js b/website/src/pages/it/subgraphs/guides/_meta.js index fd5608dcceb2..1c081848ea08 100644 --- a/website/src/pages/it/subgraphs/guides/_meta.js +++ b/website/src/pages/it/subgraphs/guides/_meta.js @@ -2,7 +2,6 @@ export default { 'subgraph-composition': '', 'subgraph-debug-forking': '', near: '', - grafting: '', 'subgraph-uncrashable': '', 'transfer-to-the-graph': '', diff --git a/website/src/pages/it/token-api/_meta.js b/website/src/pages/it/token-api/_meta.js index a8624da52e7f..9588f70cec53 100644 --- a/website/src/pages/it/token-api/_meta.js +++ b/website/src/pages/it/token-api/_meta.js @@ -11,6 +11,6 @@ export default { 'tvm-dexs': titles['tvm-dexs'] ?? '', monitoring: titles['monitoring'] ?? '', 'endpoint-pricing': '', + guides: titles['guides'] ?? '', faq: '', - 'upgrade-to-v1': '', } diff --git a/website/src/pages/it/token-api/guides/_meta-titles.json b/website/src/pages/it/token-api/guides/_meta-titles.json new file mode 100644 index 000000000000..cd93dcc0fc0b --- /dev/null +++ b/website/src/pages/it/token-api/guides/_meta-titles.json @@ -0,0 +1,4 @@ +{ + "gpt": "Create Custom GPTS", + "upgrade-to-v1": "" +} diff --git a/website/src/pages/it/token-api/guides/_meta.js b/website/src/pages/it/token-api/guides/_meta.js new file mode 100644 index 000000000000..e5aaaadd78f2 --- /dev/null +++ b/website/src/pages/it/token-api/guides/_meta.js @@ -0,0 +1,4 @@ +export default { + gpt: '', + 'upgrade-to-v1': '', +} diff --git a/website/src/pages/it/token-api/guides/gpt.mdx b/website/src/pages/it/token-api/guides/gpt.mdx new file mode 100644 index 000000000000..564d013dea20 --- /dev/null +++ b/website/src/pages/it/token-api/guides/gpt.mdx @@ -0,0 +1,121 @@ +--- +title: How the Token API Powers Custom GPTs +sidebarTitle: Create Custom GPTs +--- + +## Overview + +The Token API is a pre-indexed blockchain data service that provides real-time access to token balances, metadata, prices, liquidity, and volume across multiple chains. Developers use its REST endpoints to build wallets, trading dashboards, DeFi analytics, and AI systems without maintaining their own indexing stack. Custom GPTs can connect directly to the Token API's OpenAPI schema. + +The Token API enables developers to build **Custom GPTs** to reason over live blockchain data inside ChatGPT that can reason over and respond with live blockchain data directly inside ChatGPT. + +## What the Token API Enables in Custom GPTs + +When a Custom GPT is wired to the Token API, it gains access to a machine-readable schema and authenticated endpoints. Developers can use this to: + +- **Query real-time onchain data**: Balances, token prices, liquidity, and transaction history. +- **Automate domain-specific tasks**: Portfolio tracking, accounting, reconciliation, and market analysis. +- **Power AI agents with verifiable blockchain context**: Use the same data sources dapps rely on. + +Because the Token API provides a machine-readable schema and authenticated requests, it serves as a structured data layer that enables GPT-5 agents to combine natural language reasoning with live onchain data from The Graph. + +## When to Use the Token API for Custom GPTs + +Use the Token API when your GPT needs repeatable, domain-specific behavior grounded in blockchain data. This is most effective when the GPT performs the same type of task frequently or enforces a workflow you define. For one-off or exploratory questions, standard ChatGPT prompts are sufficient. + +## Choosing a Use Case + +Start with a clear, narrow objective, then expand as needed. Common patterns include: + +- **Accounting GPT**: Onchain accounting, tax tagging, and portfolio reconciliation. +- **Trading GPT**: Liquidity, pricing, and volume analysis for trading strategies. +- **Protocol Tracking GPT**: Real-time monitoring of transaction activity and liquidity pools. + +A focused initial goal such as “Retrieve token balances and prices for a wallet” makes it easier to configure reliable behavior before adding complex workflows. + +## Requirements + +| Requirement | Description | +| ---------------------- | -------------------------------------------------------- | +| ChatGPT 5 | Custom GPT creation requires GPT-5 tier or Pro. | +| Token API Subscription | Sign up at [The Graph Market](https://thegraph.market./) | +| Token API Key | Available in your dashboard as the Authentication JWT. | + +## Setting Up a Custom GPT + +Below is an explanatory outline of what happens during setup. This section provides conceptual understanding. + +### Create Custom GPT + +1. Visit chat.openai.com/gpts in your browser. 2, Click Create (top right). +2. Under Configure (in the top left panel), set up your GPT's personality and scope. + +### Configure Your GPT + +You define the GPT's role, scope, and metadata so it knows what it is designed to do. This includes: + +- **Name and Description**: Helps users discover your GPT. + - For example: **Name**: Token Tracker GPT **Description**: An onchain analytics assistant that retrieves live token balances, prices, and liquidity data using The Graph's Token API. +- **Instructions**: Tells the GPT what tasks it should perform using the Token API. + - For example: You are a blockchain data assistant retrieving onchain token data from The Graph's Token API. Use endpoints to fetch balances, liquidity, and price history across EVM chains. Present results in tables with token symbols, prices, and USD values. +- **Knowledge**: Optional context files such as wallet references, accounting rules, or code snippets. +- **New Action**: At the bottom, click “Create new action” to connect your GPT to the Token API. + +### Connect the Token API + +To enable live blockchain queries inside ChatGPT, you connect the GPT to the Token API through: + +#### Authentication + +1. Set Authentication to API Key → Bearer. +2. Open [The Graph Market](https://thegraph.market./) and copy your Authentication JWT from your dashboard. +3. Paste the token into the ChatGPT prompt where the field shows [HIDDEN]. + +#### Schema + +1. Above the Schema box, click Import from URL. +2. Paste: https://token-api.thegraph.com/openapi +3. Click Import. You'll now see endpoints like: + - `getV1EvmTokens` + - `getV1EvmDexes` + - `getV1EvmBalances` +4. Click Test on one (for example `getV1EvmDexes`) to verify connection. + +##### Privacy + +1. At the bottom, under Privacy, paste: https://pinax.network/en/legal/privacy + +### Privacy + +You can attach a privacy policy URL such as: https://pinax.network/en/legal/privacy + +## Example Prompt Patterns + +These examples help illustrate how a GPT reasons over Token API data. + +### Wallet and Portfolio + +Get the total USD balance for a wallet across multiple chains, returning token name, symbol, balance, and price. + +### Trading Analysis + +Compare USDC and DAI liquidity across Uniswap and Curve. Return the top 5 pools by TVL. + +### Accounting + +List all ERC-20 transfers for this address in the last 30 days. Group by token and total incoming/outgoing volume. + +## Best Practices + +| Tip | Why It Matters | +| --------------------------------- | ---------------------------------------------------------------------- | +| Scope your GPT narrowly first | Simplifies debugging and validates schema integration. | +| Use clear role instructions | Helps the GPT choose the right endpoints and avoid assumptions. | +| Name endpoints explicitly | Improves routing accuracy when fetching balances, prices, or DEX data. | +| Combine with code | Enables custom parsing or logic for complex workflows. | +| Add Subgraph or Substream context | Provides richer analytics when combined with Token API data. | + +## FAQs & Resources + +- Builders Office Hours (October 23, 2025) +- Watch the full session: https://x.com/i/broadcasts/1mrGmBzBarNJy diff --git a/website/src/pages/it/token-api/guides/upgrade-to-v1.mdx b/website/src/pages/it/token-api/guides/upgrade-to-v1.mdx new file mode 100644 index 000000000000..e2a7ccf973fa --- /dev/null +++ b/website/src/pages/it/token-api/guides/upgrade-to-v1.mdx @@ -0,0 +1,346 @@ +--- +title: Upgrade to v1 +--- + +This guide covers the migration from the legacy API structure to the new v1 API. The refactoring introduces versioned endpoints, standardized query parameters, improved batching support, and consistent naming conventions. + +**Note** + +- `EVM` = Ethereum Virtual Machine + +Used to describe endpoints supporting EVM-based chains (e.g. `base`, `bsc`, `mainnet`, ...). + +- `SVM` = Solana Virtual Machine + +Used to describe endpoints supporting Solana (currently the only SVM chain supported). + +## 🔑 Breaking Changes Summary + +### 1. API Versioning + +All endpoints now use the `/v1` prefix. + +**Before:** + +``` +GET /balances/evm +GET /nft/items/contract/:contract/token_id/:token_id +``` + +**After:** + +``` +GET /v1/evm/balances +GET /v1/evm/nft/items +``` + +### 2. Route Structure Reorganization + +#### 2.1 EVM Endpoints + +Consolidated under `/v1/evm/*` + +| Old Endpoint | New Endpoint | +| ------------------------------------------------------ | ----------------------------- | +| `/balances/evm` | `/v1/evm/balances` | +| `/historical/balances/evm` | `/v1/evm/balances/historical` | +| `/holders/evm/:contract` | `/v1/evm/holders` | +| `/tokens/evm/:contract` | `/v1/evm/tokens` | +| `/transfers/evm` | `/v1/evm/transfers` | +| `/pools/evm` | `/v1/evm/pools` | +| `/swaps/evm` | `/v1/evm/swaps` | +| `/dexes/evm` | `/v1/evm/dexes` | +| `/ohlc/prices/evm/:contract` | _(removed)_ | +| `/ohlc/pools/evm/:pool` | `/v1/evm/pools/ohlc` | +| `/nft/ownerships/evm/:address` | `/v1/evm/nft/ownerships` | +| `/nft/collections/evm/:contract` | `/v1/evm/nft/collections` | +| `/nft/items/evm/contract/:contract/token_id/:token_id` | `/v1/evm/nft/items` | +| `/nft/holders/evm/:contract` | `/v1/evm/nft/holders` | +| `/nft/activities/evm` | `/v1/evm/nft/transfers` | +| `/nft/sales/evm` | `/v1/evm/nft/sales` | + +**Important:** The NFT endpoint `/nft/activities` has been renamed to `/v1/evm/nft/transfers` to better reflect its purpose. + +**Important:** The EVM Token OHLCV Data endpoint `/ohlc/prices/evm/{contract}` has been removed. You can use `/v1/evm/pools` to find stablecoin pairs for your contract and `/v1/evm/pools/ohlc` for OHLCV data for that pair. + +--- + +#### 2.2 New EVM native balances endpoint + +Native balances for EVM chains can be found under `/v1/evm/balances/native`. They will not show up in the `/v1/evm/balances` endpoint. + +Other endpoints can still use native token under the `0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee` contract. + +--- + +#### 2.3 SVM Endpoints + +Consolidated under `/v1/svm/*` + +| Old Endpoint | New Endpoint | +| ------------------------ | ------------------------- | +| `/balances/svm` | `/v1/svm/balances` | +| `/balances/native/svm` | `/v1/svm/balances/native` | +| `/holders/svm/:contract` | `/v1/svm/holders` | +| `/tokens/svm/:mint` | `/v1/svm/tokens` | +| `/transfers/svm` | `/v1/svm/transfers` | +| `/pools/svm` | `/v1/svm/pools` | +| `/swaps/svm` | `/v1/svm/swaps` | +| `/dexes/svm` | `/v1/svm/dexes` | +| `/owner/svm/:account` | `/v1/svm/owner` | +| `/ohlc/pools/svm/:pool` | `/v1/svm/pools/ohlc` | + +## 📝 Parameter Changes + +### 3. Path Parameters → Query Parameters + +All path parameters have been moved to query parameters. + +**Before:** + +```bash +GET /balances/evm/:address +GET /holders/evm/:contract +GET /nft/items/evm/contract/:contract/token_id/:token_id +``` + +**After:** + +```bash +GET /v1/evm/balances?network=mainnet&address=0x... +GET /v1/evm/holders?network=mainnet&contract=0x... +GET /v1/evm/nft/items?network=mainnet&contract=0x...&token_id=5712 +``` + +### 4. Standardized Parameter Naming + +All query parameters have been standardized to use snake_case naming convention. + +| Old Parameter | New Parameter | Notes | +| --- | --- | --- | +| `network_id` | `network` | Renamed, `matic` has also been renamed to `polygon` | +| `anyAddress` | `address` | Matches either `from` or `to` address | +| `from`, `fromAddress`, `offererAddress` | `from_address`, `offerer` | - | +| `to`, `toAddress`, `recipientAddress` | `to_address`, `recipient` | - | +| `startTime` | `start_time` | Default: `1735689600` (`2025-01-01`) | +| `endTime` | `end_time` | Default: `9999999999` | +| - | `start_block` | New parameter, default: `0` | +| - | `end_block` | New parameter, default: `9999999999` | +| - | `include_null_balances` | New parameter, default: `false` | +| `tx_hash` | `transaction_id` | - | +| `token` | `input_token`, `output_token` | More explicit for pool queries | +| `pool` | `amm_pool` | - | +| `orderBy`, `orderDirection` | _(removed)_ | Always sorted by most recent timestamp first | + +**Important:** The `network_id` parameter has been renamed to `network`. + +**Important:** `matic` network has been renamed to `polygon`. + +### 5. Batched Parameters + +Many parameters now support batching - accepting single values or comma-separated strings. + +**Supported Batched Parameters:** + +- `address`, `from_address`, `to_address` +- `contract`, `token_id` +- `factory`, `pool` +- `owner`, `token_account`, `mint` +- `transaction_id`, `signature` + +**Examples:** + +```console +## Single value +?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 + +## Comma-separated, single parameter +?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 + +## Repeated parameter values +?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&contract=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 +``` + +### 6. New Parameters + +#### `include_null_balances` + +Added to balance endpoints to optionally include zero/null balances. + +```bash +?include_null_balances=true +``` + +**Default:** `false` + +## 🔄 Response Changes + +### 7. Pagination Changes + +Pagination responses have been simplified. The API no longer computes total result counts due to performance and accuracy considerations when working with ClickHouse views and materialized tables. + +**Before:** + +```json +{ + "pagination": { + "previous_page": 1, + "current_page": 2, + "next_page": 3, + "total_pages": 10 + }, + "total_results": 1234 +} +``` + +**After:** + +```json +{ + "pagination": { + "previous_page": 1, + "current_page": 2 + } +} +``` + +**Removed fields:** + +- `next_page` +- `total_pages` +- `total_results` + +**Important:** To retrieve all results, continue incrementing the `page` parameter until the API returns an empty `data` array. This indicates you've reached the end of the results. + +### 8. Removed Parameters + +The following deprecated parameters have been removed: + +- `orderBy` - Results are now ordered by timestamp/block by default +- `orderDirection` - Always descending (newest first) + +### 9. Cached Queries + +Queries are now cached on the ClickHouse side for better performance. + +You can specifically request to not use the cache by setting the `Cache-Control` header to `no-cache`. + +#### Example + +**Cache** + +```console +$ curl -s 'https://token-api.thegraph.com/v1/...' | jq .statistics +{ + "bytes_read": 221, + "rows_read": 1, + "elapsed": 0.002212065 +} +``` + +**No cache** + +```console +$ curl -s 'http://localhost:8000/v1/...' --header 'Cache-Control: no-cache' | jq .statistics +{ + "bytes_read": 14621174348, + "rows_read": 223244390, + "elapsed": 0.971064066 +} +``` + +## 📚 Example Migrations + +### Example 1: Get Token Balances + +**Before:** + +```bash +GET /token/balances/evm/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045?network_id=mainnet&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 +``` + +**After:** + +```bash +GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 +``` + +### Example 2: Get NFT Items + +**Before:** + +```bash +GET /nft/items/evm/contract/0xbd3531da5cf5857e7cfaa92426877b022e612cf8/token_id/5712?network_id=mainnet +``` + +**After:** + +```bash +GET /v1/evm/nft/items?network=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&token_id=5712 +``` + +### Example 3: Get Token Transfers with Time Filter + +**Before:** + +```bash +GET /token/transfers/evm?network_id=mainnet&from=0xd8da6bf26964af9d7eed9e03e53415d37aa96045&startTime=1735689600&endTime=1767225600 +``` + +**After:** + +```bash +GET /v1/evm/transfers?network=mainnet&from_address=0xd8da6bf26964af9d7eed9e03e53415d37aa96045&start_time=1735689600&end_time=1767225600 +``` + +### Example 4: Get NFT Transfer Activities + +**Before:** + +```bash +GET /nft/activities/evm?network_id=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&anyAddress=0xd8da6bf26964af9d7eed9e03e53415d37aa96045 +``` + +**After:** + +```bash +GET /v1/evm/nft/transfers?network=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&address=0xd8da6bf26964af9d7eed9e03e53415d37aa96045 +``` + +### Example 5: Get Pool OHLC Data + +**Before:** + +```bash +GET /token/ohlc/pools/evm/0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640?network_id=mainnet&interval=1h&startTime=1735689600 +``` + +**After:** + +```bash +GET /v1/evm/pools/ohlc?network=mainnet&pool=0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640&interval=1h&start_time=1735689600 +``` + +### Example 6: Batched Query (New Feature) + +Query balances for multiple contracts in a single request: + +```bash +GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 +``` + +Query transfers from multiple addresses: + +```bash +GET /v1/evm/transfers?network=mainnet&from_address=0xabc...,0xdef...,0x123...&start_time=1735689600 +``` + +## ⚠️ Important Notes + +1. **Migration Notes:** The old endpoints were deprecated and removed on **October 30, 2025**. Please ensure all integrations have been migrated to the new Token API v1 endpoints. + +2. **Default Sorting:** All results are now sorted by timestamp (descending) by default. Custom sorting is no longer supported. + +3. **Pagination:** Continue paging through results by incrementing the `page` parameter until you receive an empty `data` array. The API no longer provides total counts due to performance optimizations with ClickHouse. + +4. **Time Defaults:** If you previously relied on fetching all historical data without time filters, note that `start_time` now defaults to `2025-01-01`. Adjust accordingly if you need earlier data. diff --git a/website/src/pages/it/token-api/upgrade-to-v1.mdx b/website/src/pages/it/token-api/upgrade-to-v1.mdx deleted file mode 100644 index fbe09101eaa5..000000000000 --- a/website/src/pages/it/token-api/upgrade-to-v1.mdx +++ /dev/null @@ -1,254 +0,0 @@ ---- -title: Upgrade to v1 ---- - -This guide covers the migration from the legacy API structure to the new v1 API. The refactoring introduces versioned endpoints, standardized query parameters, improved batching support, and consistent naming conventions. - -**Note** - -- `EVM` = Ethereum Virtual Machine - -Used to describe endpoints supporting EVM-based chains (e.g. `base`, `bsc`, `mainnet`, ...). - -- `SVM` = Solana Virtual Machine - -Used to describe endpoints supporting Solana (currently the only SVM chain supported). - -## 🔑 Breaking Changes Summary - -### 1. **API Versioning** - -All endpoints now use the `/v1` prefix. - -**Before:** - -``` -GET /balances/evm -GET /nft/items/contract/:contract/token_id/:token_id -``` - -**After:** - -``` -GET /v1/evm/balances -GET /v1/evm/nft/items -``` - -### 2. **Route Structure Reorganization** - -#### 2.1 EVM Endpoints - -Consolidated under `/v1/evm/*` - -| Old Endpoint | New Endpoint | -| ------------------------------------------------------ | ----------------------------- | -| `/balances/evm` | `/v1/evm/balances` | -| `/historical/balances/evm` | `/v1/evm/balances/historical` | -| `/holders/evm/:contract` | `/v1/evm/holders` | -| `/tokens/evm/:contract` | `/v1/evm/tokens` | -| `/transfers/evm` | `/v1/evm/transfers` | -| `/pools/evm` | `/v1/evm/pools` | -| `/swaps/evm` | `/v1/evm/swaps` | -| `/dexes/evm` | `/v1/evm/dexes` | -| `/ohlc/prices/evm/:contract` | _(removed)_ | -| `/ohlc/pools/evm/:pool` | `/v1/evm/pools/ohlc` | -| `/nft/ownerships/evm/:address` | `/v1/evm/nft/ownerships` | -| `/nft/collections/evm/:contract` | `/v1/evm/nft/collections` | -| `/nft/items/evm/contract/:contract/token_id/:token_id` | `/v1/evm/nft/items` | -| `/nft/holders/evm/:contract` | `/v1/evm/nft/holders` | -| `/nft/activities/evm` | `/v1/evm/nft/transfers` | -| `/nft/sales/evm` | `/v1/evm/nft/sales` | - -**Important:** The NFT endpoint `/nft/activities` has been renamed to `/v1/evm/nft/transfers` to better reflect its purpose. - -**Important:** The EVM Token OHLCV Data endpoint `/ohlc/prices/evm/{contract}` has been removed. You can use `/v1/evm/pools` to find stablecoin pairs for your contract and `/v1/evm/pools/ohlc` for OHLCV data for that pair. - ---- - -#### 2.2 New EVM native balances endpoint - -Native balances for EVM chains can be found under `/v1/evm/balances/native`. They will not show up in the `/v1/evm/balances` endpoint. - -Other endpoints can still use native token under the `0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee` contract. - ---- - -#### 2.3 SVM Endpoints - -Consolidated under `/v1/svm/*` - -| Old Endpoint | New Endpoint | -| ------------------------ | ------------------------- | -| `/balances/svm` | `/v1/svm/balances` | -| `/balances/native/svm` | `/v1/svm/balances/native` | -| `/holders/svm/:contract` | `/v1/svm/holders` | -| `/tokens/svm/:mint` | `/v1/svm/tokens` | -| `/transfers/svm` | `/v1/svm/transfers` | -| `/pools/svm` | `/v1/svm/pools` | -| `/swaps/svm` | `/v1/svm/swaps` | -| `/dexes/svm` | `/v1/svm/dexes` | -| `/owner/svm/:account` | `/v1/svm/owner` | -| `/ohlc/pools/svm/:pool` | `/v1/svm/pools/ohlc` | - -## 📝 Parameter Changes - -### 3. **Path Parameters → Query Parameters** - -All path parameters have been moved to query parameters. - -**Before:** - -```bash -GET /balances/evm/:address -GET /holders/evm/:contract -GET /nft/items/evm/contract/:contract/token_id/:token_id -``` - -**After:** - -```bash -GET /v1/evm/balances?network=mainnet&address=0x... -GET /v1/evm/holders?network=mainnet&contract=0x... -GET /v1/evm/nft/items?network=mainnet&contract=0x...&token_id=5712 -``` - -### 4. **Standardized Parameter Naming** - -All query parameters have been standardized to use snake_case naming convention. - -| Old Parameter | New Parameter | Notes | -| --- | --- | --- | -| `network_id` | `network` | Renamed, `matic` has also been renamed to `polygon` | -| `anyAddress` | `address` | Matches either `from` or `to` address | -| `from`, `fromAddress`, `offererAddress` | `from_address`, `offerer` | - | -| `to`, `toAddress`, `recipientAddress` | `to_address`, `recipient` | - | -| `startTime` | `start_time` | Default: `1735689600` (`2025-01-01`) | -| `endTime` | `end_time` | Default: `9999999999` | -| - | `start_block` | New parameter, default: `0` | -| - | `end_block` | New parameter, default: `9999999999` | -| - | `include_null_balances` | New parameter, default: `false` | -| `tx_hash` | `transaction_id` | - | -| `token` | `input_token`, `output_token` | More explicit for pool queries | -| `pool` | `amm_pool` | - | -| `orderBy`, `orderDirection` | _(removed)_ | Always sorted by most recent timestamp first | - -**Important:** The `network_id` parameter has been renamed to `network`. - -**Important:** `matic` network has been renamed to `polygon`. - -### 5. **Batched Parameters** - -Many parameters now support batching - accepting single values or comma-separated strings. - -**Supported Batched Parameters:** - -- `address`, `from_address`, `to_address` -- `contract`, `token_id` -- `factory`, `pool` -- `owner`, `token_account`, `mint` -- `transaction_id`, `signature` - -**Examples:** - -```console -# Single value -?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 - -# Comma-separated, single parameter -?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 - -# Repeated parameter values -?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&contract=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 -``` - -### 6. **New Parameters** - -#### `include_null_balances` - -Added to balance endpoints to optionally include zero/null balances. - -```bash -?include_null_balances=true -``` - -**Default:** `false` - -## 🔄 Response Changes - -### 7. **Pagination Changes** - -Pagination responses have been simplified. The API no longer computes total result counts due to performance and accuracy considerations when working with ClickHouse views and materialized tables. - -**Before:** - -```json -{ - "pagination": { - "previous_page": 1, - "current_page": 2, - "next_page": 3, - "total_pages": 10 - }, - "total_results": 1234 -} -``` - -**After:** - -```json -{ - "pagination": { - "previous_page": 1, - "current_page": 2 - } -} -``` - -**Removed fields:** - -- `next_page` -- `total_pages` -- `total_results` - -**Important:** To retrieve all results, continue incrementing the `page` parameter until the API returns an empty `data` array. This indicates you've reached the end of the results. - -### 8. **Removed Parameters** - -The following deprecated parameters have been removed: - -- `orderBy` - Results are now ordered by timestamp/block by default -- `orderDirection` - Always descending (newest first) - -## 📚 Example Migrations - -### Old vs New: Get Token Balances - -**Before:** - -```bash -GET /balances/evm/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045?network_id=mainnet&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 -``` - -**After:** - -```bash -GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 -``` - -### New Feature: Batched Queries - -Query balances for multiple contracts in a single request: - -```bash -GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 -``` - -## ⚠️ Important Notes - -1. **Backward Compatibility:** The old endpoints are deprecated and will be removed in the future. Migrate by **Oct 30, 2025**. - -2. **Default Sorting:** All results are now sorted by timestamp (descending) by default. Custom sorting is no longer supported. - -3. **Pagination:** Continue paging through results by incrementing the `page` parameter until you receive an empty `data` array. The API no longer provides total counts due to performance optimizations with ClickHouse. - -4. **Time Defaults:** If you previously relied on fetching all historical data without time filters, note that `start_time` now defaults to `2025-01-01`. Adjust accordingly if you need earlier data. diff --git a/website/src/pages/ja/index.json b/website/src/pages/ja/index.json index ed6ccaf2c73d..adf69a4059b4 100644 --- a/website/src/pages/ja/index.json +++ b/website/src/pages/ja/index.json @@ -2,7 +2,7 @@ "title": "Home", "hero": { "title": "The Graphのドキュメント", - "description": "The Graph is a blockchain data solution that powers applications, analytics, and AI on 90+ chains. The Graph's core products include the Token API for web3 apps, Subgraphs for indexing smart contracts, and Substreams for real-time and historical data streaming.", + "description": "The Graph is a blockchain data solution that powers applications, analytics, and AI on 80+ chains. The Graph's core products include the Token API for web3 apps, Subgraphs for indexing smart contracts, and Substreams for real-time and historical data streaming.", "cta1": "The Graphの仕組み", "cta2": "最初のサブグラフを作る" }, diff --git a/website/src/pages/ja/subgraphs/guides/_meta.js b/website/src/pages/ja/subgraphs/guides/_meta.js index fd5608dcceb2..1c081848ea08 100644 --- a/website/src/pages/ja/subgraphs/guides/_meta.js +++ b/website/src/pages/ja/subgraphs/guides/_meta.js @@ -2,7 +2,6 @@ export default { 'subgraph-composition': '', 'subgraph-debug-forking': '', near: '', - grafting: '', 'subgraph-uncrashable': '', 'transfer-to-the-graph': '', diff --git a/website/src/pages/ja/token-api/_meta.js b/website/src/pages/ja/token-api/_meta.js index a8624da52e7f..9588f70cec53 100644 --- a/website/src/pages/ja/token-api/_meta.js +++ b/website/src/pages/ja/token-api/_meta.js @@ -11,6 +11,6 @@ export default { 'tvm-dexs': titles['tvm-dexs'] ?? '', monitoring: titles['monitoring'] ?? '', 'endpoint-pricing': '', + guides: titles['guides'] ?? '', faq: '', - 'upgrade-to-v1': '', } diff --git a/website/src/pages/ja/token-api/guides/_meta-titles.json b/website/src/pages/ja/token-api/guides/_meta-titles.json new file mode 100644 index 000000000000..cd93dcc0fc0b --- /dev/null +++ b/website/src/pages/ja/token-api/guides/_meta-titles.json @@ -0,0 +1,4 @@ +{ + "gpt": "Create Custom GPTS", + "upgrade-to-v1": "" +} diff --git a/website/src/pages/ja/token-api/guides/_meta.js b/website/src/pages/ja/token-api/guides/_meta.js new file mode 100644 index 000000000000..e5aaaadd78f2 --- /dev/null +++ b/website/src/pages/ja/token-api/guides/_meta.js @@ -0,0 +1,4 @@ +export default { + gpt: '', + 'upgrade-to-v1': '', +} diff --git a/website/src/pages/ja/token-api/guides/gpt.mdx b/website/src/pages/ja/token-api/guides/gpt.mdx new file mode 100644 index 000000000000..564d013dea20 --- /dev/null +++ b/website/src/pages/ja/token-api/guides/gpt.mdx @@ -0,0 +1,121 @@ +--- +title: How the Token API Powers Custom GPTs +sidebarTitle: Create Custom GPTs +--- + +## Overview + +The Token API is a pre-indexed blockchain data service that provides real-time access to token balances, metadata, prices, liquidity, and volume across multiple chains. Developers use its REST endpoints to build wallets, trading dashboards, DeFi analytics, and AI systems without maintaining their own indexing stack. Custom GPTs can connect directly to the Token API's OpenAPI schema. + +The Token API enables developers to build **Custom GPTs** to reason over live blockchain data inside ChatGPT that can reason over and respond with live blockchain data directly inside ChatGPT. + +## What the Token API Enables in Custom GPTs + +When a Custom GPT is wired to the Token API, it gains access to a machine-readable schema and authenticated endpoints. Developers can use this to: + +- **Query real-time onchain data**: Balances, token prices, liquidity, and transaction history. +- **Automate domain-specific tasks**: Portfolio tracking, accounting, reconciliation, and market analysis. +- **Power AI agents with verifiable blockchain context**: Use the same data sources dapps rely on. + +Because the Token API provides a machine-readable schema and authenticated requests, it serves as a structured data layer that enables GPT-5 agents to combine natural language reasoning with live onchain data from The Graph. + +## When to Use the Token API for Custom GPTs + +Use the Token API when your GPT needs repeatable, domain-specific behavior grounded in blockchain data. This is most effective when the GPT performs the same type of task frequently or enforces a workflow you define. For one-off or exploratory questions, standard ChatGPT prompts are sufficient. + +## Choosing a Use Case + +Start with a clear, narrow objective, then expand as needed. Common patterns include: + +- **Accounting GPT**: Onchain accounting, tax tagging, and portfolio reconciliation. +- **Trading GPT**: Liquidity, pricing, and volume analysis for trading strategies. +- **Protocol Tracking GPT**: Real-time monitoring of transaction activity and liquidity pools. + +A focused initial goal such as “Retrieve token balances and prices for a wallet” makes it easier to configure reliable behavior before adding complex workflows. + +## Requirements + +| Requirement | Description | +| ---------------------- | -------------------------------------------------------- | +| ChatGPT 5 | Custom GPT creation requires GPT-5 tier or Pro. | +| Token API Subscription | Sign up at [The Graph Market](https://thegraph.market./) | +| Token API Key | Available in your dashboard as the Authentication JWT. | + +## Setting Up a Custom GPT + +Below is an explanatory outline of what happens during setup. This section provides conceptual understanding. + +### Create Custom GPT + +1. Visit chat.openai.com/gpts in your browser. 2, Click Create (top right). +2. Under Configure (in the top left panel), set up your GPT's personality and scope. + +### Configure Your GPT + +You define the GPT's role, scope, and metadata so it knows what it is designed to do. This includes: + +- **Name and Description**: Helps users discover your GPT. + - For example: **Name**: Token Tracker GPT **Description**: An onchain analytics assistant that retrieves live token balances, prices, and liquidity data using The Graph's Token API. +- **Instructions**: Tells the GPT what tasks it should perform using the Token API. + - For example: You are a blockchain data assistant retrieving onchain token data from The Graph's Token API. Use endpoints to fetch balances, liquidity, and price history across EVM chains. Present results in tables with token symbols, prices, and USD values. +- **Knowledge**: Optional context files such as wallet references, accounting rules, or code snippets. +- **New Action**: At the bottom, click “Create new action” to connect your GPT to the Token API. + +### Connect the Token API + +To enable live blockchain queries inside ChatGPT, you connect the GPT to the Token API through: + +#### Authentication + +1. Set Authentication to API Key → Bearer. +2. Open [The Graph Market](https://thegraph.market./) and copy your Authentication JWT from your dashboard. +3. Paste the token into the ChatGPT prompt where the field shows [HIDDEN]. + +#### Schema + +1. Above the Schema box, click Import from URL. +2. Paste: https://token-api.thegraph.com/openapi +3. Click Import. You'll now see endpoints like: + - `getV1EvmTokens` + - `getV1EvmDexes` + - `getV1EvmBalances` +4. Click Test on one (for example `getV1EvmDexes`) to verify connection. + +##### Privacy + +1. At the bottom, under Privacy, paste: https://pinax.network/en/legal/privacy + +### Privacy + +You can attach a privacy policy URL such as: https://pinax.network/en/legal/privacy + +## Example Prompt Patterns + +These examples help illustrate how a GPT reasons over Token API data. + +### Wallet and Portfolio + +Get the total USD balance for a wallet across multiple chains, returning token name, symbol, balance, and price. + +### Trading Analysis + +Compare USDC and DAI liquidity across Uniswap and Curve. Return the top 5 pools by TVL. + +### Accounting + +List all ERC-20 transfers for this address in the last 30 days. Group by token and total incoming/outgoing volume. + +## Best Practices + +| Tip | Why It Matters | +| --------------------------------- | ---------------------------------------------------------------------- | +| Scope your GPT narrowly first | Simplifies debugging and validates schema integration. | +| Use clear role instructions | Helps the GPT choose the right endpoints and avoid assumptions. | +| Name endpoints explicitly | Improves routing accuracy when fetching balances, prices, or DEX data. | +| Combine with code | Enables custom parsing or logic for complex workflows. | +| Add Subgraph or Substream context | Provides richer analytics when combined with Token API data. | + +## FAQs & Resources + +- Builders Office Hours (October 23, 2025) +- Watch the full session: https://x.com/i/broadcasts/1mrGmBzBarNJy diff --git a/website/src/pages/ja/token-api/guides/upgrade-to-v1.mdx b/website/src/pages/ja/token-api/guides/upgrade-to-v1.mdx new file mode 100644 index 000000000000..e2a7ccf973fa --- /dev/null +++ b/website/src/pages/ja/token-api/guides/upgrade-to-v1.mdx @@ -0,0 +1,346 @@ +--- +title: Upgrade to v1 +--- + +This guide covers the migration from the legacy API structure to the new v1 API. The refactoring introduces versioned endpoints, standardized query parameters, improved batching support, and consistent naming conventions. + +**Note** + +- `EVM` = Ethereum Virtual Machine + +Used to describe endpoints supporting EVM-based chains (e.g. `base`, `bsc`, `mainnet`, ...). + +- `SVM` = Solana Virtual Machine + +Used to describe endpoints supporting Solana (currently the only SVM chain supported). + +## 🔑 Breaking Changes Summary + +### 1. API Versioning + +All endpoints now use the `/v1` prefix. + +**Before:** + +``` +GET /balances/evm +GET /nft/items/contract/:contract/token_id/:token_id +``` + +**After:** + +``` +GET /v1/evm/balances +GET /v1/evm/nft/items +``` + +### 2. Route Structure Reorganization + +#### 2.1 EVM Endpoints + +Consolidated under `/v1/evm/*` + +| Old Endpoint | New Endpoint | +| ------------------------------------------------------ | ----------------------------- | +| `/balances/evm` | `/v1/evm/balances` | +| `/historical/balances/evm` | `/v1/evm/balances/historical` | +| `/holders/evm/:contract` | `/v1/evm/holders` | +| `/tokens/evm/:contract` | `/v1/evm/tokens` | +| `/transfers/evm` | `/v1/evm/transfers` | +| `/pools/evm` | `/v1/evm/pools` | +| `/swaps/evm` | `/v1/evm/swaps` | +| `/dexes/evm` | `/v1/evm/dexes` | +| `/ohlc/prices/evm/:contract` | _(removed)_ | +| `/ohlc/pools/evm/:pool` | `/v1/evm/pools/ohlc` | +| `/nft/ownerships/evm/:address` | `/v1/evm/nft/ownerships` | +| `/nft/collections/evm/:contract` | `/v1/evm/nft/collections` | +| `/nft/items/evm/contract/:contract/token_id/:token_id` | `/v1/evm/nft/items` | +| `/nft/holders/evm/:contract` | `/v1/evm/nft/holders` | +| `/nft/activities/evm` | `/v1/evm/nft/transfers` | +| `/nft/sales/evm` | `/v1/evm/nft/sales` | + +**Important:** The NFT endpoint `/nft/activities` has been renamed to `/v1/evm/nft/transfers` to better reflect its purpose. + +**Important:** The EVM Token OHLCV Data endpoint `/ohlc/prices/evm/{contract}` has been removed. You can use `/v1/evm/pools` to find stablecoin pairs for your contract and `/v1/evm/pools/ohlc` for OHLCV data for that pair. + +--- + +#### 2.2 New EVM native balances endpoint + +Native balances for EVM chains can be found under `/v1/evm/balances/native`. They will not show up in the `/v1/evm/balances` endpoint. + +Other endpoints can still use native token under the `0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee` contract. + +--- + +#### 2.3 SVM Endpoints + +Consolidated under `/v1/svm/*` + +| Old Endpoint | New Endpoint | +| ------------------------ | ------------------------- | +| `/balances/svm` | `/v1/svm/balances` | +| `/balances/native/svm` | `/v1/svm/balances/native` | +| `/holders/svm/:contract` | `/v1/svm/holders` | +| `/tokens/svm/:mint` | `/v1/svm/tokens` | +| `/transfers/svm` | `/v1/svm/transfers` | +| `/pools/svm` | `/v1/svm/pools` | +| `/swaps/svm` | `/v1/svm/swaps` | +| `/dexes/svm` | `/v1/svm/dexes` | +| `/owner/svm/:account` | `/v1/svm/owner` | +| `/ohlc/pools/svm/:pool` | `/v1/svm/pools/ohlc` | + +## 📝 Parameter Changes + +### 3. Path Parameters → Query Parameters + +All path parameters have been moved to query parameters. + +**Before:** + +```bash +GET /balances/evm/:address +GET /holders/evm/:contract +GET /nft/items/evm/contract/:contract/token_id/:token_id +``` + +**After:** + +```bash +GET /v1/evm/balances?network=mainnet&address=0x... +GET /v1/evm/holders?network=mainnet&contract=0x... +GET /v1/evm/nft/items?network=mainnet&contract=0x...&token_id=5712 +``` + +### 4. Standardized Parameter Naming + +All query parameters have been standardized to use snake_case naming convention. + +| Old Parameter | New Parameter | Notes | +| --- | --- | --- | +| `network_id` | `network` | Renamed, `matic` has also been renamed to `polygon` | +| `anyAddress` | `address` | Matches either `from` or `to` address | +| `from`, `fromAddress`, `offererAddress` | `from_address`, `offerer` | - | +| `to`, `toAddress`, `recipientAddress` | `to_address`, `recipient` | - | +| `startTime` | `start_time` | Default: `1735689600` (`2025-01-01`) | +| `endTime` | `end_time` | Default: `9999999999` | +| - | `start_block` | New parameter, default: `0` | +| - | `end_block` | New parameter, default: `9999999999` | +| - | `include_null_balances` | New parameter, default: `false` | +| `tx_hash` | `transaction_id` | - | +| `token` | `input_token`, `output_token` | More explicit for pool queries | +| `pool` | `amm_pool` | - | +| `orderBy`, `orderDirection` | _(removed)_ | Always sorted by most recent timestamp first | + +**Important:** The `network_id` parameter has been renamed to `network`. + +**Important:** `matic` network has been renamed to `polygon`. + +### 5. Batched Parameters + +Many parameters now support batching - accepting single values or comma-separated strings. + +**Supported Batched Parameters:** + +- `address`, `from_address`, `to_address` +- `contract`, `token_id` +- `factory`, `pool` +- `owner`, `token_account`, `mint` +- `transaction_id`, `signature` + +**Examples:** + +```console +## Single value +?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 + +## Comma-separated, single parameter +?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 + +## Repeated parameter values +?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&contract=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 +``` + +### 6. New Parameters + +#### `include_null_balances` + +Added to balance endpoints to optionally include zero/null balances. + +```bash +?include_null_balances=true +``` + +**Default:** `false` + +## 🔄 Response Changes + +### 7. Pagination Changes + +Pagination responses have been simplified. The API no longer computes total result counts due to performance and accuracy considerations when working with ClickHouse views and materialized tables. + +**Before:** + +```json +{ + "pagination": { + "previous_page": 1, + "current_page": 2, + "next_page": 3, + "total_pages": 10 + }, + "total_results": 1234 +} +``` + +**After:** + +```json +{ + "pagination": { + "previous_page": 1, + "current_page": 2 + } +} +``` + +**Removed fields:** + +- `next_page` +- `total_pages` +- `total_results` + +**Important:** To retrieve all results, continue incrementing the `page` parameter until the API returns an empty `data` array. This indicates you've reached the end of the results. + +### 8. Removed Parameters + +The following deprecated parameters have been removed: + +- `orderBy` - Results are now ordered by timestamp/block by default +- `orderDirection` - Always descending (newest first) + +### 9. Cached Queries + +Queries are now cached on the ClickHouse side for better performance. + +You can specifically request to not use the cache by setting the `Cache-Control` header to `no-cache`. + +#### Example + +**Cache** + +```console +$ curl -s 'https://token-api.thegraph.com/v1/...' | jq .statistics +{ + "bytes_read": 221, + "rows_read": 1, + "elapsed": 0.002212065 +} +``` + +**No cache** + +```console +$ curl -s 'http://localhost:8000/v1/...' --header 'Cache-Control: no-cache' | jq .statistics +{ + "bytes_read": 14621174348, + "rows_read": 223244390, + "elapsed": 0.971064066 +} +``` + +## 📚 Example Migrations + +### Example 1: Get Token Balances + +**Before:** + +```bash +GET /token/balances/evm/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045?network_id=mainnet&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 +``` + +**After:** + +```bash +GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 +``` + +### Example 2: Get NFT Items + +**Before:** + +```bash +GET /nft/items/evm/contract/0xbd3531da5cf5857e7cfaa92426877b022e612cf8/token_id/5712?network_id=mainnet +``` + +**After:** + +```bash +GET /v1/evm/nft/items?network=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&token_id=5712 +``` + +### Example 3: Get Token Transfers with Time Filter + +**Before:** + +```bash +GET /token/transfers/evm?network_id=mainnet&from=0xd8da6bf26964af9d7eed9e03e53415d37aa96045&startTime=1735689600&endTime=1767225600 +``` + +**After:** + +```bash +GET /v1/evm/transfers?network=mainnet&from_address=0xd8da6bf26964af9d7eed9e03e53415d37aa96045&start_time=1735689600&end_time=1767225600 +``` + +### Example 4: Get NFT Transfer Activities + +**Before:** + +```bash +GET /nft/activities/evm?network_id=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&anyAddress=0xd8da6bf26964af9d7eed9e03e53415d37aa96045 +``` + +**After:** + +```bash +GET /v1/evm/nft/transfers?network=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&address=0xd8da6bf26964af9d7eed9e03e53415d37aa96045 +``` + +### Example 5: Get Pool OHLC Data + +**Before:** + +```bash +GET /token/ohlc/pools/evm/0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640?network_id=mainnet&interval=1h&startTime=1735689600 +``` + +**After:** + +```bash +GET /v1/evm/pools/ohlc?network=mainnet&pool=0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640&interval=1h&start_time=1735689600 +``` + +### Example 6: Batched Query (New Feature) + +Query balances for multiple contracts in a single request: + +```bash +GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 +``` + +Query transfers from multiple addresses: + +```bash +GET /v1/evm/transfers?network=mainnet&from_address=0xabc...,0xdef...,0x123...&start_time=1735689600 +``` + +## ⚠️ Important Notes + +1. **Migration Notes:** The old endpoints were deprecated and removed on **October 30, 2025**. Please ensure all integrations have been migrated to the new Token API v1 endpoints. + +2. **Default Sorting:** All results are now sorted by timestamp (descending) by default. Custom sorting is no longer supported. + +3. **Pagination:** Continue paging through results by incrementing the `page` parameter until you receive an empty `data` array. The API no longer provides total counts due to performance optimizations with ClickHouse. + +4. **Time Defaults:** If you previously relied on fetching all historical data without time filters, note that `start_time` now defaults to `2025-01-01`. Adjust accordingly if you need earlier data. diff --git a/website/src/pages/ja/token-api/upgrade-to-v1.mdx b/website/src/pages/ja/token-api/upgrade-to-v1.mdx deleted file mode 100644 index fbe09101eaa5..000000000000 --- a/website/src/pages/ja/token-api/upgrade-to-v1.mdx +++ /dev/null @@ -1,254 +0,0 @@ ---- -title: Upgrade to v1 ---- - -This guide covers the migration from the legacy API structure to the new v1 API. The refactoring introduces versioned endpoints, standardized query parameters, improved batching support, and consistent naming conventions. - -**Note** - -- `EVM` = Ethereum Virtual Machine - -Used to describe endpoints supporting EVM-based chains (e.g. `base`, `bsc`, `mainnet`, ...). - -- `SVM` = Solana Virtual Machine - -Used to describe endpoints supporting Solana (currently the only SVM chain supported). - -## 🔑 Breaking Changes Summary - -### 1. **API Versioning** - -All endpoints now use the `/v1` prefix. - -**Before:** - -``` -GET /balances/evm -GET /nft/items/contract/:contract/token_id/:token_id -``` - -**After:** - -``` -GET /v1/evm/balances -GET /v1/evm/nft/items -``` - -### 2. **Route Structure Reorganization** - -#### 2.1 EVM Endpoints - -Consolidated under `/v1/evm/*` - -| Old Endpoint | New Endpoint | -| ------------------------------------------------------ | ----------------------------- | -| `/balances/evm` | `/v1/evm/balances` | -| `/historical/balances/evm` | `/v1/evm/balances/historical` | -| `/holders/evm/:contract` | `/v1/evm/holders` | -| `/tokens/evm/:contract` | `/v1/evm/tokens` | -| `/transfers/evm` | `/v1/evm/transfers` | -| `/pools/evm` | `/v1/evm/pools` | -| `/swaps/evm` | `/v1/evm/swaps` | -| `/dexes/evm` | `/v1/evm/dexes` | -| `/ohlc/prices/evm/:contract` | _(removed)_ | -| `/ohlc/pools/evm/:pool` | `/v1/evm/pools/ohlc` | -| `/nft/ownerships/evm/:address` | `/v1/evm/nft/ownerships` | -| `/nft/collections/evm/:contract` | `/v1/evm/nft/collections` | -| `/nft/items/evm/contract/:contract/token_id/:token_id` | `/v1/evm/nft/items` | -| `/nft/holders/evm/:contract` | `/v1/evm/nft/holders` | -| `/nft/activities/evm` | `/v1/evm/nft/transfers` | -| `/nft/sales/evm` | `/v1/evm/nft/sales` | - -**Important:** The NFT endpoint `/nft/activities` has been renamed to `/v1/evm/nft/transfers` to better reflect its purpose. - -**Important:** The EVM Token OHLCV Data endpoint `/ohlc/prices/evm/{contract}` has been removed. You can use `/v1/evm/pools` to find stablecoin pairs for your contract and `/v1/evm/pools/ohlc` for OHLCV data for that pair. - ---- - -#### 2.2 New EVM native balances endpoint - -Native balances for EVM chains can be found under `/v1/evm/balances/native`. They will not show up in the `/v1/evm/balances` endpoint. - -Other endpoints can still use native token under the `0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee` contract. - ---- - -#### 2.3 SVM Endpoints - -Consolidated under `/v1/svm/*` - -| Old Endpoint | New Endpoint | -| ------------------------ | ------------------------- | -| `/balances/svm` | `/v1/svm/balances` | -| `/balances/native/svm` | `/v1/svm/balances/native` | -| `/holders/svm/:contract` | `/v1/svm/holders` | -| `/tokens/svm/:mint` | `/v1/svm/tokens` | -| `/transfers/svm` | `/v1/svm/transfers` | -| `/pools/svm` | `/v1/svm/pools` | -| `/swaps/svm` | `/v1/svm/swaps` | -| `/dexes/svm` | `/v1/svm/dexes` | -| `/owner/svm/:account` | `/v1/svm/owner` | -| `/ohlc/pools/svm/:pool` | `/v1/svm/pools/ohlc` | - -## 📝 Parameter Changes - -### 3. **Path Parameters → Query Parameters** - -All path parameters have been moved to query parameters. - -**Before:** - -```bash -GET /balances/evm/:address -GET /holders/evm/:contract -GET /nft/items/evm/contract/:contract/token_id/:token_id -``` - -**After:** - -```bash -GET /v1/evm/balances?network=mainnet&address=0x... -GET /v1/evm/holders?network=mainnet&contract=0x... -GET /v1/evm/nft/items?network=mainnet&contract=0x...&token_id=5712 -``` - -### 4. **Standardized Parameter Naming** - -All query parameters have been standardized to use snake_case naming convention. - -| Old Parameter | New Parameter | Notes | -| --- | --- | --- | -| `network_id` | `network` | Renamed, `matic` has also been renamed to `polygon` | -| `anyAddress` | `address` | Matches either `from` or `to` address | -| `from`, `fromAddress`, `offererAddress` | `from_address`, `offerer` | - | -| `to`, `toAddress`, `recipientAddress` | `to_address`, `recipient` | - | -| `startTime` | `start_time` | Default: `1735689600` (`2025-01-01`) | -| `endTime` | `end_time` | Default: `9999999999` | -| - | `start_block` | New parameter, default: `0` | -| - | `end_block` | New parameter, default: `9999999999` | -| - | `include_null_balances` | New parameter, default: `false` | -| `tx_hash` | `transaction_id` | - | -| `token` | `input_token`, `output_token` | More explicit for pool queries | -| `pool` | `amm_pool` | - | -| `orderBy`, `orderDirection` | _(removed)_ | Always sorted by most recent timestamp first | - -**Important:** The `network_id` parameter has been renamed to `network`. - -**Important:** `matic` network has been renamed to `polygon`. - -### 5. **Batched Parameters** - -Many parameters now support batching - accepting single values or comma-separated strings. - -**Supported Batched Parameters:** - -- `address`, `from_address`, `to_address` -- `contract`, `token_id` -- `factory`, `pool` -- `owner`, `token_account`, `mint` -- `transaction_id`, `signature` - -**Examples:** - -```console -# Single value -?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 - -# Comma-separated, single parameter -?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 - -# Repeated parameter values -?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&contract=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 -``` - -### 6. **New Parameters** - -#### `include_null_balances` - -Added to balance endpoints to optionally include zero/null balances. - -```bash -?include_null_balances=true -``` - -**Default:** `false` - -## 🔄 Response Changes - -### 7. **Pagination Changes** - -Pagination responses have been simplified. The API no longer computes total result counts due to performance and accuracy considerations when working with ClickHouse views and materialized tables. - -**Before:** - -```json -{ - "pagination": { - "previous_page": 1, - "current_page": 2, - "next_page": 3, - "total_pages": 10 - }, - "total_results": 1234 -} -``` - -**After:** - -```json -{ - "pagination": { - "previous_page": 1, - "current_page": 2 - } -} -``` - -**Removed fields:** - -- `next_page` -- `total_pages` -- `total_results` - -**Important:** To retrieve all results, continue incrementing the `page` parameter until the API returns an empty `data` array. This indicates you've reached the end of the results. - -### 8. **Removed Parameters** - -The following deprecated parameters have been removed: - -- `orderBy` - Results are now ordered by timestamp/block by default -- `orderDirection` - Always descending (newest first) - -## 📚 Example Migrations - -### Old vs New: Get Token Balances - -**Before:** - -```bash -GET /balances/evm/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045?network_id=mainnet&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 -``` - -**After:** - -```bash -GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 -``` - -### New Feature: Batched Queries - -Query balances for multiple contracts in a single request: - -```bash -GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 -``` - -## ⚠️ Important Notes - -1. **Backward Compatibility:** The old endpoints are deprecated and will be removed in the future. Migrate by **Oct 30, 2025**. - -2. **Default Sorting:** All results are now sorted by timestamp (descending) by default. Custom sorting is no longer supported. - -3. **Pagination:** Continue paging through results by incrementing the `page` parameter until you receive an empty `data` array. The API no longer provides total counts due to performance optimizations with ClickHouse. - -4. **Time Defaults:** If you previously relied on fetching all historical data without time filters, note that `start_time` now defaults to `2025-01-01`. Adjust accordingly if you need earlier data. diff --git a/website/src/pages/ko/index.json b/website/src/pages/ko/index.json index a28226c30dd8..848621e5f458 100644 --- a/website/src/pages/ko/index.json +++ b/website/src/pages/ko/index.json @@ -2,7 +2,7 @@ "title": "Home", "hero": { "title": "The Graph Docs", - "description": "The Graph is a blockchain data solution that powers applications, analytics, and AI on 90+ chains. The Graph's core products include the Token API for web3 apps, Subgraphs for indexing smart contracts, and Substreams for real-time and historical data streaming.", + "description": "The Graph is a blockchain data solution that powers applications, analytics, and AI on 80+ chains. The Graph's core products include the Token API for web3 apps, Subgraphs for indexing smart contracts, and Substreams for real-time and historical data streaming.", "cta1": "How The Graph works", "cta2": "Build your first subgraph" }, diff --git a/website/src/pages/ko/subgraphs/guides/_meta.js b/website/src/pages/ko/subgraphs/guides/_meta.js index fd5608dcceb2..1c081848ea08 100644 --- a/website/src/pages/ko/subgraphs/guides/_meta.js +++ b/website/src/pages/ko/subgraphs/guides/_meta.js @@ -2,7 +2,6 @@ export default { 'subgraph-composition': '', 'subgraph-debug-forking': '', near: '', - grafting: '', 'subgraph-uncrashable': '', 'transfer-to-the-graph': '', diff --git a/website/src/pages/ko/token-api/_meta.js b/website/src/pages/ko/token-api/_meta.js index a8624da52e7f..9588f70cec53 100644 --- a/website/src/pages/ko/token-api/_meta.js +++ b/website/src/pages/ko/token-api/_meta.js @@ -11,6 +11,6 @@ export default { 'tvm-dexs': titles['tvm-dexs'] ?? '', monitoring: titles['monitoring'] ?? '', 'endpoint-pricing': '', + guides: titles['guides'] ?? '', faq: '', - 'upgrade-to-v1': '', } diff --git a/website/src/pages/ko/token-api/guides/_meta-titles.json b/website/src/pages/ko/token-api/guides/_meta-titles.json new file mode 100644 index 000000000000..cd93dcc0fc0b --- /dev/null +++ b/website/src/pages/ko/token-api/guides/_meta-titles.json @@ -0,0 +1,4 @@ +{ + "gpt": "Create Custom GPTS", + "upgrade-to-v1": "" +} diff --git a/website/src/pages/ko/token-api/guides/_meta.js b/website/src/pages/ko/token-api/guides/_meta.js new file mode 100644 index 000000000000..e5aaaadd78f2 --- /dev/null +++ b/website/src/pages/ko/token-api/guides/_meta.js @@ -0,0 +1,4 @@ +export default { + gpt: '', + 'upgrade-to-v1': '', +} diff --git a/website/src/pages/ko/token-api/guides/gpt.mdx b/website/src/pages/ko/token-api/guides/gpt.mdx new file mode 100644 index 000000000000..564d013dea20 --- /dev/null +++ b/website/src/pages/ko/token-api/guides/gpt.mdx @@ -0,0 +1,121 @@ +--- +title: How the Token API Powers Custom GPTs +sidebarTitle: Create Custom GPTs +--- + +## Overview + +The Token API is a pre-indexed blockchain data service that provides real-time access to token balances, metadata, prices, liquidity, and volume across multiple chains. Developers use its REST endpoints to build wallets, trading dashboards, DeFi analytics, and AI systems without maintaining their own indexing stack. Custom GPTs can connect directly to the Token API's OpenAPI schema. + +The Token API enables developers to build **Custom GPTs** to reason over live blockchain data inside ChatGPT that can reason over and respond with live blockchain data directly inside ChatGPT. + +## What the Token API Enables in Custom GPTs + +When a Custom GPT is wired to the Token API, it gains access to a machine-readable schema and authenticated endpoints. Developers can use this to: + +- **Query real-time onchain data**: Balances, token prices, liquidity, and transaction history. +- **Automate domain-specific tasks**: Portfolio tracking, accounting, reconciliation, and market analysis. +- **Power AI agents with verifiable blockchain context**: Use the same data sources dapps rely on. + +Because the Token API provides a machine-readable schema and authenticated requests, it serves as a structured data layer that enables GPT-5 agents to combine natural language reasoning with live onchain data from The Graph. + +## When to Use the Token API for Custom GPTs + +Use the Token API when your GPT needs repeatable, domain-specific behavior grounded in blockchain data. This is most effective when the GPT performs the same type of task frequently or enforces a workflow you define. For one-off or exploratory questions, standard ChatGPT prompts are sufficient. + +## Choosing a Use Case + +Start with a clear, narrow objective, then expand as needed. Common patterns include: + +- **Accounting GPT**: Onchain accounting, tax tagging, and portfolio reconciliation. +- **Trading GPT**: Liquidity, pricing, and volume analysis for trading strategies. +- **Protocol Tracking GPT**: Real-time monitoring of transaction activity and liquidity pools. + +A focused initial goal such as “Retrieve token balances and prices for a wallet” makes it easier to configure reliable behavior before adding complex workflows. + +## Requirements + +| Requirement | Description | +| ---------------------- | -------------------------------------------------------- | +| ChatGPT 5 | Custom GPT creation requires GPT-5 tier or Pro. | +| Token API Subscription | Sign up at [The Graph Market](https://thegraph.market./) | +| Token API Key | Available in your dashboard as the Authentication JWT. | + +## Setting Up a Custom GPT + +Below is an explanatory outline of what happens during setup. This section provides conceptual understanding. + +### Create Custom GPT + +1. Visit chat.openai.com/gpts in your browser. 2, Click Create (top right). +2. Under Configure (in the top left panel), set up your GPT's personality and scope. + +### Configure Your GPT + +You define the GPT's role, scope, and metadata so it knows what it is designed to do. This includes: + +- **Name and Description**: Helps users discover your GPT. + - For example: **Name**: Token Tracker GPT **Description**: An onchain analytics assistant that retrieves live token balances, prices, and liquidity data using The Graph's Token API. +- **Instructions**: Tells the GPT what tasks it should perform using the Token API. + - For example: You are a blockchain data assistant retrieving onchain token data from The Graph's Token API. Use endpoints to fetch balances, liquidity, and price history across EVM chains. Present results in tables with token symbols, prices, and USD values. +- **Knowledge**: Optional context files such as wallet references, accounting rules, or code snippets. +- **New Action**: At the bottom, click “Create new action” to connect your GPT to the Token API. + +### Connect the Token API + +To enable live blockchain queries inside ChatGPT, you connect the GPT to the Token API through: + +#### Authentication + +1. Set Authentication to API Key → Bearer. +2. Open [The Graph Market](https://thegraph.market./) and copy your Authentication JWT from your dashboard. +3. Paste the token into the ChatGPT prompt where the field shows [HIDDEN]. + +#### Schema + +1. Above the Schema box, click Import from URL. +2. Paste: https://token-api.thegraph.com/openapi +3. Click Import. You'll now see endpoints like: + - `getV1EvmTokens` + - `getV1EvmDexes` + - `getV1EvmBalances` +4. Click Test on one (for example `getV1EvmDexes`) to verify connection. + +##### Privacy + +1. At the bottom, under Privacy, paste: https://pinax.network/en/legal/privacy + +### Privacy + +You can attach a privacy policy URL such as: https://pinax.network/en/legal/privacy + +## Example Prompt Patterns + +These examples help illustrate how a GPT reasons over Token API data. + +### Wallet and Portfolio + +Get the total USD balance for a wallet across multiple chains, returning token name, symbol, balance, and price. + +### Trading Analysis + +Compare USDC and DAI liquidity across Uniswap and Curve. Return the top 5 pools by TVL. + +### Accounting + +List all ERC-20 transfers for this address in the last 30 days. Group by token and total incoming/outgoing volume. + +## Best Practices + +| Tip | Why It Matters | +| --------------------------------- | ---------------------------------------------------------------------- | +| Scope your GPT narrowly first | Simplifies debugging and validates schema integration. | +| Use clear role instructions | Helps the GPT choose the right endpoints and avoid assumptions. | +| Name endpoints explicitly | Improves routing accuracy when fetching balances, prices, or DEX data. | +| Combine with code | Enables custom parsing or logic for complex workflows. | +| Add Subgraph or Substream context | Provides richer analytics when combined with Token API data. | + +## FAQs & Resources + +- Builders Office Hours (October 23, 2025) +- Watch the full session: https://x.com/i/broadcasts/1mrGmBzBarNJy diff --git a/website/src/pages/ko/token-api/guides/upgrade-to-v1.mdx b/website/src/pages/ko/token-api/guides/upgrade-to-v1.mdx new file mode 100644 index 000000000000..e2a7ccf973fa --- /dev/null +++ b/website/src/pages/ko/token-api/guides/upgrade-to-v1.mdx @@ -0,0 +1,346 @@ +--- +title: Upgrade to v1 +--- + +This guide covers the migration from the legacy API structure to the new v1 API. The refactoring introduces versioned endpoints, standardized query parameters, improved batching support, and consistent naming conventions. + +**Note** + +- `EVM` = Ethereum Virtual Machine + +Used to describe endpoints supporting EVM-based chains (e.g. `base`, `bsc`, `mainnet`, ...). + +- `SVM` = Solana Virtual Machine + +Used to describe endpoints supporting Solana (currently the only SVM chain supported). + +## 🔑 Breaking Changes Summary + +### 1. API Versioning + +All endpoints now use the `/v1` prefix. + +**Before:** + +``` +GET /balances/evm +GET /nft/items/contract/:contract/token_id/:token_id +``` + +**After:** + +``` +GET /v1/evm/balances +GET /v1/evm/nft/items +``` + +### 2. Route Structure Reorganization + +#### 2.1 EVM Endpoints + +Consolidated under `/v1/evm/*` + +| Old Endpoint | New Endpoint | +| ------------------------------------------------------ | ----------------------------- | +| `/balances/evm` | `/v1/evm/balances` | +| `/historical/balances/evm` | `/v1/evm/balances/historical` | +| `/holders/evm/:contract` | `/v1/evm/holders` | +| `/tokens/evm/:contract` | `/v1/evm/tokens` | +| `/transfers/evm` | `/v1/evm/transfers` | +| `/pools/evm` | `/v1/evm/pools` | +| `/swaps/evm` | `/v1/evm/swaps` | +| `/dexes/evm` | `/v1/evm/dexes` | +| `/ohlc/prices/evm/:contract` | _(removed)_ | +| `/ohlc/pools/evm/:pool` | `/v1/evm/pools/ohlc` | +| `/nft/ownerships/evm/:address` | `/v1/evm/nft/ownerships` | +| `/nft/collections/evm/:contract` | `/v1/evm/nft/collections` | +| `/nft/items/evm/contract/:contract/token_id/:token_id` | `/v1/evm/nft/items` | +| `/nft/holders/evm/:contract` | `/v1/evm/nft/holders` | +| `/nft/activities/evm` | `/v1/evm/nft/transfers` | +| `/nft/sales/evm` | `/v1/evm/nft/sales` | + +**Important:** The NFT endpoint `/nft/activities` has been renamed to `/v1/evm/nft/transfers` to better reflect its purpose. + +**Important:** The EVM Token OHLCV Data endpoint `/ohlc/prices/evm/{contract}` has been removed. You can use `/v1/evm/pools` to find stablecoin pairs for your contract and `/v1/evm/pools/ohlc` for OHLCV data for that pair. + +--- + +#### 2.2 New EVM native balances endpoint + +Native balances for EVM chains can be found under `/v1/evm/balances/native`. They will not show up in the `/v1/evm/balances` endpoint. + +Other endpoints can still use native token under the `0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee` contract. + +--- + +#### 2.3 SVM Endpoints + +Consolidated under `/v1/svm/*` + +| Old Endpoint | New Endpoint | +| ------------------------ | ------------------------- | +| `/balances/svm` | `/v1/svm/balances` | +| `/balances/native/svm` | `/v1/svm/balances/native` | +| `/holders/svm/:contract` | `/v1/svm/holders` | +| `/tokens/svm/:mint` | `/v1/svm/tokens` | +| `/transfers/svm` | `/v1/svm/transfers` | +| `/pools/svm` | `/v1/svm/pools` | +| `/swaps/svm` | `/v1/svm/swaps` | +| `/dexes/svm` | `/v1/svm/dexes` | +| `/owner/svm/:account` | `/v1/svm/owner` | +| `/ohlc/pools/svm/:pool` | `/v1/svm/pools/ohlc` | + +## 📝 Parameter Changes + +### 3. Path Parameters → Query Parameters + +All path parameters have been moved to query parameters. + +**Before:** + +```bash +GET /balances/evm/:address +GET /holders/evm/:contract +GET /nft/items/evm/contract/:contract/token_id/:token_id +``` + +**After:** + +```bash +GET /v1/evm/balances?network=mainnet&address=0x... +GET /v1/evm/holders?network=mainnet&contract=0x... +GET /v1/evm/nft/items?network=mainnet&contract=0x...&token_id=5712 +``` + +### 4. Standardized Parameter Naming + +All query parameters have been standardized to use snake_case naming convention. + +| Old Parameter | New Parameter | Notes | +| --- | --- | --- | +| `network_id` | `network` | Renamed, `matic` has also been renamed to `polygon` | +| `anyAddress` | `address` | Matches either `from` or `to` address | +| `from`, `fromAddress`, `offererAddress` | `from_address`, `offerer` | - | +| `to`, `toAddress`, `recipientAddress` | `to_address`, `recipient` | - | +| `startTime` | `start_time` | Default: `1735689600` (`2025-01-01`) | +| `endTime` | `end_time` | Default: `9999999999` | +| - | `start_block` | New parameter, default: `0` | +| - | `end_block` | New parameter, default: `9999999999` | +| - | `include_null_balances` | New parameter, default: `false` | +| `tx_hash` | `transaction_id` | - | +| `token` | `input_token`, `output_token` | More explicit for pool queries | +| `pool` | `amm_pool` | - | +| `orderBy`, `orderDirection` | _(removed)_ | Always sorted by most recent timestamp first | + +**Important:** The `network_id` parameter has been renamed to `network`. + +**Important:** `matic` network has been renamed to `polygon`. + +### 5. Batched Parameters + +Many parameters now support batching - accepting single values or comma-separated strings. + +**Supported Batched Parameters:** + +- `address`, `from_address`, `to_address` +- `contract`, `token_id` +- `factory`, `pool` +- `owner`, `token_account`, `mint` +- `transaction_id`, `signature` + +**Examples:** + +```console +## Single value +?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 + +## Comma-separated, single parameter +?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 + +## Repeated parameter values +?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&contract=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 +``` + +### 6. New Parameters + +#### `include_null_balances` + +Added to balance endpoints to optionally include zero/null balances. + +```bash +?include_null_balances=true +``` + +**Default:** `false` + +## 🔄 Response Changes + +### 7. Pagination Changes + +Pagination responses have been simplified. The API no longer computes total result counts due to performance and accuracy considerations when working with ClickHouse views and materialized tables. + +**Before:** + +```json +{ + "pagination": { + "previous_page": 1, + "current_page": 2, + "next_page": 3, + "total_pages": 10 + }, + "total_results": 1234 +} +``` + +**After:** + +```json +{ + "pagination": { + "previous_page": 1, + "current_page": 2 + } +} +``` + +**Removed fields:** + +- `next_page` +- `total_pages` +- `total_results` + +**Important:** To retrieve all results, continue incrementing the `page` parameter until the API returns an empty `data` array. This indicates you've reached the end of the results. + +### 8. Removed Parameters + +The following deprecated parameters have been removed: + +- `orderBy` - Results are now ordered by timestamp/block by default +- `orderDirection` - Always descending (newest first) + +### 9. Cached Queries + +Queries are now cached on the ClickHouse side for better performance. + +You can specifically request to not use the cache by setting the `Cache-Control` header to `no-cache`. + +#### Example + +**Cache** + +```console +$ curl -s 'https://token-api.thegraph.com/v1/...' | jq .statistics +{ + "bytes_read": 221, + "rows_read": 1, + "elapsed": 0.002212065 +} +``` + +**No cache** + +```console +$ curl -s 'http://localhost:8000/v1/...' --header 'Cache-Control: no-cache' | jq .statistics +{ + "bytes_read": 14621174348, + "rows_read": 223244390, + "elapsed": 0.971064066 +} +``` + +## 📚 Example Migrations + +### Example 1: Get Token Balances + +**Before:** + +```bash +GET /token/balances/evm/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045?network_id=mainnet&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 +``` + +**After:** + +```bash +GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 +``` + +### Example 2: Get NFT Items + +**Before:** + +```bash +GET /nft/items/evm/contract/0xbd3531da5cf5857e7cfaa92426877b022e612cf8/token_id/5712?network_id=mainnet +``` + +**After:** + +```bash +GET /v1/evm/nft/items?network=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&token_id=5712 +``` + +### Example 3: Get Token Transfers with Time Filter + +**Before:** + +```bash +GET /token/transfers/evm?network_id=mainnet&from=0xd8da6bf26964af9d7eed9e03e53415d37aa96045&startTime=1735689600&endTime=1767225600 +``` + +**After:** + +```bash +GET /v1/evm/transfers?network=mainnet&from_address=0xd8da6bf26964af9d7eed9e03e53415d37aa96045&start_time=1735689600&end_time=1767225600 +``` + +### Example 4: Get NFT Transfer Activities + +**Before:** + +```bash +GET /nft/activities/evm?network_id=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&anyAddress=0xd8da6bf26964af9d7eed9e03e53415d37aa96045 +``` + +**After:** + +```bash +GET /v1/evm/nft/transfers?network=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&address=0xd8da6bf26964af9d7eed9e03e53415d37aa96045 +``` + +### Example 5: Get Pool OHLC Data + +**Before:** + +```bash +GET /token/ohlc/pools/evm/0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640?network_id=mainnet&interval=1h&startTime=1735689600 +``` + +**After:** + +```bash +GET /v1/evm/pools/ohlc?network=mainnet&pool=0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640&interval=1h&start_time=1735689600 +``` + +### Example 6: Batched Query (New Feature) + +Query balances for multiple contracts in a single request: + +```bash +GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 +``` + +Query transfers from multiple addresses: + +```bash +GET /v1/evm/transfers?network=mainnet&from_address=0xabc...,0xdef...,0x123...&start_time=1735689600 +``` + +## ⚠️ Important Notes + +1. **Migration Notes:** The old endpoints were deprecated and removed on **October 30, 2025**. Please ensure all integrations have been migrated to the new Token API v1 endpoints. + +2. **Default Sorting:** All results are now sorted by timestamp (descending) by default. Custom sorting is no longer supported. + +3. **Pagination:** Continue paging through results by incrementing the `page` parameter until you receive an empty `data` array. The API no longer provides total counts due to performance optimizations with ClickHouse. + +4. **Time Defaults:** If you previously relied on fetching all historical data without time filters, note that `start_time` now defaults to `2025-01-01`. Adjust accordingly if you need earlier data. diff --git a/website/src/pages/ko/token-api/upgrade-to-v1.mdx b/website/src/pages/ko/token-api/upgrade-to-v1.mdx deleted file mode 100644 index fbe09101eaa5..000000000000 --- a/website/src/pages/ko/token-api/upgrade-to-v1.mdx +++ /dev/null @@ -1,254 +0,0 @@ ---- -title: Upgrade to v1 ---- - -This guide covers the migration from the legacy API structure to the new v1 API. The refactoring introduces versioned endpoints, standardized query parameters, improved batching support, and consistent naming conventions. - -**Note** - -- `EVM` = Ethereum Virtual Machine - -Used to describe endpoints supporting EVM-based chains (e.g. `base`, `bsc`, `mainnet`, ...). - -- `SVM` = Solana Virtual Machine - -Used to describe endpoints supporting Solana (currently the only SVM chain supported). - -## 🔑 Breaking Changes Summary - -### 1. **API Versioning** - -All endpoints now use the `/v1` prefix. - -**Before:** - -``` -GET /balances/evm -GET /nft/items/contract/:contract/token_id/:token_id -``` - -**After:** - -``` -GET /v1/evm/balances -GET /v1/evm/nft/items -``` - -### 2. **Route Structure Reorganization** - -#### 2.1 EVM Endpoints - -Consolidated under `/v1/evm/*` - -| Old Endpoint | New Endpoint | -| ------------------------------------------------------ | ----------------------------- | -| `/balances/evm` | `/v1/evm/balances` | -| `/historical/balances/evm` | `/v1/evm/balances/historical` | -| `/holders/evm/:contract` | `/v1/evm/holders` | -| `/tokens/evm/:contract` | `/v1/evm/tokens` | -| `/transfers/evm` | `/v1/evm/transfers` | -| `/pools/evm` | `/v1/evm/pools` | -| `/swaps/evm` | `/v1/evm/swaps` | -| `/dexes/evm` | `/v1/evm/dexes` | -| `/ohlc/prices/evm/:contract` | _(removed)_ | -| `/ohlc/pools/evm/:pool` | `/v1/evm/pools/ohlc` | -| `/nft/ownerships/evm/:address` | `/v1/evm/nft/ownerships` | -| `/nft/collections/evm/:contract` | `/v1/evm/nft/collections` | -| `/nft/items/evm/contract/:contract/token_id/:token_id` | `/v1/evm/nft/items` | -| `/nft/holders/evm/:contract` | `/v1/evm/nft/holders` | -| `/nft/activities/evm` | `/v1/evm/nft/transfers` | -| `/nft/sales/evm` | `/v1/evm/nft/sales` | - -**Important:** The NFT endpoint `/nft/activities` has been renamed to `/v1/evm/nft/transfers` to better reflect its purpose. - -**Important:** The EVM Token OHLCV Data endpoint `/ohlc/prices/evm/{contract}` has been removed. You can use `/v1/evm/pools` to find stablecoin pairs for your contract and `/v1/evm/pools/ohlc` for OHLCV data for that pair. - ---- - -#### 2.2 New EVM native balances endpoint - -Native balances for EVM chains can be found under `/v1/evm/balances/native`. They will not show up in the `/v1/evm/balances` endpoint. - -Other endpoints can still use native token under the `0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee` contract. - ---- - -#### 2.3 SVM Endpoints - -Consolidated under `/v1/svm/*` - -| Old Endpoint | New Endpoint | -| ------------------------ | ------------------------- | -| `/balances/svm` | `/v1/svm/balances` | -| `/balances/native/svm` | `/v1/svm/balances/native` | -| `/holders/svm/:contract` | `/v1/svm/holders` | -| `/tokens/svm/:mint` | `/v1/svm/tokens` | -| `/transfers/svm` | `/v1/svm/transfers` | -| `/pools/svm` | `/v1/svm/pools` | -| `/swaps/svm` | `/v1/svm/swaps` | -| `/dexes/svm` | `/v1/svm/dexes` | -| `/owner/svm/:account` | `/v1/svm/owner` | -| `/ohlc/pools/svm/:pool` | `/v1/svm/pools/ohlc` | - -## 📝 Parameter Changes - -### 3. **Path Parameters → Query Parameters** - -All path parameters have been moved to query parameters. - -**Before:** - -```bash -GET /balances/evm/:address -GET /holders/evm/:contract -GET /nft/items/evm/contract/:contract/token_id/:token_id -``` - -**After:** - -```bash -GET /v1/evm/balances?network=mainnet&address=0x... -GET /v1/evm/holders?network=mainnet&contract=0x... -GET /v1/evm/nft/items?network=mainnet&contract=0x...&token_id=5712 -``` - -### 4. **Standardized Parameter Naming** - -All query parameters have been standardized to use snake_case naming convention. - -| Old Parameter | New Parameter | Notes | -| --- | --- | --- | -| `network_id` | `network` | Renamed, `matic` has also been renamed to `polygon` | -| `anyAddress` | `address` | Matches either `from` or `to` address | -| `from`, `fromAddress`, `offererAddress` | `from_address`, `offerer` | - | -| `to`, `toAddress`, `recipientAddress` | `to_address`, `recipient` | - | -| `startTime` | `start_time` | Default: `1735689600` (`2025-01-01`) | -| `endTime` | `end_time` | Default: `9999999999` | -| - | `start_block` | New parameter, default: `0` | -| - | `end_block` | New parameter, default: `9999999999` | -| - | `include_null_balances` | New parameter, default: `false` | -| `tx_hash` | `transaction_id` | - | -| `token` | `input_token`, `output_token` | More explicit for pool queries | -| `pool` | `amm_pool` | - | -| `orderBy`, `orderDirection` | _(removed)_ | Always sorted by most recent timestamp first | - -**Important:** The `network_id` parameter has been renamed to `network`. - -**Important:** `matic` network has been renamed to `polygon`. - -### 5. **Batched Parameters** - -Many parameters now support batching - accepting single values or comma-separated strings. - -**Supported Batched Parameters:** - -- `address`, `from_address`, `to_address` -- `contract`, `token_id` -- `factory`, `pool` -- `owner`, `token_account`, `mint` -- `transaction_id`, `signature` - -**Examples:** - -```console -# Single value -?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 - -# Comma-separated, single parameter -?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 - -# Repeated parameter values -?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&contract=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 -``` - -### 6. **New Parameters** - -#### `include_null_balances` - -Added to balance endpoints to optionally include zero/null balances. - -```bash -?include_null_balances=true -``` - -**Default:** `false` - -## 🔄 Response Changes - -### 7. **Pagination Changes** - -Pagination responses have been simplified. The API no longer computes total result counts due to performance and accuracy considerations when working with ClickHouse views and materialized tables. - -**Before:** - -```json -{ - "pagination": { - "previous_page": 1, - "current_page": 2, - "next_page": 3, - "total_pages": 10 - }, - "total_results": 1234 -} -``` - -**After:** - -```json -{ - "pagination": { - "previous_page": 1, - "current_page": 2 - } -} -``` - -**Removed fields:** - -- `next_page` -- `total_pages` -- `total_results` - -**Important:** To retrieve all results, continue incrementing the `page` parameter until the API returns an empty `data` array. This indicates you've reached the end of the results. - -### 8. **Removed Parameters** - -The following deprecated parameters have been removed: - -- `orderBy` - Results are now ordered by timestamp/block by default -- `orderDirection` - Always descending (newest first) - -## 📚 Example Migrations - -### Old vs New: Get Token Balances - -**Before:** - -```bash -GET /balances/evm/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045?network_id=mainnet&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 -``` - -**After:** - -```bash -GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 -``` - -### New Feature: Batched Queries - -Query balances for multiple contracts in a single request: - -```bash -GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 -``` - -## ⚠️ Important Notes - -1. **Backward Compatibility:** The old endpoints are deprecated and will be removed in the future. Migrate by **Oct 30, 2025**. - -2. **Default Sorting:** All results are now sorted by timestamp (descending) by default. Custom sorting is no longer supported. - -3. **Pagination:** Continue paging through results by incrementing the `page` parameter until you receive an empty `data` array. The API no longer provides total counts due to performance optimizations with ClickHouse. - -4. **Time Defaults:** If you previously relied on fetching all historical data without time filters, note that `start_time` now defaults to `2025-01-01`. Adjust accordingly if you need earlier data. diff --git a/website/src/pages/mr/index.json b/website/src/pages/mr/index.json index cd04d0600104..8a65bbfd9055 100644 --- a/website/src/pages/mr/index.json +++ b/website/src/pages/mr/index.json @@ -2,7 +2,7 @@ "title": "Home", "hero": { "title": "The Graph Docs", - "description": "The Graph is a blockchain data solution that powers applications, analytics, and AI on 90+ chains. The Graph's core products include the Token API for web3 apps, Subgraphs for indexing smart contracts, and Substreams for real-time and historical data streaming.", + "description": "The Graph is a blockchain data solution that powers applications, analytics, and AI on 80+ chains. The Graph's core products include the Token API for web3 apps, Subgraphs for indexing smart contracts, and Substreams for real-time and historical data streaming.", "cta1": "How The Graph works", "cta2": "Build your first subgraph" }, diff --git a/website/src/pages/mr/subgraphs/guides/_meta.js b/website/src/pages/mr/subgraphs/guides/_meta.js index fd5608dcceb2..1c081848ea08 100644 --- a/website/src/pages/mr/subgraphs/guides/_meta.js +++ b/website/src/pages/mr/subgraphs/guides/_meta.js @@ -2,7 +2,6 @@ export default { 'subgraph-composition': '', 'subgraph-debug-forking': '', near: '', - grafting: '', 'subgraph-uncrashable': '', 'transfer-to-the-graph': '', diff --git a/website/src/pages/mr/token-api/_meta.js b/website/src/pages/mr/token-api/_meta.js index a8624da52e7f..9588f70cec53 100644 --- a/website/src/pages/mr/token-api/_meta.js +++ b/website/src/pages/mr/token-api/_meta.js @@ -11,6 +11,6 @@ export default { 'tvm-dexs': titles['tvm-dexs'] ?? '', monitoring: titles['monitoring'] ?? '', 'endpoint-pricing': '', + guides: titles['guides'] ?? '', faq: '', - 'upgrade-to-v1': '', } diff --git a/website/src/pages/mr/token-api/guides/_meta-titles.json b/website/src/pages/mr/token-api/guides/_meta-titles.json new file mode 100644 index 000000000000..cd93dcc0fc0b --- /dev/null +++ b/website/src/pages/mr/token-api/guides/_meta-titles.json @@ -0,0 +1,4 @@ +{ + "gpt": "Create Custom GPTS", + "upgrade-to-v1": "" +} diff --git a/website/src/pages/mr/token-api/guides/_meta.js b/website/src/pages/mr/token-api/guides/_meta.js new file mode 100644 index 000000000000..e5aaaadd78f2 --- /dev/null +++ b/website/src/pages/mr/token-api/guides/_meta.js @@ -0,0 +1,4 @@ +export default { + gpt: '', + 'upgrade-to-v1': '', +} diff --git a/website/src/pages/mr/token-api/guides/gpt.mdx b/website/src/pages/mr/token-api/guides/gpt.mdx new file mode 100644 index 000000000000..564d013dea20 --- /dev/null +++ b/website/src/pages/mr/token-api/guides/gpt.mdx @@ -0,0 +1,121 @@ +--- +title: How the Token API Powers Custom GPTs +sidebarTitle: Create Custom GPTs +--- + +## Overview + +The Token API is a pre-indexed blockchain data service that provides real-time access to token balances, metadata, prices, liquidity, and volume across multiple chains. Developers use its REST endpoints to build wallets, trading dashboards, DeFi analytics, and AI systems without maintaining their own indexing stack. Custom GPTs can connect directly to the Token API's OpenAPI schema. + +The Token API enables developers to build **Custom GPTs** to reason over live blockchain data inside ChatGPT that can reason over and respond with live blockchain data directly inside ChatGPT. + +## What the Token API Enables in Custom GPTs + +When a Custom GPT is wired to the Token API, it gains access to a machine-readable schema and authenticated endpoints. Developers can use this to: + +- **Query real-time onchain data**: Balances, token prices, liquidity, and transaction history. +- **Automate domain-specific tasks**: Portfolio tracking, accounting, reconciliation, and market analysis. +- **Power AI agents with verifiable blockchain context**: Use the same data sources dapps rely on. + +Because the Token API provides a machine-readable schema and authenticated requests, it serves as a structured data layer that enables GPT-5 agents to combine natural language reasoning with live onchain data from The Graph. + +## When to Use the Token API for Custom GPTs + +Use the Token API when your GPT needs repeatable, domain-specific behavior grounded in blockchain data. This is most effective when the GPT performs the same type of task frequently or enforces a workflow you define. For one-off or exploratory questions, standard ChatGPT prompts are sufficient. + +## Choosing a Use Case + +Start with a clear, narrow objective, then expand as needed. Common patterns include: + +- **Accounting GPT**: Onchain accounting, tax tagging, and portfolio reconciliation. +- **Trading GPT**: Liquidity, pricing, and volume analysis for trading strategies. +- **Protocol Tracking GPT**: Real-time monitoring of transaction activity and liquidity pools. + +A focused initial goal such as “Retrieve token balances and prices for a wallet” makes it easier to configure reliable behavior before adding complex workflows. + +## Requirements + +| Requirement | Description | +| ---------------------- | -------------------------------------------------------- | +| ChatGPT 5 | Custom GPT creation requires GPT-5 tier or Pro. | +| Token API Subscription | Sign up at [The Graph Market](https://thegraph.market./) | +| Token API Key | Available in your dashboard as the Authentication JWT. | + +## Setting Up a Custom GPT + +Below is an explanatory outline of what happens during setup. This section provides conceptual understanding. + +### Create Custom GPT + +1. Visit chat.openai.com/gpts in your browser. 2, Click Create (top right). +2. Under Configure (in the top left panel), set up your GPT's personality and scope. + +### Configure Your GPT + +You define the GPT's role, scope, and metadata so it knows what it is designed to do. This includes: + +- **Name and Description**: Helps users discover your GPT. + - For example: **Name**: Token Tracker GPT **Description**: An onchain analytics assistant that retrieves live token balances, prices, and liquidity data using The Graph's Token API. +- **Instructions**: Tells the GPT what tasks it should perform using the Token API. + - For example: You are a blockchain data assistant retrieving onchain token data from The Graph's Token API. Use endpoints to fetch balances, liquidity, and price history across EVM chains. Present results in tables with token symbols, prices, and USD values. +- **Knowledge**: Optional context files such as wallet references, accounting rules, or code snippets. +- **New Action**: At the bottom, click “Create new action” to connect your GPT to the Token API. + +### Connect the Token API + +To enable live blockchain queries inside ChatGPT, you connect the GPT to the Token API through: + +#### Authentication + +1. Set Authentication to API Key → Bearer. +2. Open [The Graph Market](https://thegraph.market./) and copy your Authentication JWT from your dashboard. +3. Paste the token into the ChatGPT prompt where the field shows [HIDDEN]. + +#### Schema + +1. Above the Schema box, click Import from URL. +2. Paste: https://token-api.thegraph.com/openapi +3. Click Import. You'll now see endpoints like: + - `getV1EvmTokens` + - `getV1EvmDexes` + - `getV1EvmBalances` +4. Click Test on one (for example `getV1EvmDexes`) to verify connection. + +##### Privacy + +1. At the bottom, under Privacy, paste: https://pinax.network/en/legal/privacy + +### Privacy + +You can attach a privacy policy URL such as: https://pinax.network/en/legal/privacy + +## Example Prompt Patterns + +These examples help illustrate how a GPT reasons over Token API data. + +### Wallet and Portfolio + +Get the total USD balance for a wallet across multiple chains, returning token name, symbol, balance, and price. + +### Trading Analysis + +Compare USDC and DAI liquidity across Uniswap and Curve. Return the top 5 pools by TVL. + +### Accounting + +List all ERC-20 transfers for this address in the last 30 days. Group by token and total incoming/outgoing volume. + +## Best Practices + +| Tip | Why It Matters | +| --------------------------------- | ---------------------------------------------------------------------- | +| Scope your GPT narrowly first | Simplifies debugging and validates schema integration. | +| Use clear role instructions | Helps the GPT choose the right endpoints and avoid assumptions. | +| Name endpoints explicitly | Improves routing accuracy when fetching balances, prices, or DEX data. | +| Combine with code | Enables custom parsing or logic for complex workflows. | +| Add Subgraph or Substream context | Provides richer analytics when combined with Token API data. | + +## FAQs & Resources + +- Builders Office Hours (October 23, 2025) +- Watch the full session: https://x.com/i/broadcasts/1mrGmBzBarNJy diff --git a/website/src/pages/mr/token-api/guides/upgrade-to-v1.mdx b/website/src/pages/mr/token-api/guides/upgrade-to-v1.mdx new file mode 100644 index 000000000000..e2a7ccf973fa --- /dev/null +++ b/website/src/pages/mr/token-api/guides/upgrade-to-v1.mdx @@ -0,0 +1,346 @@ +--- +title: Upgrade to v1 +--- + +This guide covers the migration from the legacy API structure to the new v1 API. The refactoring introduces versioned endpoints, standardized query parameters, improved batching support, and consistent naming conventions. + +**Note** + +- `EVM` = Ethereum Virtual Machine + +Used to describe endpoints supporting EVM-based chains (e.g. `base`, `bsc`, `mainnet`, ...). + +- `SVM` = Solana Virtual Machine + +Used to describe endpoints supporting Solana (currently the only SVM chain supported). + +## 🔑 Breaking Changes Summary + +### 1. API Versioning + +All endpoints now use the `/v1` prefix. + +**Before:** + +``` +GET /balances/evm +GET /nft/items/contract/:contract/token_id/:token_id +``` + +**After:** + +``` +GET /v1/evm/balances +GET /v1/evm/nft/items +``` + +### 2. Route Structure Reorganization + +#### 2.1 EVM Endpoints + +Consolidated under `/v1/evm/*` + +| Old Endpoint | New Endpoint | +| ------------------------------------------------------ | ----------------------------- | +| `/balances/evm` | `/v1/evm/balances` | +| `/historical/balances/evm` | `/v1/evm/balances/historical` | +| `/holders/evm/:contract` | `/v1/evm/holders` | +| `/tokens/evm/:contract` | `/v1/evm/tokens` | +| `/transfers/evm` | `/v1/evm/transfers` | +| `/pools/evm` | `/v1/evm/pools` | +| `/swaps/evm` | `/v1/evm/swaps` | +| `/dexes/evm` | `/v1/evm/dexes` | +| `/ohlc/prices/evm/:contract` | _(removed)_ | +| `/ohlc/pools/evm/:pool` | `/v1/evm/pools/ohlc` | +| `/nft/ownerships/evm/:address` | `/v1/evm/nft/ownerships` | +| `/nft/collections/evm/:contract` | `/v1/evm/nft/collections` | +| `/nft/items/evm/contract/:contract/token_id/:token_id` | `/v1/evm/nft/items` | +| `/nft/holders/evm/:contract` | `/v1/evm/nft/holders` | +| `/nft/activities/evm` | `/v1/evm/nft/transfers` | +| `/nft/sales/evm` | `/v1/evm/nft/sales` | + +**Important:** The NFT endpoint `/nft/activities` has been renamed to `/v1/evm/nft/transfers` to better reflect its purpose. + +**Important:** The EVM Token OHLCV Data endpoint `/ohlc/prices/evm/{contract}` has been removed. You can use `/v1/evm/pools` to find stablecoin pairs for your contract and `/v1/evm/pools/ohlc` for OHLCV data for that pair. + +--- + +#### 2.2 New EVM native balances endpoint + +Native balances for EVM chains can be found under `/v1/evm/balances/native`. They will not show up in the `/v1/evm/balances` endpoint. + +Other endpoints can still use native token under the `0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee` contract. + +--- + +#### 2.3 SVM Endpoints + +Consolidated under `/v1/svm/*` + +| Old Endpoint | New Endpoint | +| ------------------------ | ------------------------- | +| `/balances/svm` | `/v1/svm/balances` | +| `/balances/native/svm` | `/v1/svm/balances/native` | +| `/holders/svm/:contract` | `/v1/svm/holders` | +| `/tokens/svm/:mint` | `/v1/svm/tokens` | +| `/transfers/svm` | `/v1/svm/transfers` | +| `/pools/svm` | `/v1/svm/pools` | +| `/swaps/svm` | `/v1/svm/swaps` | +| `/dexes/svm` | `/v1/svm/dexes` | +| `/owner/svm/:account` | `/v1/svm/owner` | +| `/ohlc/pools/svm/:pool` | `/v1/svm/pools/ohlc` | + +## 📝 Parameter Changes + +### 3. Path Parameters → Query Parameters + +All path parameters have been moved to query parameters. + +**Before:** + +```bash +GET /balances/evm/:address +GET /holders/evm/:contract +GET /nft/items/evm/contract/:contract/token_id/:token_id +``` + +**After:** + +```bash +GET /v1/evm/balances?network=mainnet&address=0x... +GET /v1/evm/holders?network=mainnet&contract=0x... +GET /v1/evm/nft/items?network=mainnet&contract=0x...&token_id=5712 +``` + +### 4. Standardized Parameter Naming + +All query parameters have been standardized to use snake_case naming convention. + +| Old Parameter | New Parameter | Notes | +| --- | --- | --- | +| `network_id` | `network` | Renamed, `matic` has also been renamed to `polygon` | +| `anyAddress` | `address` | Matches either `from` or `to` address | +| `from`, `fromAddress`, `offererAddress` | `from_address`, `offerer` | - | +| `to`, `toAddress`, `recipientAddress` | `to_address`, `recipient` | - | +| `startTime` | `start_time` | Default: `1735689600` (`2025-01-01`) | +| `endTime` | `end_time` | Default: `9999999999` | +| - | `start_block` | New parameter, default: `0` | +| - | `end_block` | New parameter, default: `9999999999` | +| - | `include_null_balances` | New parameter, default: `false` | +| `tx_hash` | `transaction_id` | - | +| `token` | `input_token`, `output_token` | More explicit for pool queries | +| `pool` | `amm_pool` | - | +| `orderBy`, `orderDirection` | _(removed)_ | Always sorted by most recent timestamp first | + +**Important:** The `network_id` parameter has been renamed to `network`. + +**Important:** `matic` network has been renamed to `polygon`. + +### 5. Batched Parameters + +Many parameters now support batching - accepting single values or comma-separated strings. + +**Supported Batched Parameters:** + +- `address`, `from_address`, `to_address` +- `contract`, `token_id` +- `factory`, `pool` +- `owner`, `token_account`, `mint` +- `transaction_id`, `signature` + +**Examples:** + +```console +## Single value +?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 + +## Comma-separated, single parameter +?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 + +## Repeated parameter values +?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&contract=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 +``` + +### 6. New Parameters + +#### `include_null_balances` + +Added to balance endpoints to optionally include zero/null balances. + +```bash +?include_null_balances=true +``` + +**Default:** `false` + +## 🔄 Response Changes + +### 7. Pagination Changes + +Pagination responses have been simplified. The API no longer computes total result counts due to performance and accuracy considerations when working with ClickHouse views and materialized tables. + +**Before:** + +```json +{ + "pagination": { + "previous_page": 1, + "current_page": 2, + "next_page": 3, + "total_pages": 10 + }, + "total_results": 1234 +} +``` + +**After:** + +```json +{ + "pagination": { + "previous_page": 1, + "current_page": 2 + } +} +``` + +**Removed fields:** + +- `next_page` +- `total_pages` +- `total_results` + +**Important:** To retrieve all results, continue incrementing the `page` parameter until the API returns an empty `data` array. This indicates you've reached the end of the results. + +### 8. Removed Parameters + +The following deprecated parameters have been removed: + +- `orderBy` - Results are now ordered by timestamp/block by default +- `orderDirection` - Always descending (newest first) + +### 9. Cached Queries + +Queries are now cached on the ClickHouse side for better performance. + +You can specifically request to not use the cache by setting the `Cache-Control` header to `no-cache`. + +#### Example + +**Cache** + +```console +$ curl -s 'https://token-api.thegraph.com/v1/...' | jq .statistics +{ + "bytes_read": 221, + "rows_read": 1, + "elapsed": 0.002212065 +} +``` + +**No cache** + +```console +$ curl -s 'http://localhost:8000/v1/...' --header 'Cache-Control: no-cache' | jq .statistics +{ + "bytes_read": 14621174348, + "rows_read": 223244390, + "elapsed": 0.971064066 +} +``` + +## 📚 Example Migrations + +### Example 1: Get Token Balances + +**Before:** + +```bash +GET /token/balances/evm/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045?network_id=mainnet&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 +``` + +**After:** + +```bash +GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 +``` + +### Example 2: Get NFT Items + +**Before:** + +```bash +GET /nft/items/evm/contract/0xbd3531da5cf5857e7cfaa92426877b022e612cf8/token_id/5712?network_id=mainnet +``` + +**After:** + +```bash +GET /v1/evm/nft/items?network=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&token_id=5712 +``` + +### Example 3: Get Token Transfers with Time Filter + +**Before:** + +```bash +GET /token/transfers/evm?network_id=mainnet&from=0xd8da6bf26964af9d7eed9e03e53415d37aa96045&startTime=1735689600&endTime=1767225600 +``` + +**After:** + +```bash +GET /v1/evm/transfers?network=mainnet&from_address=0xd8da6bf26964af9d7eed9e03e53415d37aa96045&start_time=1735689600&end_time=1767225600 +``` + +### Example 4: Get NFT Transfer Activities + +**Before:** + +```bash +GET /nft/activities/evm?network_id=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&anyAddress=0xd8da6bf26964af9d7eed9e03e53415d37aa96045 +``` + +**After:** + +```bash +GET /v1/evm/nft/transfers?network=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&address=0xd8da6bf26964af9d7eed9e03e53415d37aa96045 +``` + +### Example 5: Get Pool OHLC Data + +**Before:** + +```bash +GET /token/ohlc/pools/evm/0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640?network_id=mainnet&interval=1h&startTime=1735689600 +``` + +**After:** + +```bash +GET /v1/evm/pools/ohlc?network=mainnet&pool=0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640&interval=1h&start_time=1735689600 +``` + +### Example 6: Batched Query (New Feature) + +Query balances for multiple contracts in a single request: + +```bash +GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 +``` + +Query transfers from multiple addresses: + +```bash +GET /v1/evm/transfers?network=mainnet&from_address=0xabc...,0xdef...,0x123...&start_time=1735689600 +``` + +## ⚠️ Important Notes + +1. **Migration Notes:** The old endpoints were deprecated and removed on **October 30, 2025**. Please ensure all integrations have been migrated to the new Token API v1 endpoints. + +2. **Default Sorting:** All results are now sorted by timestamp (descending) by default. Custom sorting is no longer supported. + +3. **Pagination:** Continue paging through results by incrementing the `page` parameter until you receive an empty `data` array. The API no longer provides total counts due to performance optimizations with ClickHouse. + +4. **Time Defaults:** If you previously relied on fetching all historical data without time filters, note that `start_time` now defaults to `2025-01-01`. Adjust accordingly if you need earlier data. diff --git a/website/src/pages/mr/token-api/upgrade-to-v1.mdx b/website/src/pages/mr/token-api/upgrade-to-v1.mdx deleted file mode 100644 index fbe09101eaa5..000000000000 --- a/website/src/pages/mr/token-api/upgrade-to-v1.mdx +++ /dev/null @@ -1,254 +0,0 @@ ---- -title: Upgrade to v1 ---- - -This guide covers the migration from the legacy API structure to the new v1 API. The refactoring introduces versioned endpoints, standardized query parameters, improved batching support, and consistent naming conventions. - -**Note** - -- `EVM` = Ethereum Virtual Machine - -Used to describe endpoints supporting EVM-based chains (e.g. `base`, `bsc`, `mainnet`, ...). - -- `SVM` = Solana Virtual Machine - -Used to describe endpoints supporting Solana (currently the only SVM chain supported). - -## 🔑 Breaking Changes Summary - -### 1. **API Versioning** - -All endpoints now use the `/v1` prefix. - -**Before:** - -``` -GET /balances/evm -GET /nft/items/contract/:contract/token_id/:token_id -``` - -**After:** - -``` -GET /v1/evm/balances -GET /v1/evm/nft/items -``` - -### 2. **Route Structure Reorganization** - -#### 2.1 EVM Endpoints - -Consolidated under `/v1/evm/*` - -| Old Endpoint | New Endpoint | -| ------------------------------------------------------ | ----------------------------- | -| `/balances/evm` | `/v1/evm/balances` | -| `/historical/balances/evm` | `/v1/evm/balances/historical` | -| `/holders/evm/:contract` | `/v1/evm/holders` | -| `/tokens/evm/:contract` | `/v1/evm/tokens` | -| `/transfers/evm` | `/v1/evm/transfers` | -| `/pools/evm` | `/v1/evm/pools` | -| `/swaps/evm` | `/v1/evm/swaps` | -| `/dexes/evm` | `/v1/evm/dexes` | -| `/ohlc/prices/evm/:contract` | _(removed)_ | -| `/ohlc/pools/evm/:pool` | `/v1/evm/pools/ohlc` | -| `/nft/ownerships/evm/:address` | `/v1/evm/nft/ownerships` | -| `/nft/collections/evm/:contract` | `/v1/evm/nft/collections` | -| `/nft/items/evm/contract/:contract/token_id/:token_id` | `/v1/evm/nft/items` | -| `/nft/holders/evm/:contract` | `/v1/evm/nft/holders` | -| `/nft/activities/evm` | `/v1/evm/nft/transfers` | -| `/nft/sales/evm` | `/v1/evm/nft/sales` | - -**Important:** The NFT endpoint `/nft/activities` has been renamed to `/v1/evm/nft/transfers` to better reflect its purpose. - -**Important:** The EVM Token OHLCV Data endpoint `/ohlc/prices/evm/{contract}` has been removed. You can use `/v1/evm/pools` to find stablecoin pairs for your contract and `/v1/evm/pools/ohlc` for OHLCV data for that pair. - ---- - -#### 2.2 New EVM native balances endpoint - -Native balances for EVM chains can be found under `/v1/evm/balances/native`. They will not show up in the `/v1/evm/balances` endpoint. - -Other endpoints can still use native token under the `0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee` contract. - ---- - -#### 2.3 SVM Endpoints - -Consolidated under `/v1/svm/*` - -| Old Endpoint | New Endpoint | -| ------------------------ | ------------------------- | -| `/balances/svm` | `/v1/svm/balances` | -| `/balances/native/svm` | `/v1/svm/balances/native` | -| `/holders/svm/:contract` | `/v1/svm/holders` | -| `/tokens/svm/:mint` | `/v1/svm/tokens` | -| `/transfers/svm` | `/v1/svm/transfers` | -| `/pools/svm` | `/v1/svm/pools` | -| `/swaps/svm` | `/v1/svm/swaps` | -| `/dexes/svm` | `/v1/svm/dexes` | -| `/owner/svm/:account` | `/v1/svm/owner` | -| `/ohlc/pools/svm/:pool` | `/v1/svm/pools/ohlc` | - -## 📝 Parameter Changes - -### 3. **Path Parameters → Query Parameters** - -All path parameters have been moved to query parameters. - -**Before:** - -```bash -GET /balances/evm/:address -GET /holders/evm/:contract -GET /nft/items/evm/contract/:contract/token_id/:token_id -``` - -**After:** - -```bash -GET /v1/evm/balances?network=mainnet&address=0x... -GET /v1/evm/holders?network=mainnet&contract=0x... -GET /v1/evm/nft/items?network=mainnet&contract=0x...&token_id=5712 -``` - -### 4. **Standardized Parameter Naming** - -All query parameters have been standardized to use snake_case naming convention. - -| Old Parameter | New Parameter | Notes | -| --- | --- | --- | -| `network_id` | `network` | Renamed, `matic` has also been renamed to `polygon` | -| `anyAddress` | `address` | Matches either `from` or `to` address | -| `from`, `fromAddress`, `offererAddress` | `from_address`, `offerer` | - | -| `to`, `toAddress`, `recipientAddress` | `to_address`, `recipient` | - | -| `startTime` | `start_time` | Default: `1735689600` (`2025-01-01`) | -| `endTime` | `end_time` | Default: `9999999999` | -| - | `start_block` | New parameter, default: `0` | -| - | `end_block` | New parameter, default: `9999999999` | -| - | `include_null_balances` | New parameter, default: `false` | -| `tx_hash` | `transaction_id` | - | -| `token` | `input_token`, `output_token` | More explicit for pool queries | -| `pool` | `amm_pool` | - | -| `orderBy`, `orderDirection` | _(removed)_ | Always sorted by most recent timestamp first | - -**Important:** The `network_id` parameter has been renamed to `network`. - -**Important:** `matic` network has been renamed to `polygon`. - -### 5. **Batched Parameters** - -Many parameters now support batching - accepting single values or comma-separated strings. - -**Supported Batched Parameters:** - -- `address`, `from_address`, `to_address` -- `contract`, `token_id` -- `factory`, `pool` -- `owner`, `token_account`, `mint` -- `transaction_id`, `signature` - -**Examples:** - -```console -# Single value -?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 - -# Comma-separated, single parameter -?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 - -# Repeated parameter values -?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&contract=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 -``` - -### 6. **New Parameters** - -#### `include_null_balances` - -Added to balance endpoints to optionally include zero/null balances. - -```bash -?include_null_balances=true -``` - -**Default:** `false` - -## 🔄 Response Changes - -### 7. **Pagination Changes** - -Pagination responses have been simplified. The API no longer computes total result counts due to performance and accuracy considerations when working with ClickHouse views and materialized tables. - -**Before:** - -```json -{ - "pagination": { - "previous_page": 1, - "current_page": 2, - "next_page": 3, - "total_pages": 10 - }, - "total_results": 1234 -} -``` - -**After:** - -```json -{ - "pagination": { - "previous_page": 1, - "current_page": 2 - } -} -``` - -**Removed fields:** - -- `next_page` -- `total_pages` -- `total_results` - -**Important:** To retrieve all results, continue incrementing the `page` parameter until the API returns an empty `data` array. This indicates you've reached the end of the results. - -### 8. **Removed Parameters** - -The following deprecated parameters have been removed: - -- `orderBy` - Results are now ordered by timestamp/block by default -- `orderDirection` - Always descending (newest first) - -## 📚 Example Migrations - -### Old vs New: Get Token Balances - -**Before:** - -```bash -GET /balances/evm/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045?network_id=mainnet&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 -``` - -**After:** - -```bash -GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 -``` - -### New Feature: Batched Queries - -Query balances for multiple contracts in a single request: - -```bash -GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 -``` - -## ⚠️ Important Notes - -1. **Backward Compatibility:** The old endpoints are deprecated and will be removed in the future. Migrate by **Oct 30, 2025**. - -2. **Default Sorting:** All results are now sorted by timestamp (descending) by default. Custom sorting is no longer supported. - -3. **Pagination:** Continue paging through results by incrementing the `page` parameter until you receive an empty `data` array. The API no longer provides total counts due to performance optimizations with ClickHouse. - -4. **Time Defaults:** If you previously relied on fetching all historical data without time filters, note that `start_time` now defaults to `2025-01-01`. Adjust accordingly if you need earlier data. diff --git a/website/src/pages/nl/index.json b/website/src/pages/nl/index.json index d71381808fc7..eb19ff0514db 100644 --- a/website/src/pages/nl/index.json +++ b/website/src/pages/nl/index.json @@ -2,7 +2,7 @@ "title": "Start", "hero": { "title": "The Graph Docs", - "description": "The Graph is a blockchain data solution that powers applications, analytics, and AI on 90+ chains. The Graph's core products include the Token API for web3 apps, Subgraphs for indexing smart contracts, and Substreams for real-time and historical data streaming.", + "description": "The Graph is a blockchain data solution that powers applications, analytics, and AI on 80+ chains. The Graph's core products include the Token API for web3 apps, Subgraphs for indexing smart contracts, and Substreams for real-time and historical data streaming.", "cta1": "How The Graph works", "cta2": "Build your first subgraph" }, diff --git a/website/src/pages/nl/subgraphs/guides/_meta.js b/website/src/pages/nl/subgraphs/guides/_meta.js index fd5608dcceb2..1c081848ea08 100644 --- a/website/src/pages/nl/subgraphs/guides/_meta.js +++ b/website/src/pages/nl/subgraphs/guides/_meta.js @@ -2,7 +2,6 @@ export default { 'subgraph-composition': '', 'subgraph-debug-forking': '', near: '', - grafting: '', 'subgraph-uncrashable': '', 'transfer-to-the-graph': '', diff --git a/website/src/pages/nl/token-api/_meta.js b/website/src/pages/nl/token-api/_meta.js index a8624da52e7f..9588f70cec53 100644 --- a/website/src/pages/nl/token-api/_meta.js +++ b/website/src/pages/nl/token-api/_meta.js @@ -11,6 +11,6 @@ export default { 'tvm-dexs': titles['tvm-dexs'] ?? '', monitoring: titles['monitoring'] ?? '', 'endpoint-pricing': '', + guides: titles['guides'] ?? '', faq: '', - 'upgrade-to-v1': '', } diff --git a/website/src/pages/nl/token-api/guides/_meta-titles.json b/website/src/pages/nl/token-api/guides/_meta-titles.json new file mode 100644 index 000000000000..cd93dcc0fc0b --- /dev/null +++ b/website/src/pages/nl/token-api/guides/_meta-titles.json @@ -0,0 +1,4 @@ +{ + "gpt": "Create Custom GPTS", + "upgrade-to-v1": "" +} diff --git a/website/src/pages/nl/token-api/guides/_meta.js b/website/src/pages/nl/token-api/guides/_meta.js new file mode 100644 index 000000000000..e5aaaadd78f2 --- /dev/null +++ b/website/src/pages/nl/token-api/guides/_meta.js @@ -0,0 +1,4 @@ +export default { + gpt: '', + 'upgrade-to-v1': '', +} diff --git a/website/src/pages/nl/token-api/guides/gpt.mdx b/website/src/pages/nl/token-api/guides/gpt.mdx new file mode 100644 index 000000000000..564d013dea20 --- /dev/null +++ b/website/src/pages/nl/token-api/guides/gpt.mdx @@ -0,0 +1,121 @@ +--- +title: How the Token API Powers Custom GPTs +sidebarTitle: Create Custom GPTs +--- + +## Overview + +The Token API is a pre-indexed blockchain data service that provides real-time access to token balances, metadata, prices, liquidity, and volume across multiple chains. Developers use its REST endpoints to build wallets, trading dashboards, DeFi analytics, and AI systems without maintaining their own indexing stack. Custom GPTs can connect directly to the Token API's OpenAPI schema. + +The Token API enables developers to build **Custom GPTs** to reason over live blockchain data inside ChatGPT that can reason over and respond with live blockchain data directly inside ChatGPT. + +## What the Token API Enables in Custom GPTs + +When a Custom GPT is wired to the Token API, it gains access to a machine-readable schema and authenticated endpoints. Developers can use this to: + +- **Query real-time onchain data**: Balances, token prices, liquidity, and transaction history. +- **Automate domain-specific tasks**: Portfolio tracking, accounting, reconciliation, and market analysis. +- **Power AI agents with verifiable blockchain context**: Use the same data sources dapps rely on. + +Because the Token API provides a machine-readable schema and authenticated requests, it serves as a structured data layer that enables GPT-5 agents to combine natural language reasoning with live onchain data from The Graph. + +## When to Use the Token API for Custom GPTs + +Use the Token API when your GPT needs repeatable, domain-specific behavior grounded in blockchain data. This is most effective when the GPT performs the same type of task frequently or enforces a workflow you define. For one-off or exploratory questions, standard ChatGPT prompts are sufficient. + +## Choosing a Use Case + +Start with a clear, narrow objective, then expand as needed. Common patterns include: + +- **Accounting GPT**: Onchain accounting, tax tagging, and portfolio reconciliation. +- **Trading GPT**: Liquidity, pricing, and volume analysis for trading strategies. +- **Protocol Tracking GPT**: Real-time monitoring of transaction activity and liquidity pools. + +A focused initial goal such as “Retrieve token balances and prices for a wallet” makes it easier to configure reliable behavior before adding complex workflows. + +## Requirements + +| Requirement | Description | +| ---------------------- | -------------------------------------------------------- | +| ChatGPT 5 | Custom GPT creation requires GPT-5 tier or Pro. | +| Token API Subscription | Sign up at [The Graph Market](https://thegraph.market./) | +| Token API Key | Available in your dashboard as the Authentication JWT. | + +## Setting Up a Custom GPT + +Below is an explanatory outline of what happens during setup. This section provides conceptual understanding. + +### Create Custom GPT + +1. Visit chat.openai.com/gpts in your browser. 2, Click Create (top right). +2. Under Configure (in the top left panel), set up your GPT's personality and scope. + +### Configure Your GPT + +You define the GPT's role, scope, and metadata so it knows what it is designed to do. This includes: + +- **Name and Description**: Helps users discover your GPT. + - For example: **Name**: Token Tracker GPT **Description**: An onchain analytics assistant that retrieves live token balances, prices, and liquidity data using The Graph's Token API. +- **Instructions**: Tells the GPT what tasks it should perform using the Token API. + - For example: You are a blockchain data assistant retrieving onchain token data from The Graph's Token API. Use endpoints to fetch balances, liquidity, and price history across EVM chains. Present results in tables with token symbols, prices, and USD values. +- **Knowledge**: Optional context files such as wallet references, accounting rules, or code snippets. +- **New Action**: At the bottom, click “Create new action” to connect your GPT to the Token API. + +### Connect the Token API + +To enable live blockchain queries inside ChatGPT, you connect the GPT to the Token API through: + +#### Authentication + +1. Set Authentication to API Key → Bearer. +2. Open [The Graph Market](https://thegraph.market./) and copy your Authentication JWT from your dashboard. +3. Paste the token into the ChatGPT prompt where the field shows [HIDDEN]. + +#### Schema + +1. Above the Schema box, click Import from URL. +2. Paste: https://token-api.thegraph.com/openapi +3. Click Import. You'll now see endpoints like: + - `getV1EvmTokens` + - `getV1EvmDexes` + - `getV1EvmBalances` +4. Click Test on one (for example `getV1EvmDexes`) to verify connection. + +##### Privacy + +1. At the bottom, under Privacy, paste: https://pinax.network/en/legal/privacy + +### Privacy + +You can attach a privacy policy URL such as: https://pinax.network/en/legal/privacy + +## Example Prompt Patterns + +These examples help illustrate how a GPT reasons over Token API data. + +### Wallet and Portfolio + +Get the total USD balance for a wallet across multiple chains, returning token name, symbol, balance, and price. + +### Trading Analysis + +Compare USDC and DAI liquidity across Uniswap and Curve. Return the top 5 pools by TVL. + +### Accounting + +List all ERC-20 transfers for this address in the last 30 days. Group by token and total incoming/outgoing volume. + +## Best Practices + +| Tip | Why It Matters | +| --------------------------------- | ---------------------------------------------------------------------- | +| Scope your GPT narrowly first | Simplifies debugging and validates schema integration. | +| Use clear role instructions | Helps the GPT choose the right endpoints and avoid assumptions. | +| Name endpoints explicitly | Improves routing accuracy when fetching balances, prices, or DEX data. | +| Combine with code | Enables custom parsing or logic for complex workflows. | +| Add Subgraph or Substream context | Provides richer analytics when combined with Token API data. | + +## FAQs & Resources + +- Builders Office Hours (October 23, 2025) +- Watch the full session: https://x.com/i/broadcasts/1mrGmBzBarNJy diff --git a/website/src/pages/nl/token-api/guides/upgrade-to-v1.mdx b/website/src/pages/nl/token-api/guides/upgrade-to-v1.mdx new file mode 100644 index 000000000000..e2a7ccf973fa --- /dev/null +++ b/website/src/pages/nl/token-api/guides/upgrade-to-v1.mdx @@ -0,0 +1,346 @@ +--- +title: Upgrade to v1 +--- + +This guide covers the migration from the legacy API structure to the new v1 API. The refactoring introduces versioned endpoints, standardized query parameters, improved batching support, and consistent naming conventions. + +**Note** + +- `EVM` = Ethereum Virtual Machine + +Used to describe endpoints supporting EVM-based chains (e.g. `base`, `bsc`, `mainnet`, ...). + +- `SVM` = Solana Virtual Machine + +Used to describe endpoints supporting Solana (currently the only SVM chain supported). + +## 🔑 Breaking Changes Summary + +### 1. API Versioning + +All endpoints now use the `/v1` prefix. + +**Before:** + +``` +GET /balances/evm +GET /nft/items/contract/:contract/token_id/:token_id +``` + +**After:** + +``` +GET /v1/evm/balances +GET /v1/evm/nft/items +``` + +### 2. Route Structure Reorganization + +#### 2.1 EVM Endpoints + +Consolidated under `/v1/evm/*` + +| Old Endpoint | New Endpoint | +| ------------------------------------------------------ | ----------------------------- | +| `/balances/evm` | `/v1/evm/balances` | +| `/historical/balances/evm` | `/v1/evm/balances/historical` | +| `/holders/evm/:contract` | `/v1/evm/holders` | +| `/tokens/evm/:contract` | `/v1/evm/tokens` | +| `/transfers/evm` | `/v1/evm/transfers` | +| `/pools/evm` | `/v1/evm/pools` | +| `/swaps/evm` | `/v1/evm/swaps` | +| `/dexes/evm` | `/v1/evm/dexes` | +| `/ohlc/prices/evm/:contract` | _(removed)_ | +| `/ohlc/pools/evm/:pool` | `/v1/evm/pools/ohlc` | +| `/nft/ownerships/evm/:address` | `/v1/evm/nft/ownerships` | +| `/nft/collections/evm/:contract` | `/v1/evm/nft/collections` | +| `/nft/items/evm/contract/:contract/token_id/:token_id` | `/v1/evm/nft/items` | +| `/nft/holders/evm/:contract` | `/v1/evm/nft/holders` | +| `/nft/activities/evm` | `/v1/evm/nft/transfers` | +| `/nft/sales/evm` | `/v1/evm/nft/sales` | + +**Important:** The NFT endpoint `/nft/activities` has been renamed to `/v1/evm/nft/transfers` to better reflect its purpose. + +**Important:** The EVM Token OHLCV Data endpoint `/ohlc/prices/evm/{contract}` has been removed. You can use `/v1/evm/pools` to find stablecoin pairs for your contract and `/v1/evm/pools/ohlc` for OHLCV data for that pair. + +--- + +#### 2.2 New EVM native balances endpoint + +Native balances for EVM chains can be found under `/v1/evm/balances/native`. They will not show up in the `/v1/evm/balances` endpoint. + +Other endpoints can still use native token under the `0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee` contract. + +--- + +#### 2.3 SVM Endpoints + +Consolidated under `/v1/svm/*` + +| Old Endpoint | New Endpoint | +| ------------------------ | ------------------------- | +| `/balances/svm` | `/v1/svm/balances` | +| `/balances/native/svm` | `/v1/svm/balances/native` | +| `/holders/svm/:contract` | `/v1/svm/holders` | +| `/tokens/svm/:mint` | `/v1/svm/tokens` | +| `/transfers/svm` | `/v1/svm/transfers` | +| `/pools/svm` | `/v1/svm/pools` | +| `/swaps/svm` | `/v1/svm/swaps` | +| `/dexes/svm` | `/v1/svm/dexes` | +| `/owner/svm/:account` | `/v1/svm/owner` | +| `/ohlc/pools/svm/:pool` | `/v1/svm/pools/ohlc` | + +## 📝 Parameter Changes + +### 3. Path Parameters → Query Parameters + +All path parameters have been moved to query parameters. + +**Before:** + +```bash +GET /balances/evm/:address +GET /holders/evm/:contract +GET /nft/items/evm/contract/:contract/token_id/:token_id +``` + +**After:** + +```bash +GET /v1/evm/balances?network=mainnet&address=0x... +GET /v1/evm/holders?network=mainnet&contract=0x... +GET /v1/evm/nft/items?network=mainnet&contract=0x...&token_id=5712 +``` + +### 4. Standardized Parameter Naming + +All query parameters have been standardized to use snake_case naming convention. + +| Old Parameter | New Parameter | Notes | +| --- | --- | --- | +| `network_id` | `network` | Renamed, `matic` has also been renamed to `polygon` | +| `anyAddress` | `address` | Matches either `from` or `to` address | +| `from`, `fromAddress`, `offererAddress` | `from_address`, `offerer` | - | +| `to`, `toAddress`, `recipientAddress` | `to_address`, `recipient` | - | +| `startTime` | `start_time` | Default: `1735689600` (`2025-01-01`) | +| `endTime` | `end_time` | Default: `9999999999` | +| - | `start_block` | New parameter, default: `0` | +| - | `end_block` | New parameter, default: `9999999999` | +| - | `include_null_balances` | New parameter, default: `false` | +| `tx_hash` | `transaction_id` | - | +| `token` | `input_token`, `output_token` | More explicit for pool queries | +| `pool` | `amm_pool` | - | +| `orderBy`, `orderDirection` | _(removed)_ | Always sorted by most recent timestamp first | + +**Important:** The `network_id` parameter has been renamed to `network`. + +**Important:** `matic` network has been renamed to `polygon`. + +### 5. Batched Parameters + +Many parameters now support batching - accepting single values or comma-separated strings. + +**Supported Batched Parameters:** + +- `address`, `from_address`, `to_address` +- `contract`, `token_id` +- `factory`, `pool` +- `owner`, `token_account`, `mint` +- `transaction_id`, `signature` + +**Examples:** + +```console +## Single value +?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 + +## Comma-separated, single parameter +?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 + +## Repeated parameter values +?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&contract=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 +``` + +### 6. New Parameters + +#### `include_null_balances` + +Added to balance endpoints to optionally include zero/null balances. + +```bash +?include_null_balances=true +``` + +**Default:** `false` + +## 🔄 Response Changes + +### 7. Pagination Changes + +Pagination responses have been simplified. The API no longer computes total result counts due to performance and accuracy considerations when working with ClickHouse views and materialized tables. + +**Before:** + +```json +{ + "pagination": { + "previous_page": 1, + "current_page": 2, + "next_page": 3, + "total_pages": 10 + }, + "total_results": 1234 +} +``` + +**After:** + +```json +{ + "pagination": { + "previous_page": 1, + "current_page": 2 + } +} +``` + +**Removed fields:** + +- `next_page` +- `total_pages` +- `total_results` + +**Important:** To retrieve all results, continue incrementing the `page` parameter until the API returns an empty `data` array. This indicates you've reached the end of the results. + +### 8. Removed Parameters + +The following deprecated parameters have been removed: + +- `orderBy` - Results are now ordered by timestamp/block by default +- `orderDirection` - Always descending (newest first) + +### 9. Cached Queries + +Queries are now cached on the ClickHouse side for better performance. + +You can specifically request to not use the cache by setting the `Cache-Control` header to `no-cache`. + +#### Example + +**Cache** + +```console +$ curl -s 'https://token-api.thegraph.com/v1/...' | jq .statistics +{ + "bytes_read": 221, + "rows_read": 1, + "elapsed": 0.002212065 +} +``` + +**No cache** + +```console +$ curl -s 'http://localhost:8000/v1/...' --header 'Cache-Control: no-cache' | jq .statistics +{ + "bytes_read": 14621174348, + "rows_read": 223244390, + "elapsed": 0.971064066 +} +``` + +## 📚 Example Migrations + +### Example 1: Get Token Balances + +**Before:** + +```bash +GET /token/balances/evm/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045?network_id=mainnet&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 +``` + +**After:** + +```bash +GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 +``` + +### Example 2: Get NFT Items + +**Before:** + +```bash +GET /nft/items/evm/contract/0xbd3531da5cf5857e7cfaa92426877b022e612cf8/token_id/5712?network_id=mainnet +``` + +**After:** + +```bash +GET /v1/evm/nft/items?network=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&token_id=5712 +``` + +### Example 3: Get Token Transfers with Time Filter + +**Before:** + +```bash +GET /token/transfers/evm?network_id=mainnet&from=0xd8da6bf26964af9d7eed9e03e53415d37aa96045&startTime=1735689600&endTime=1767225600 +``` + +**After:** + +```bash +GET /v1/evm/transfers?network=mainnet&from_address=0xd8da6bf26964af9d7eed9e03e53415d37aa96045&start_time=1735689600&end_time=1767225600 +``` + +### Example 4: Get NFT Transfer Activities + +**Before:** + +```bash +GET /nft/activities/evm?network_id=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&anyAddress=0xd8da6bf26964af9d7eed9e03e53415d37aa96045 +``` + +**After:** + +```bash +GET /v1/evm/nft/transfers?network=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&address=0xd8da6bf26964af9d7eed9e03e53415d37aa96045 +``` + +### Example 5: Get Pool OHLC Data + +**Before:** + +```bash +GET /token/ohlc/pools/evm/0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640?network_id=mainnet&interval=1h&startTime=1735689600 +``` + +**After:** + +```bash +GET /v1/evm/pools/ohlc?network=mainnet&pool=0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640&interval=1h&start_time=1735689600 +``` + +### Example 6: Batched Query (New Feature) + +Query balances for multiple contracts in a single request: + +```bash +GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 +``` + +Query transfers from multiple addresses: + +```bash +GET /v1/evm/transfers?network=mainnet&from_address=0xabc...,0xdef...,0x123...&start_time=1735689600 +``` + +## ⚠️ Important Notes + +1. **Migration Notes:** The old endpoints were deprecated and removed on **October 30, 2025**. Please ensure all integrations have been migrated to the new Token API v1 endpoints. + +2. **Default Sorting:** All results are now sorted by timestamp (descending) by default. Custom sorting is no longer supported. + +3. **Pagination:** Continue paging through results by incrementing the `page` parameter until you receive an empty `data` array. The API no longer provides total counts due to performance optimizations with ClickHouse. + +4. **Time Defaults:** If you previously relied on fetching all historical data without time filters, note that `start_time` now defaults to `2025-01-01`. Adjust accordingly if you need earlier data. diff --git a/website/src/pages/nl/token-api/upgrade-to-v1.mdx b/website/src/pages/nl/token-api/upgrade-to-v1.mdx deleted file mode 100644 index fbe09101eaa5..000000000000 --- a/website/src/pages/nl/token-api/upgrade-to-v1.mdx +++ /dev/null @@ -1,254 +0,0 @@ ---- -title: Upgrade to v1 ---- - -This guide covers the migration from the legacy API structure to the new v1 API. The refactoring introduces versioned endpoints, standardized query parameters, improved batching support, and consistent naming conventions. - -**Note** - -- `EVM` = Ethereum Virtual Machine - -Used to describe endpoints supporting EVM-based chains (e.g. `base`, `bsc`, `mainnet`, ...). - -- `SVM` = Solana Virtual Machine - -Used to describe endpoints supporting Solana (currently the only SVM chain supported). - -## 🔑 Breaking Changes Summary - -### 1. **API Versioning** - -All endpoints now use the `/v1` prefix. - -**Before:** - -``` -GET /balances/evm -GET /nft/items/contract/:contract/token_id/:token_id -``` - -**After:** - -``` -GET /v1/evm/balances -GET /v1/evm/nft/items -``` - -### 2. **Route Structure Reorganization** - -#### 2.1 EVM Endpoints - -Consolidated under `/v1/evm/*` - -| Old Endpoint | New Endpoint | -| ------------------------------------------------------ | ----------------------------- | -| `/balances/evm` | `/v1/evm/balances` | -| `/historical/balances/evm` | `/v1/evm/balances/historical` | -| `/holders/evm/:contract` | `/v1/evm/holders` | -| `/tokens/evm/:contract` | `/v1/evm/tokens` | -| `/transfers/evm` | `/v1/evm/transfers` | -| `/pools/evm` | `/v1/evm/pools` | -| `/swaps/evm` | `/v1/evm/swaps` | -| `/dexes/evm` | `/v1/evm/dexes` | -| `/ohlc/prices/evm/:contract` | _(removed)_ | -| `/ohlc/pools/evm/:pool` | `/v1/evm/pools/ohlc` | -| `/nft/ownerships/evm/:address` | `/v1/evm/nft/ownerships` | -| `/nft/collections/evm/:contract` | `/v1/evm/nft/collections` | -| `/nft/items/evm/contract/:contract/token_id/:token_id` | `/v1/evm/nft/items` | -| `/nft/holders/evm/:contract` | `/v1/evm/nft/holders` | -| `/nft/activities/evm` | `/v1/evm/nft/transfers` | -| `/nft/sales/evm` | `/v1/evm/nft/sales` | - -**Important:** The NFT endpoint `/nft/activities` has been renamed to `/v1/evm/nft/transfers` to better reflect its purpose. - -**Important:** The EVM Token OHLCV Data endpoint `/ohlc/prices/evm/{contract}` has been removed. You can use `/v1/evm/pools` to find stablecoin pairs for your contract and `/v1/evm/pools/ohlc` for OHLCV data for that pair. - ---- - -#### 2.2 New EVM native balances endpoint - -Native balances for EVM chains can be found under `/v1/evm/balances/native`. They will not show up in the `/v1/evm/balances` endpoint. - -Other endpoints can still use native token under the `0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee` contract. - ---- - -#### 2.3 SVM Endpoints - -Consolidated under `/v1/svm/*` - -| Old Endpoint | New Endpoint | -| ------------------------ | ------------------------- | -| `/balances/svm` | `/v1/svm/balances` | -| `/balances/native/svm` | `/v1/svm/balances/native` | -| `/holders/svm/:contract` | `/v1/svm/holders` | -| `/tokens/svm/:mint` | `/v1/svm/tokens` | -| `/transfers/svm` | `/v1/svm/transfers` | -| `/pools/svm` | `/v1/svm/pools` | -| `/swaps/svm` | `/v1/svm/swaps` | -| `/dexes/svm` | `/v1/svm/dexes` | -| `/owner/svm/:account` | `/v1/svm/owner` | -| `/ohlc/pools/svm/:pool` | `/v1/svm/pools/ohlc` | - -## 📝 Parameter Changes - -### 3. **Path Parameters → Query Parameters** - -All path parameters have been moved to query parameters. - -**Before:** - -```bash -GET /balances/evm/:address -GET /holders/evm/:contract -GET /nft/items/evm/contract/:contract/token_id/:token_id -``` - -**After:** - -```bash -GET /v1/evm/balances?network=mainnet&address=0x... -GET /v1/evm/holders?network=mainnet&contract=0x... -GET /v1/evm/nft/items?network=mainnet&contract=0x...&token_id=5712 -``` - -### 4. **Standardized Parameter Naming** - -All query parameters have been standardized to use snake_case naming convention. - -| Old Parameter | New Parameter | Notes | -| --- | --- | --- | -| `network_id` | `network` | Renamed, `matic` has also been renamed to `polygon` | -| `anyAddress` | `address` | Matches either `from` or `to` address | -| `from`, `fromAddress`, `offererAddress` | `from_address`, `offerer` | - | -| `to`, `toAddress`, `recipientAddress` | `to_address`, `recipient` | - | -| `startTime` | `start_time` | Default: `1735689600` (`2025-01-01`) | -| `endTime` | `end_time` | Default: `9999999999` | -| - | `start_block` | New parameter, default: `0` | -| - | `end_block` | New parameter, default: `9999999999` | -| - | `include_null_balances` | New parameter, default: `false` | -| `tx_hash` | `transaction_id` | - | -| `token` | `input_token`, `output_token` | More explicit for pool queries | -| `pool` | `amm_pool` | - | -| `orderBy`, `orderDirection` | _(removed)_ | Always sorted by most recent timestamp first | - -**Important:** The `network_id` parameter has been renamed to `network`. - -**Important:** `matic` network has been renamed to `polygon`. - -### 5. **Batched Parameters** - -Many parameters now support batching - accepting single values or comma-separated strings. - -**Supported Batched Parameters:** - -- `address`, `from_address`, `to_address` -- `contract`, `token_id` -- `factory`, `pool` -- `owner`, `token_account`, `mint` -- `transaction_id`, `signature` - -**Examples:** - -```console -# Single value -?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 - -# Comma-separated, single parameter -?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 - -# Repeated parameter values -?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&contract=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 -``` - -### 6. **New Parameters** - -#### `include_null_balances` - -Added to balance endpoints to optionally include zero/null balances. - -```bash -?include_null_balances=true -``` - -**Default:** `false` - -## 🔄 Response Changes - -### 7. **Pagination Changes** - -Pagination responses have been simplified. The API no longer computes total result counts due to performance and accuracy considerations when working with ClickHouse views and materialized tables. - -**Before:** - -```json -{ - "pagination": { - "previous_page": 1, - "current_page": 2, - "next_page": 3, - "total_pages": 10 - }, - "total_results": 1234 -} -``` - -**After:** - -```json -{ - "pagination": { - "previous_page": 1, - "current_page": 2 - } -} -``` - -**Removed fields:** - -- `next_page` -- `total_pages` -- `total_results` - -**Important:** To retrieve all results, continue incrementing the `page` parameter until the API returns an empty `data` array. This indicates you've reached the end of the results. - -### 8. **Removed Parameters** - -The following deprecated parameters have been removed: - -- `orderBy` - Results are now ordered by timestamp/block by default -- `orderDirection` - Always descending (newest first) - -## 📚 Example Migrations - -### Old vs New: Get Token Balances - -**Before:** - -```bash -GET /balances/evm/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045?network_id=mainnet&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 -``` - -**After:** - -```bash -GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 -``` - -### New Feature: Batched Queries - -Query balances for multiple contracts in a single request: - -```bash -GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 -``` - -## ⚠️ Important Notes - -1. **Backward Compatibility:** The old endpoints are deprecated and will be removed in the future. Migrate by **Oct 30, 2025**. - -2. **Default Sorting:** All results are now sorted by timestamp (descending) by default. Custom sorting is no longer supported. - -3. **Pagination:** Continue paging through results by incrementing the `page` parameter until you receive an empty `data` array. The API no longer provides total counts due to performance optimizations with ClickHouse. - -4. **Time Defaults:** If you previously relied on fetching all historical data without time filters, note that `start_time` now defaults to `2025-01-01`. Adjust accordingly if you need earlier data. diff --git a/website/src/pages/pl/index.json b/website/src/pages/pl/index.json index dcbd562d0a1a..679bb1dacfd5 100644 --- a/website/src/pages/pl/index.json +++ b/website/src/pages/pl/index.json @@ -2,7 +2,7 @@ "title": "Home", "hero": { "title": "The Graph Docs", - "description": "The Graph is a blockchain data solution that powers applications, analytics, and AI on 90+ chains. The Graph's core products include the Token API for web3 apps, Subgraphs for indexing smart contracts, and Substreams for real-time and historical data streaming.", + "description": "The Graph is a blockchain data solution that powers applications, analytics, and AI on 80+ chains. The Graph's core products include the Token API for web3 apps, Subgraphs for indexing smart contracts, and Substreams for real-time and historical data streaming.", "cta1": "How The Graph works", "cta2": "Build your first subgraph" }, diff --git a/website/src/pages/pl/subgraphs/guides/_meta.js b/website/src/pages/pl/subgraphs/guides/_meta.js index fd5608dcceb2..1c081848ea08 100644 --- a/website/src/pages/pl/subgraphs/guides/_meta.js +++ b/website/src/pages/pl/subgraphs/guides/_meta.js @@ -2,7 +2,6 @@ export default { 'subgraph-composition': '', 'subgraph-debug-forking': '', near: '', - grafting: '', 'subgraph-uncrashable': '', 'transfer-to-the-graph': '', diff --git a/website/src/pages/pl/token-api/_meta.js b/website/src/pages/pl/token-api/_meta.js index a8624da52e7f..9588f70cec53 100644 --- a/website/src/pages/pl/token-api/_meta.js +++ b/website/src/pages/pl/token-api/_meta.js @@ -11,6 +11,6 @@ export default { 'tvm-dexs': titles['tvm-dexs'] ?? '', monitoring: titles['monitoring'] ?? '', 'endpoint-pricing': '', + guides: titles['guides'] ?? '', faq: '', - 'upgrade-to-v1': '', } diff --git a/website/src/pages/pl/token-api/guides/_meta-titles.json b/website/src/pages/pl/token-api/guides/_meta-titles.json new file mode 100644 index 000000000000..cd93dcc0fc0b --- /dev/null +++ b/website/src/pages/pl/token-api/guides/_meta-titles.json @@ -0,0 +1,4 @@ +{ + "gpt": "Create Custom GPTS", + "upgrade-to-v1": "" +} diff --git a/website/src/pages/pl/token-api/guides/_meta.js b/website/src/pages/pl/token-api/guides/_meta.js new file mode 100644 index 000000000000..e5aaaadd78f2 --- /dev/null +++ b/website/src/pages/pl/token-api/guides/_meta.js @@ -0,0 +1,4 @@ +export default { + gpt: '', + 'upgrade-to-v1': '', +} diff --git a/website/src/pages/pl/token-api/guides/gpt.mdx b/website/src/pages/pl/token-api/guides/gpt.mdx new file mode 100644 index 000000000000..564d013dea20 --- /dev/null +++ b/website/src/pages/pl/token-api/guides/gpt.mdx @@ -0,0 +1,121 @@ +--- +title: How the Token API Powers Custom GPTs +sidebarTitle: Create Custom GPTs +--- + +## Overview + +The Token API is a pre-indexed blockchain data service that provides real-time access to token balances, metadata, prices, liquidity, and volume across multiple chains. Developers use its REST endpoints to build wallets, trading dashboards, DeFi analytics, and AI systems without maintaining their own indexing stack. Custom GPTs can connect directly to the Token API's OpenAPI schema. + +The Token API enables developers to build **Custom GPTs** to reason over live blockchain data inside ChatGPT that can reason over and respond with live blockchain data directly inside ChatGPT. + +## What the Token API Enables in Custom GPTs + +When a Custom GPT is wired to the Token API, it gains access to a machine-readable schema and authenticated endpoints. Developers can use this to: + +- **Query real-time onchain data**: Balances, token prices, liquidity, and transaction history. +- **Automate domain-specific tasks**: Portfolio tracking, accounting, reconciliation, and market analysis. +- **Power AI agents with verifiable blockchain context**: Use the same data sources dapps rely on. + +Because the Token API provides a machine-readable schema and authenticated requests, it serves as a structured data layer that enables GPT-5 agents to combine natural language reasoning with live onchain data from The Graph. + +## When to Use the Token API for Custom GPTs + +Use the Token API when your GPT needs repeatable, domain-specific behavior grounded in blockchain data. This is most effective when the GPT performs the same type of task frequently or enforces a workflow you define. For one-off or exploratory questions, standard ChatGPT prompts are sufficient. + +## Choosing a Use Case + +Start with a clear, narrow objective, then expand as needed. Common patterns include: + +- **Accounting GPT**: Onchain accounting, tax tagging, and portfolio reconciliation. +- **Trading GPT**: Liquidity, pricing, and volume analysis for trading strategies. +- **Protocol Tracking GPT**: Real-time monitoring of transaction activity and liquidity pools. + +A focused initial goal such as “Retrieve token balances and prices for a wallet” makes it easier to configure reliable behavior before adding complex workflows. + +## Requirements + +| Requirement | Description | +| ---------------------- | -------------------------------------------------------- | +| ChatGPT 5 | Custom GPT creation requires GPT-5 tier or Pro. | +| Token API Subscription | Sign up at [The Graph Market](https://thegraph.market./) | +| Token API Key | Available in your dashboard as the Authentication JWT. | + +## Setting Up a Custom GPT + +Below is an explanatory outline of what happens during setup. This section provides conceptual understanding. + +### Create Custom GPT + +1. Visit chat.openai.com/gpts in your browser. 2, Click Create (top right). +2. Under Configure (in the top left panel), set up your GPT's personality and scope. + +### Configure Your GPT + +You define the GPT's role, scope, and metadata so it knows what it is designed to do. This includes: + +- **Name and Description**: Helps users discover your GPT. + - For example: **Name**: Token Tracker GPT **Description**: An onchain analytics assistant that retrieves live token balances, prices, and liquidity data using The Graph's Token API. +- **Instructions**: Tells the GPT what tasks it should perform using the Token API. + - For example: You are a blockchain data assistant retrieving onchain token data from The Graph's Token API. Use endpoints to fetch balances, liquidity, and price history across EVM chains. Present results in tables with token symbols, prices, and USD values. +- **Knowledge**: Optional context files such as wallet references, accounting rules, or code snippets. +- **New Action**: At the bottom, click “Create new action” to connect your GPT to the Token API. + +### Connect the Token API + +To enable live blockchain queries inside ChatGPT, you connect the GPT to the Token API through: + +#### Authentication + +1. Set Authentication to API Key → Bearer. +2. Open [The Graph Market](https://thegraph.market./) and copy your Authentication JWT from your dashboard. +3. Paste the token into the ChatGPT prompt where the field shows [HIDDEN]. + +#### Schema + +1. Above the Schema box, click Import from URL. +2. Paste: https://token-api.thegraph.com/openapi +3. Click Import. You'll now see endpoints like: + - `getV1EvmTokens` + - `getV1EvmDexes` + - `getV1EvmBalances` +4. Click Test on one (for example `getV1EvmDexes`) to verify connection. + +##### Privacy + +1. At the bottom, under Privacy, paste: https://pinax.network/en/legal/privacy + +### Privacy + +You can attach a privacy policy URL such as: https://pinax.network/en/legal/privacy + +## Example Prompt Patterns + +These examples help illustrate how a GPT reasons over Token API data. + +### Wallet and Portfolio + +Get the total USD balance for a wallet across multiple chains, returning token name, symbol, balance, and price. + +### Trading Analysis + +Compare USDC and DAI liquidity across Uniswap and Curve. Return the top 5 pools by TVL. + +### Accounting + +List all ERC-20 transfers for this address in the last 30 days. Group by token and total incoming/outgoing volume. + +## Best Practices + +| Tip | Why It Matters | +| --------------------------------- | ---------------------------------------------------------------------- | +| Scope your GPT narrowly first | Simplifies debugging and validates schema integration. | +| Use clear role instructions | Helps the GPT choose the right endpoints and avoid assumptions. | +| Name endpoints explicitly | Improves routing accuracy when fetching balances, prices, or DEX data. | +| Combine with code | Enables custom parsing or logic for complex workflows. | +| Add Subgraph or Substream context | Provides richer analytics when combined with Token API data. | + +## FAQs & Resources + +- Builders Office Hours (October 23, 2025) +- Watch the full session: https://x.com/i/broadcasts/1mrGmBzBarNJy diff --git a/website/src/pages/pl/token-api/guides/upgrade-to-v1.mdx b/website/src/pages/pl/token-api/guides/upgrade-to-v1.mdx new file mode 100644 index 000000000000..e2a7ccf973fa --- /dev/null +++ b/website/src/pages/pl/token-api/guides/upgrade-to-v1.mdx @@ -0,0 +1,346 @@ +--- +title: Upgrade to v1 +--- + +This guide covers the migration from the legacy API structure to the new v1 API. The refactoring introduces versioned endpoints, standardized query parameters, improved batching support, and consistent naming conventions. + +**Note** + +- `EVM` = Ethereum Virtual Machine + +Used to describe endpoints supporting EVM-based chains (e.g. `base`, `bsc`, `mainnet`, ...). + +- `SVM` = Solana Virtual Machine + +Used to describe endpoints supporting Solana (currently the only SVM chain supported). + +## 🔑 Breaking Changes Summary + +### 1. API Versioning + +All endpoints now use the `/v1` prefix. + +**Before:** + +``` +GET /balances/evm +GET /nft/items/contract/:contract/token_id/:token_id +``` + +**After:** + +``` +GET /v1/evm/balances +GET /v1/evm/nft/items +``` + +### 2. Route Structure Reorganization + +#### 2.1 EVM Endpoints + +Consolidated under `/v1/evm/*` + +| Old Endpoint | New Endpoint | +| ------------------------------------------------------ | ----------------------------- | +| `/balances/evm` | `/v1/evm/balances` | +| `/historical/balances/evm` | `/v1/evm/balances/historical` | +| `/holders/evm/:contract` | `/v1/evm/holders` | +| `/tokens/evm/:contract` | `/v1/evm/tokens` | +| `/transfers/evm` | `/v1/evm/transfers` | +| `/pools/evm` | `/v1/evm/pools` | +| `/swaps/evm` | `/v1/evm/swaps` | +| `/dexes/evm` | `/v1/evm/dexes` | +| `/ohlc/prices/evm/:contract` | _(removed)_ | +| `/ohlc/pools/evm/:pool` | `/v1/evm/pools/ohlc` | +| `/nft/ownerships/evm/:address` | `/v1/evm/nft/ownerships` | +| `/nft/collections/evm/:contract` | `/v1/evm/nft/collections` | +| `/nft/items/evm/contract/:contract/token_id/:token_id` | `/v1/evm/nft/items` | +| `/nft/holders/evm/:contract` | `/v1/evm/nft/holders` | +| `/nft/activities/evm` | `/v1/evm/nft/transfers` | +| `/nft/sales/evm` | `/v1/evm/nft/sales` | + +**Important:** The NFT endpoint `/nft/activities` has been renamed to `/v1/evm/nft/transfers` to better reflect its purpose. + +**Important:** The EVM Token OHLCV Data endpoint `/ohlc/prices/evm/{contract}` has been removed. You can use `/v1/evm/pools` to find stablecoin pairs for your contract and `/v1/evm/pools/ohlc` for OHLCV data for that pair. + +--- + +#### 2.2 New EVM native balances endpoint + +Native balances for EVM chains can be found under `/v1/evm/balances/native`. They will not show up in the `/v1/evm/balances` endpoint. + +Other endpoints can still use native token under the `0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee` contract. + +--- + +#### 2.3 SVM Endpoints + +Consolidated under `/v1/svm/*` + +| Old Endpoint | New Endpoint | +| ------------------------ | ------------------------- | +| `/balances/svm` | `/v1/svm/balances` | +| `/balances/native/svm` | `/v1/svm/balances/native` | +| `/holders/svm/:contract` | `/v1/svm/holders` | +| `/tokens/svm/:mint` | `/v1/svm/tokens` | +| `/transfers/svm` | `/v1/svm/transfers` | +| `/pools/svm` | `/v1/svm/pools` | +| `/swaps/svm` | `/v1/svm/swaps` | +| `/dexes/svm` | `/v1/svm/dexes` | +| `/owner/svm/:account` | `/v1/svm/owner` | +| `/ohlc/pools/svm/:pool` | `/v1/svm/pools/ohlc` | + +## 📝 Parameter Changes + +### 3. Path Parameters → Query Parameters + +All path parameters have been moved to query parameters. + +**Before:** + +```bash +GET /balances/evm/:address +GET /holders/evm/:contract +GET /nft/items/evm/contract/:contract/token_id/:token_id +``` + +**After:** + +```bash +GET /v1/evm/balances?network=mainnet&address=0x... +GET /v1/evm/holders?network=mainnet&contract=0x... +GET /v1/evm/nft/items?network=mainnet&contract=0x...&token_id=5712 +``` + +### 4. Standardized Parameter Naming + +All query parameters have been standardized to use snake_case naming convention. + +| Old Parameter | New Parameter | Notes | +| --- | --- | --- | +| `network_id` | `network` | Renamed, `matic` has also been renamed to `polygon` | +| `anyAddress` | `address` | Matches either `from` or `to` address | +| `from`, `fromAddress`, `offererAddress` | `from_address`, `offerer` | - | +| `to`, `toAddress`, `recipientAddress` | `to_address`, `recipient` | - | +| `startTime` | `start_time` | Default: `1735689600` (`2025-01-01`) | +| `endTime` | `end_time` | Default: `9999999999` | +| - | `start_block` | New parameter, default: `0` | +| - | `end_block` | New parameter, default: `9999999999` | +| - | `include_null_balances` | New parameter, default: `false` | +| `tx_hash` | `transaction_id` | - | +| `token` | `input_token`, `output_token` | More explicit for pool queries | +| `pool` | `amm_pool` | - | +| `orderBy`, `orderDirection` | _(removed)_ | Always sorted by most recent timestamp first | + +**Important:** The `network_id` parameter has been renamed to `network`. + +**Important:** `matic` network has been renamed to `polygon`. + +### 5. Batched Parameters + +Many parameters now support batching - accepting single values or comma-separated strings. + +**Supported Batched Parameters:** + +- `address`, `from_address`, `to_address` +- `contract`, `token_id` +- `factory`, `pool` +- `owner`, `token_account`, `mint` +- `transaction_id`, `signature` + +**Examples:** + +```console +## Single value +?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 + +## Comma-separated, single parameter +?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 + +## Repeated parameter values +?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&contract=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 +``` + +### 6. New Parameters + +#### `include_null_balances` + +Added to balance endpoints to optionally include zero/null balances. + +```bash +?include_null_balances=true +``` + +**Default:** `false` + +## 🔄 Response Changes + +### 7. Pagination Changes + +Pagination responses have been simplified. The API no longer computes total result counts due to performance and accuracy considerations when working with ClickHouse views and materialized tables. + +**Before:** + +```json +{ + "pagination": { + "previous_page": 1, + "current_page": 2, + "next_page": 3, + "total_pages": 10 + }, + "total_results": 1234 +} +``` + +**After:** + +```json +{ + "pagination": { + "previous_page": 1, + "current_page": 2 + } +} +``` + +**Removed fields:** + +- `next_page` +- `total_pages` +- `total_results` + +**Important:** To retrieve all results, continue incrementing the `page` parameter until the API returns an empty `data` array. This indicates you've reached the end of the results. + +### 8. Removed Parameters + +The following deprecated parameters have been removed: + +- `orderBy` - Results are now ordered by timestamp/block by default +- `orderDirection` - Always descending (newest first) + +### 9. Cached Queries + +Queries are now cached on the ClickHouse side for better performance. + +You can specifically request to not use the cache by setting the `Cache-Control` header to `no-cache`. + +#### Example + +**Cache** + +```console +$ curl -s 'https://token-api.thegraph.com/v1/...' | jq .statistics +{ + "bytes_read": 221, + "rows_read": 1, + "elapsed": 0.002212065 +} +``` + +**No cache** + +```console +$ curl -s 'http://localhost:8000/v1/...' --header 'Cache-Control: no-cache' | jq .statistics +{ + "bytes_read": 14621174348, + "rows_read": 223244390, + "elapsed": 0.971064066 +} +``` + +## 📚 Example Migrations + +### Example 1: Get Token Balances + +**Before:** + +```bash +GET /token/balances/evm/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045?network_id=mainnet&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 +``` + +**After:** + +```bash +GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 +``` + +### Example 2: Get NFT Items + +**Before:** + +```bash +GET /nft/items/evm/contract/0xbd3531da5cf5857e7cfaa92426877b022e612cf8/token_id/5712?network_id=mainnet +``` + +**After:** + +```bash +GET /v1/evm/nft/items?network=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&token_id=5712 +``` + +### Example 3: Get Token Transfers with Time Filter + +**Before:** + +```bash +GET /token/transfers/evm?network_id=mainnet&from=0xd8da6bf26964af9d7eed9e03e53415d37aa96045&startTime=1735689600&endTime=1767225600 +``` + +**After:** + +```bash +GET /v1/evm/transfers?network=mainnet&from_address=0xd8da6bf26964af9d7eed9e03e53415d37aa96045&start_time=1735689600&end_time=1767225600 +``` + +### Example 4: Get NFT Transfer Activities + +**Before:** + +```bash +GET /nft/activities/evm?network_id=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&anyAddress=0xd8da6bf26964af9d7eed9e03e53415d37aa96045 +``` + +**After:** + +```bash +GET /v1/evm/nft/transfers?network=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&address=0xd8da6bf26964af9d7eed9e03e53415d37aa96045 +``` + +### Example 5: Get Pool OHLC Data + +**Before:** + +```bash +GET /token/ohlc/pools/evm/0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640?network_id=mainnet&interval=1h&startTime=1735689600 +``` + +**After:** + +```bash +GET /v1/evm/pools/ohlc?network=mainnet&pool=0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640&interval=1h&start_time=1735689600 +``` + +### Example 6: Batched Query (New Feature) + +Query balances for multiple contracts in a single request: + +```bash +GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 +``` + +Query transfers from multiple addresses: + +```bash +GET /v1/evm/transfers?network=mainnet&from_address=0xabc...,0xdef...,0x123...&start_time=1735689600 +``` + +## ⚠️ Important Notes + +1. **Migration Notes:** The old endpoints were deprecated and removed on **October 30, 2025**. Please ensure all integrations have been migrated to the new Token API v1 endpoints. + +2. **Default Sorting:** All results are now sorted by timestamp (descending) by default. Custom sorting is no longer supported. + +3. **Pagination:** Continue paging through results by incrementing the `page` parameter until you receive an empty `data` array. The API no longer provides total counts due to performance optimizations with ClickHouse. + +4. **Time Defaults:** If you previously relied on fetching all historical data without time filters, note that `start_time` now defaults to `2025-01-01`. Adjust accordingly if you need earlier data. diff --git a/website/src/pages/pl/token-api/upgrade-to-v1.mdx b/website/src/pages/pl/token-api/upgrade-to-v1.mdx deleted file mode 100644 index fbe09101eaa5..000000000000 --- a/website/src/pages/pl/token-api/upgrade-to-v1.mdx +++ /dev/null @@ -1,254 +0,0 @@ ---- -title: Upgrade to v1 ---- - -This guide covers the migration from the legacy API structure to the new v1 API. The refactoring introduces versioned endpoints, standardized query parameters, improved batching support, and consistent naming conventions. - -**Note** - -- `EVM` = Ethereum Virtual Machine - -Used to describe endpoints supporting EVM-based chains (e.g. `base`, `bsc`, `mainnet`, ...). - -- `SVM` = Solana Virtual Machine - -Used to describe endpoints supporting Solana (currently the only SVM chain supported). - -## 🔑 Breaking Changes Summary - -### 1. **API Versioning** - -All endpoints now use the `/v1` prefix. - -**Before:** - -``` -GET /balances/evm -GET /nft/items/contract/:contract/token_id/:token_id -``` - -**After:** - -``` -GET /v1/evm/balances -GET /v1/evm/nft/items -``` - -### 2. **Route Structure Reorganization** - -#### 2.1 EVM Endpoints - -Consolidated under `/v1/evm/*` - -| Old Endpoint | New Endpoint | -| ------------------------------------------------------ | ----------------------------- | -| `/balances/evm` | `/v1/evm/balances` | -| `/historical/balances/evm` | `/v1/evm/balances/historical` | -| `/holders/evm/:contract` | `/v1/evm/holders` | -| `/tokens/evm/:contract` | `/v1/evm/tokens` | -| `/transfers/evm` | `/v1/evm/transfers` | -| `/pools/evm` | `/v1/evm/pools` | -| `/swaps/evm` | `/v1/evm/swaps` | -| `/dexes/evm` | `/v1/evm/dexes` | -| `/ohlc/prices/evm/:contract` | _(removed)_ | -| `/ohlc/pools/evm/:pool` | `/v1/evm/pools/ohlc` | -| `/nft/ownerships/evm/:address` | `/v1/evm/nft/ownerships` | -| `/nft/collections/evm/:contract` | `/v1/evm/nft/collections` | -| `/nft/items/evm/contract/:contract/token_id/:token_id` | `/v1/evm/nft/items` | -| `/nft/holders/evm/:contract` | `/v1/evm/nft/holders` | -| `/nft/activities/evm` | `/v1/evm/nft/transfers` | -| `/nft/sales/evm` | `/v1/evm/nft/sales` | - -**Important:** The NFT endpoint `/nft/activities` has been renamed to `/v1/evm/nft/transfers` to better reflect its purpose. - -**Important:** The EVM Token OHLCV Data endpoint `/ohlc/prices/evm/{contract}` has been removed. You can use `/v1/evm/pools` to find stablecoin pairs for your contract and `/v1/evm/pools/ohlc` for OHLCV data for that pair. - ---- - -#### 2.2 New EVM native balances endpoint - -Native balances for EVM chains can be found under `/v1/evm/balances/native`. They will not show up in the `/v1/evm/balances` endpoint. - -Other endpoints can still use native token under the `0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee` contract. - ---- - -#### 2.3 SVM Endpoints - -Consolidated under `/v1/svm/*` - -| Old Endpoint | New Endpoint | -| ------------------------ | ------------------------- | -| `/balances/svm` | `/v1/svm/balances` | -| `/balances/native/svm` | `/v1/svm/balances/native` | -| `/holders/svm/:contract` | `/v1/svm/holders` | -| `/tokens/svm/:mint` | `/v1/svm/tokens` | -| `/transfers/svm` | `/v1/svm/transfers` | -| `/pools/svm` | `/v1/svm/pools` | -| `/swaps/svm` | `/v1/svm/swaps` | -| `/dexes/svm` | `/v1/svm/dexes` | -| `/owner/svm/:account` | `/v1/svm/owner` | -| `/ohlc/pools/svm/:pool` | `/v1/svm/pools/ohlc` | - -## 📝 Parameter Changes - -### 3. **Path Parameters → Query Parameters** - -All path parameters have been moved to query parameters. - -**Before:** - -```bash -GET /balances/evm/:address -GET /holders/evm/:contract -GET /nft/items/evm/contract/:contract/token_id/:token_id -``` - -**After:** - -```bash -GET /v1/evm/balances?network=mainnet&address=0x... -GET /v1/evm/holders?network=mainnet&contract=0x... -GET /v1/evm/nft/items?network=mainnet&contract=0x...&token_id=5712 -``` - -### 4. **Standardized Parameter Naming** - -All query parameters have been standardized to use snake_case naming convention. - -| Old Parameter | New Parameter | Notes | -| --- | --- | --- | -| `network_id` | `network` | Renamed, `matic` has also been renamed to `polygon` | -| `anyAddress` | `address` | Matches either `from` or `to` address | -| `from`, `fromAddress`, `offererAddress` | `from_address`, `offerer` | - | -| `to`, `toAddress`, `recipientAddress` | `to_address`, `recipient` | - | -| `startTime` | `start_time` | Default: `1735689600` (`2025-01-01`) | -| `endTime` | `end_time` | Default: `9999999999` | -| - | `start_block` | New parameter, default: `0` | -| - | `end_block` | New parameter, default: `9999999999` | -| - | `include_null_balances` | New parameter, default: `false` | -| `tx_hash` | `transaction_id` | - | -| `token` | `input_token`, `output_token` | More explicit for pool queries | -| `pool` | `amm_pool` | - | -| `orderBy`, `orderDirection` | _(removed)_ | Always sorted by most recent timestamp first | - -**Important:** The `network_id` parameter has been renamed to `network`. - -**Important:** `matic` network has been renamed to `polygon`. - -### 5. **Batched Parameters** - -Many parameters now support batching - accepting single values or comma-separated strings. - -**Supported Batched Parameters:** - -- `address`, `from_address`, `to_address` -- `contract`, `token_id` -- `factory`, `pool` -- `owner`, `token_account`, `mint` -- `transaction_id`, `signature` - -**Examples:** - -```console -# Single value -?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 - -# Comma-separated, single parameter -?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 - -# Repeated parameter values -?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&contract=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 -``` - -### 6. **New Parameters** - -#### `include_null_balances` - -Added to balance endpoints to optionally include zero/null balances. - -```bash -?include_null_balances=true -``` - -**Default:** `false` - -## 🔄 Response Changes - -### 7. **Pagination Changes** - -Pagination responses have been simplified. The API no longer computes total result counts due to performance and accuracy considerations when working with ClickHouse views and materialized tables. - -**Before:** - -```json -{ - "pagination": { - "previous_page": 1, - "current_page": 2, - "next_page": 3, - "total_pages": 10 - }, - "total_results": 1234 -} -``` - -**After:** - -```json -{ - "pagination": { - "previous_page": 1, - "current_page": 2 - } -} -``` - -**Removed fields:** - -- `next_page` -- `total_pages` -- `total_results` - -**Important:** To retrieve all results, continue incrementing the `page` parameter until the API returns an empty `data` array. This indicates you've reached the end of the results. - -### 8. **Removed Parameters** - -The following deprecated parameters have been removed: - -- `orderBy` - Results are now ordered by timestamp/block by default -- `orderDirection` - Always descending (newest first) - -## 📚 Example Migrations - -### Old vs New: Get Token Balances - -**Before:** - -```bash -GET /balances/evm/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045?network_id=mainnet&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 -``` - -**After:** - -```bash -GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 -``` - -### New Feature: Batched Queries - -Query balances for multiple contracts in a single request: - -```bash -GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 -``` - -## ⚠️ Important Notes - -1. **Backward Compatibility:** The old endpoints are deprecated and will be removed in the future. Migrate by **Oct 30, 2025**. - -2. **Default Sorting:** All results are now sorted by timestamp (descending) by default. Custom sorting is no longer supported. - -3. **Pagination:** Continue paging through results by incrementing the `page` parameter until you receive an empty `data` array. The API no longer provides total counts due to performance optimizations with ClickHouse. - -4. **Time Defaults:** If you previously relied on fetching all historical data without time filters, note that `start_time` now defaults to `2025-01-01`. Adjust accordingly if you need earlier data. diff --git a/website/src/pages/pt/index.json b/website/src/pages/pt/index.json index c4b5c926f747..eb2c9ce7b524 100644 --- a/website/src/pages/pt/index.json +++ b/website/src/pages/pt/index.json @@ -2,7 +2,7 @@ "title": "Início", "hero": { "title": "Documentação do The Graph", - "description": "The Graph is a blockchain data solution that powers applications, analytics, and AI on 90+ chains. The Graph's core products include the Token API for web3 apps, Subgraphs for indexing smart contracts, and Substreams for real-time and historical data streaming.", + "description": "The Graph is a blockchain data solution that powers applications, analytics, and AI on 80+ chains. The Graph's core products include the Token API for web3 apps, Subgraphs for indexing smart contracts, and Substreams for real-time and historical data streaming.", "cta1": "Como o The Graph funciona", "cta2": "Construa o seu primeiro subgraph" }, diff --git a/website/src/pages/pt/subgraphs/guides/_meta.js b/website/src/pages/pt/subgraphs/guides/_meta.js index fd5608dcceb2..1c081848ea08 100644 --- a/website/src/pages/pt/subgraphs/guides/_meta.js +++ b/website/src/pages/pt/subgraphs/guides/_meta.js @@ -2,7 +2,6 @@ export default { 'subgraph-composition': '', 'subgraph-debug-forking': '', near: '', - grafting: '', 'subgraph-uncrashable': '', 'transfer-to-the-graph': '', diff --git a/website/src/pages/pt/token-api/_meta.js b/website/src/pages/pt/token-api/_meta.js index a8624da52e7f..9588f70cec53 100644 --- a/website/src/pages/pt/token-api/_meta.js +++ b/website/src/pages/pt/token-api/_meta.js @@ -11,6 +11,6 @@ export default { 'tvm-dexs': titles['tvm-dexs'] ?? '', monitoring: titles['monitoring'] ?? '', 'endpoint-pricing': '', + guides: titles['guides'] ?? '', faq: '', - 'upgrade-to-v1': '', } diff --git a/website/src/pages/pt/token-api/guides/_meta-titles.json b/website/src/pages/pt/token-api/guides/_meta-titles.json new file mode 100644 index 000000000000..cd93dcc0fc0b --- /dev/null +++ b/website/src/pages/pt/token-api/guides/_meta-titles.json @@ -0,0 +1,4 @@ +{ + "gpt": "Create Custom GPTS", + "upgrade-to-v1": "" +} diff --git a/website/src/pages/pt/token-api/guides/_meta.js b/website/src/pages/pt/token-api/guides/_meta.js new file mode 100644 index 000000000000..e5aaaadd78f2 --- /dev/null +++ b/website/src/pages/pt/token-api/guides/_meta.js @@ -0,0 +1,4 @@ +export default { + gpt: '', + 'upgrade-to-v1': '', +} diff --git a/website/src/pages/pt/token-api/guides/gpt.mdx b/website/src/pages/pt/token-api/guides/gpt.mdx new file mode 100644 index 000000000000..564d013dea20 --- /dev/null +++ b/website/src/pages/pt/token-api/guides/gpt.mdx @@ -0,0 +1,121 @@ +--- +title: How the Token API Powers Custom GPTs +sidebarTitle: Create Custom GPTs +--- + +## Overview + +The Token API is a pre-indexed blockchain data service that provides real-time access to token balances, metadata, prices, liquidity, and volume across multiple chains. Developers use its REST endpoints to build wallets, trading dashboards, DeFi analytics, and AI systems without maintaining their own indexing stack. Custom GPTs can connect directly to the Token API's OpenAPI schema. + +The Token API enables developers to build **Custom GPTs** to reason over live blockchain data inside ChatGPT that can reason over and respond with live blockchain data directly inside ChatGPT. + +## What the Token API Enables in Custom GPTs + +When a Custom GPT is wired to the Token API, it gains access to a machine-readable schema and authenticated endpoints. Developers can use this to: + +- **Query real-time onchain data**: Balances, token prices, liquidity, and transaction history. +- **Automate domain-specific tasks**: Portfolio tracking, accounting, reconciliation, and market analysis. +- **Power AI agents with verifiable blockchain context**: Use the same data sources dapps rely on. + +Because the Token API provides a machine-readable schema and authenticated requests, it serves as a structured data layer that enables GPT-5 agents to combine natural language reasoning with live onchain data from The Graph. + +## When to Use the Token API for Custom GPTs + +Use the Token API when your GPT needs repeatable, domain-specific behavior grounded in blockchain data. This is most effective when the GPT performs the same type of task frequently or enforces a workflow you define. For one-off or exploratory questions, standard ChatGPT prompts are sufficient. + +## Choosing a Use Case + +Start with a clear, narrow objective, then expand as needed. Common patterns include: + +- **Accounting GPT**: Onchain accounting, tax tagging, and portfolio reconciliation. +- **Trading GPT**: Liquidity, pricing, and volume analysis for trading strategies. +- **Protocol Tracking GPT**: Real-time monitoring of transaction activity and liquidity pools. + +A focused initial goal such as “Retrieve token balances and prices for a wallet” makes it easier to configure reliable behavior before adding complex workflows. + +## Requirements + +| Requirement | Description | +| ---------------------- | -------------------------------------------------------- | +| ChatGPT 5 | Custom GPT creation requires GPT-5 tier or Pro. | +| Token API Subscription | Sign up at [The Graph Market](https://thegraph.market./) | +| Token API Key | Available in your dashboard as the Authentication JWT. | + +## Setting Up a Custom GPT + +Below is an explanatory outline of what happens during setup. This section provides conceptual understanding. + +### Create Custom GPT + +1. Visit chat.openai.com/gpts in your browser. 2, Click Create (top right). +2. Under Configure (in the top left panel), set up your GPT's personality and scope. + +### Configure Your GPT + +You define the GPT's role, scope, and metadata so it knows what it is designed to do. This includes: + +- **Name and Description**: Helps users discover your GPT. + - For example: **Name**: Token Tracker GPT **Description**: An onchain analytics assistant that retrieves live token balances, prices, and liquidity data using The Graph's Token API. +- **Instructions**: Tells the GPT what tasks it should perform using the Token API. + - For example: You are a blockchain data assistant retrieving onchain token data from The Graph's Token API. Use endpoints to fetch balances, liquidity, and price history across EVM chains. Present results in tables with token symbols, prices, and USD values. +- **Knowledge**: Optional context files such as wallet references, accounting rules, or code snippets. +- **New Action**: At the bottom, click “Create new action” to connect your GPT to the Token API. + +### Connect the Token API + +To enable live blockchain queries inside ChatGPT, you connect the GPT to the Token API through: + +#### Authentication + +1. Set Authentication to API Key → Bearer. +2. Open [The Graph Market](https://thegraph.market./) and copy your Authentication JWT from your dashboard. +3. Paste the token into the ChatGPT prompt where the field shows [HIDDEN]. + +#### Schema + +1. Above the Schema box, click Import from URL. +2. Paste: https://token-api.thegraph.com/openapi +3. Click Import. You'll now see endpoints like: + - `getV1EvmTokens` + - `getV1EvmDexes` + - `getV1EvmBalances` +4. Click Test on one (for example `getV1EvmDexes`) to verify connection. + +##### Privacy + +1. At the bottom, under Privacy, paste: https://pinax.network/en/legal/privacy + +### Privacy + +You can attach a privacy policy URL such as: https://pinax.network/en/legal/privacy + +## Example Prompt Patterns + +These examples help illustrate how a GPT reasons over Token API data. + +### Wallet and Portfolio + +Get the total USD balance for a wallet across multiple chains, returning token name, symbol, balance, and price. + +### Trading Analysis + +Compare USDC and DAI liquidity across Uniswap and Curve. Return the top 5 pools by TVL. + +### Accounting + +List all ERC-20 transfers for this address in the last 30 days. Group by token and total incoming/outgoing volume. + +## Best Practices + +| Tip | Why It Matters | +| --------------------------------- | ---------------------------------------------------------------------- | +| Scope your GPT narrowly first | Simplifies debugging and validates schema integration. | +| Use clear role instructions | Helps the GPT choose the right endpoints and avoid assumptions. | +| Name endpoints explicitly | Improves routing accuracy when fetching balances, prices, or DEX data. | +| Combine with code | Enables custom parsing or logic for complex workflows. | +| Add Subgraph or Substream context | Provides richer analytics when combined with Token API data. | + +## FAQs & Resources + +- Builders Office Hours (October 23, 2025) +- Watch the full session: https://x.com/i/broadcasts/1mrGmBzBarNJy diff --git a/website/src/pages/pt/token-api/guides/upgrade-to-v1.mdx b/website/src/pages/pt/token-api/guides/upgrade-to-v1.mdx new file mode 100644 index 000000000000..e2a7ccf973fa --- /dev/null +++ b/website/src/pages/pt/token-api/guides/upgrade-to-v1.mdx @@ -0,0 +1,346 @@ +--- +title: Upgrade to v1 +--- + +This guide covers the migration from the legacy API structure to the new v1 API. The refactoring introduces versioned endpoints, standardized query parameters, improved batching support, and consistent naming conventions. + +**Note** + +- `EVM` = Ethereum Virtual Machine + +Used to describe endpoints supporting EVM-based chains (e.g. `base`, `bsc`, `mainnet`, ...). + +- `SVM` = Solana Virtual Machine + +Used to describe endpoints supporting Solana (currently the only SVM chain supported). + +## 🔑 Breaking Changes Summary + +### 1. API Versioning + +All endpoints now use the `/v1` prefix. + +**Before:** + +``` +GET /balances/evm +GET /nft/items/contract/:contract/token_id/:token_id +``` + +**After:** + +``` +GET /v1/evm/balances +GET /v1/evm/nft/items +``` + +### 2. Route Structure Reorganization + +#### 2.1 EVM Endpoints + +Consolidated under `/v1/evm/*` + +| Old Endpoint | New Endpoint | +| ------------------------------------------------------ | ----------------------------- | +| `/balances/evm` | `/v1/evm/balances` | +| `/historical/balances/evm` | `/v1/evm/balances/historical` | +| `/holders/evm/:contract` | `/v1/evm/holders` | +| `/tokens/evm/:contract` | `/v1/evm/tokens` | +| `/transfers/evm` | `/v1/evm/transfers` | +| `/pools/evm` | `/v1/evm/pools` | +| `/swaps/evm` | `/v1/evm/swaps` | +| `/dexes/evm` | `/v1/evm/dexes` | +| `/ohlc/prices/evm/:contract` | _(removed)_ | +| `/ohlc/pools/evm/:pool` | `/v1/evm/pools/ohlc` | +| `/nft/ownerships/evm/:address` | `/v1/evm/nft/ownerships` | +| `/nft/collections/evm/:contract` | `/v1/evm/nft/collections` | +| `/nft/items/evm/contract/:contract/token_id/:token_id` | `/v1/evm/nft/items` | +| `/nft/holders/evm/:contract` | `/v1/evm/nft/holders` | +| `/nft/activities/evm` | `/v1/evm/nft/transfers` | +| `/nft/sales/evm` | `/v1/evm/nft/sales` | + +**Important:** The NFT endpoint `/nft/activities` has been renamed to `/v1/evm/nft/transfers` to better reflect its purpose. + +**Important:** The EVM Token OHLCV Data endpoint `/ohlc/prices/evm/{contract}` has been removed. You can use `/v1/evm/pools` to find stablecoin pairs for your contract and `/v1/evm/pools/ohlc` for OHLCV data for that pair. + +--- + +#### 2.2 New EVM native balances endpoint + +Native balances for EVM chains can be found under `/v1/evm/balances/native`. They will not show up in the `/v1/evm/balances` endpoint. + +Other endpoints can still use native token under the `0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee` contract. + +--- + +#### 2.3 SVM Endpoints + +Consolidated under `/v1/svm/*` + +| Old Endpoint | New Endpoint | +| ------------------------ | ------------------------- | +| `/balances/svm` | `/v1/svm/balances` | +| `/balances/native/svm` | `/v1/svm/balances/native` | +| `/holders/svm/:contract` | `/v1/svm/holders` | +| `/tokens/svm/:mint` | `/v1/svm/tokens` | +| `/transfers/svm` | `/v1/svm/transfers` | +| `/pools/svm` | `/v1/svm/pools` | +| `/swaps/svm` | `/v1/svm/swaps` | +| `/dexes/svm` | `/v1/svm/dexes` | +| `/owner/svm/:account` | `/v1/svm/owner` | +| `/ohlc/pools/svm/:pool` | `/v1/svm/pools/ohlc` | + +## 📝 Parameter Changes + +### 3. Path Parameters → Query Parameters + +All path parameters have been moved to query parameters. + +**Before:** + +```bash +GET /balances/evm/:address +GET /holders/evm/:contract +GET /nft/items/evm/contract/:contract/token_id/:token_id +``` + +**After:** + +```bash +GET /v1/evm/balances?network=mainnet&address=0x... +GET /v1/evm/holders?network=mainnet&contract=0x... +GET /v1/evm/nft/items?network=mainnet&contract=0x...&token_id=5712 +``` + +### 4. Standardized Parameter Naming + +All query parameters have been standardized to use snake_case naming convention. + +| Old Parameter | New Parameter | Notes | +| --- | --- | --- | +| `network_id` | `network` | Renamed, `matic` has also been renamed to `polygon` | +| `anyAddress` | `address` | Matches either `from` or `to` address | +| `from`, `fromAddress`, `offererAddress` | `from_address`, `offerer` | - | +| `to`, `toAddress`, `recipientAddress` | `to_address`, `recipient` | - | +| `startTime` | `start_time` | Default: `1735689600` (`2025-01-01`) | +| `endTime` | `end_time` | Default: `9999999999` | +| - | `start_block` | New parameter, default: `0` | +| - | `end_block` | New parameter, default: `9999999999` | +| - | `include_null_balances` | New parameter, default: `false` | +| `tx_hash` | `transaction_id` | - | +| `token` | `input_token`, `output_token` | More explicit for pool queries | +| `pool` | `amm_pool` | - | +| `orderBy`, `orderDirection` | _(removed)_ | Always sorted by most recent timestamp first | + +**Important:** The `network_id` parameter has been renamed to `network`. + +**Important:** `matic` network has been renamed to `polygon`. + +### 5. Batched Parameters + +Many parameters now support batching - accepting single values or comma-separated strings. + +**Supported Batched Parameters:** + +- `address`, `from_address`, `to_address` +- `contract`, `token_id` +- `factory`, `pool` +- `owner`, `token_account`, `mint` +- `transaction_id`, `signature` + +**Examples:** + +```console +## Single value +?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 + +## Comma-separated, single parameter +?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 + +## Repeated parameter values +?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&contract=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 +``` + +### 6. New Parameters + +#### `include_null_balances` + +Added to balance endpoints to optionally include zero/null balances. + +```bash +?include_null_balances=true +``` + +**Default:** `false` + +## 🔄 Response Changes + +### 7. Pagination Changes + +Pagination responses have been simplified. The API no longer computes total result counts due to performance and accuracy considerations when working with ClickHouse views and materialized tables. + +**Before:** + +```json +{ + "pagination": { + "previous_page": 1, + "current_page": 2, + "next_page": 3, + "total_pages": 10 + }, + "total_results": 1234 +} +``` + +**After:** + +```json +{ + "pagination": { + "previous_page": 1, + "current_page": 2 + } +} +``` + +**Removed fields:** + +- `next_page` +- `total_pages` +- `total_results` + +**Important:** To retrieve all results, continue incrementing the `page` parameter until the API returns an empty `data` array. This indicates you've reached the end of the results. + +### 8. Removed Parameters + +The following deprecated parameters have been removed: + +- `orderBy` - Results are now ordered by timestamp/block by default +- `orderDirection` - Always descending (newest first) + +### 9. Cached Queries + +Queries are now cached on the ClickHouse side for better performance. + +You can specifically request to not use the cache by setting the `Cache-Control` header to `no-cache`. + +#### Example + +**Cache** + +```console +$ curl -s 'https://token-api.thegraph.com/v1/...' | jq .statistics +{ + "bytes_read": 221, + "rows_read": 1, + "elapsed": 0.002212065 +} +``` + +**No cache** + +```console +$ curl -s 'http://localhost:8000/v1/...' --header 'Cache-Control: no-cache' | jq .statistics +{ + "bytes_read": 14621174348, + "rows_read": 223244390, + "elapsed": 0.971064066 +} +``` + +## 📚 Example Migrations + +### Example 1: Get Token Balances + +**Before:** + +```bash +GET /token/balances/evm/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045?network_id=mainnet&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 +``` + +**After:** + +```bash +GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 +``` + +### Example 2: Get NFT Items + +**Before:** + +```bash +GET /nft/items/evm/contract/0xbd3531da5cf5857e7cfaa92426877b022e612cf8/token_id/5712?network_id=mainnet +``` + +**After:** + +```bash +GET /v1/evm/nft/items?network=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&token_id=5712 +``` + +### Example 3: Get Token Transfers with Time Filter + +**Before:** + +```bash +GET /token/transfers/evm?network_id=mainnet&from=0xd8da6bf26964af9d7eed9e03e53415d37aa96045&startTime=1735689600&endTime=1767225600 +``` + +**After:** + +```bash +GET /v1/evm/transfers?network=mainnet&from_address=0xd8da6bf26964af9d7eed9e03e53415d37aa96045&start_time=1735689600&end_time=1767225600 +``` + +### Example 4: Get NFT Transfer Activities + +**Before:** + +```bash +GET /nft/activities/evm?network_id=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&anyAddress=0xd8da6bf26964af9d7eed9e03e53415d37aa96045 +``` + +**After:** + +```bash +GET /v1/evm/nft/transfers?network=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&address=0xd8da6bf26964af9d7eed9e03e53415d37aa96045 +``` + +### Example 5: Get Pool OHLC Data + +**Before:** + +```bash +GET /token/ohlc/pools/evm/0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640?network_id=mainnet&interval=1h&startTime=1735689600 +``` + +**After:** + +```bash +GET /v1/evm/pools/ohlc?network=mainnet&pool=0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640&interval=1h&start_time=1735689600 +``` + +### Example 6: Batched Query (New Feature) + +Query balances for multiple contracts in a single request: + +```bash +GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 +``` + +Query transfers from multiple addresses: + +```bash +GET /v1/evm/transfers?network=mainnet&from_address=0xabc...,0xdef...,0x123...&start_time=1735689600 +``` + +## ⚠️ Important Notes + +1. **Migration Notes:** The old endpoints were deprecated and removed on **October 30, 2025**. Please ensure all integrations have been migrated to the new Token API v1 endpoints. + +2. **Default Sorting:** All results are now sorted by timestamp (descending) by default. Custom sorting is no longer supported. + +3. **Pagination:** Continue paging through results by incrementing the `page` parameter until you receive an empty `data` array. The API no longer provides total counts due to performance optimizations with ClickHouse. + +4. **Time Defaults:** If you previously relied on fetching all historical data without time filters, note that `start_time` now defaults to `2025-01-01`. Adjust accordingly if you need earlier data. diff --git a/website/src/pages/pt/token-api/upgrade-to-v1.mdx b/website/src/pages/pt/token-api/upgrade-to-v1.mdx deleted file mode 100644 index fbe09101eaa5..000000000000 --- a/website/src/pages/pt/token-api/upgrade-to-v1.mdx +++ /dev/null @@ -1,254 +0,0 @@ ---- -title: Upgrade to v1 ---- - -This guide covers the migration from the legacy API structure to the new v1 API. The refactoring introduces versioned endpoints, standardized query parameters, improved batching support, and consistent naming conventions. - -**Note** - -- `EVM` = Ethereum Virtual Machine - -Used to describe endpoints supporting EVM-based chains (e.g. `base`, `bsc`, `mainnet`, ...). - -- `SVM` = Solana Virtual Machine - -Used to describe endpoints supporting Solana (currently the only SVM chain supported). - -## 🔑 Breaking Changes Summary - -### 1. **API Versioning** - -All endpoints now use the `/v1` prefix. - -**Before:** - -``` -GET /balances/evm -GET /nft/items/contract/:contract/token_id/:token_id -``` - -**After:** - -``` -GET /v1/evm/balances -GET /v1/evm/nft/items -``` - -### 2. **Route Structure Reorganization** - -#### 2.1 EVM Endpoints - -Consolidated under `/v1/evm/*` - -| Old Endpoint | New Endpoint | -| ------------------------------------------------------ | ----------------------------- | -| `/balances/evm` | `/v1/evm/balances` | -| `/historical/balances/evm` | `/v1/evm/balances/historical` | -| `/holders/evm/:contract` | `/v1/evm/holders` | -| `/tokens/evm/:contract` | `/v1/evm/tokens` | -| `/transfers/evm` | `/v1/evm/transfers` | -| `/pools/evm` | `/v1/evm/pools` | -| `/swaps/evm` | `/v1/evm/swaps` | -| `/dexes/evm` | `/v1/evm/dexes` | -| `/ohlc/prices/evm/:contract` | _(removed)_ | -| `/ohlc/pools/evm/:pool` | `/v1/evm/pools/ohlc` | -| `/nft/ownerships/evm/:address` | `/v1/evm/nft/ownerships` | -| `/nft/collections/evm/:contract` | `/v1/evm/nft/collections` | -| `/nft/items/evm/contract/:contract/token_id/:token_id` | `/v1/evm/nft/items` | -| `/nft/holders/evm/:contract` | `/v1/evm/nft/holders` | -| `/nft/activities/evm` | `/v1/evm/nft/transfers` | -| `/nft/sales/evm` | `/v1/evm/nft/sales` | - -**Important:** The NFT endpoint `/nft/activities` has been renamed to `/v1/evm/nft/transfers` to better reflect its purpose. - -**Important:** The EVM Token OHLCV Data endpoint `/ohlc/prices/evm/{contract}` has been removed. You can use `/v1/evm/pools` to find stablecoin pairs for your contract and `/v1/evm/pools/ohlc` for OHLCV data for that pair. - ---- - -#### 2.2 New EVM native balances endpoint - -Native balances for EVM chains can be found under `/v1/evm/balances/native`. They will not show up in the `/v1/evm/balances` endpoint. - -Other endpoints can still use native token under the `0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee` contract. - ---- - -#### 2.3 SVM Endpoints - -Consolidated under `/v1/svm/*` - -| Old Endpoint | New Endpoint | -| ------------------------ | ------------------------- | -| `/balances/svm` | `/v1/svm/balances` | -| `/balances/native/svm` | `/v1/svm/balances/native` | -| `/holders/svm/:contract` | `/v1/svm/holders` | -| `/tokens/svm/:mint` | `/v1/svm/tokens` | -| `/transfers/svm` | `/v1/svm/transfers` | -| `/pools/svm` | `/v1/svm/pools` | -| `/swaps/svm` | `/v1/svm/swaps` | -| `/dexes/svm` | `/v1/svm/dexes` | -| `/owner/svm/:account` | `/v1/svm/owner` | -| `/ohlc/pools/svm/:pool` | `/v1/svm/pools/ohlc` | - -## 📝 Parameter Changes - -### 3. **Path Parameters → Query Parameters** - -All path parameters have been moved to query parameters. - -**Before:** - -```bash -GET /balances/evm/:address -GET /holders/evm/:contract -GET /nft/items/evm/contract/:contract/token_id/:token_id -``` - -**After:** - -```bash -GET /v1/evm/balances?network=mainnet&address=0x... -GET /v1/evm/holders?network=mainnet&contract=0x... -GET /v1/evm/nft/items?network=mainnet&contract=0x...&token_id=5712 -``` - -### 4. **Standardized Parameter Naming** - -All query parameters have been standardized to use snake_case naming convention. - -| Old Parameter | New Parameter | Notes | -| --- | --- | --- | -| `network_id` | `network` | Renamed, `matic` has also been renamed to `polygon` | -| `anyAddress` | `address` | Matches either `from` or `to` address | -| `from`, `fromAddress`, `offererAddress` | `from_address`, `offerer` | - | -| `to`, `toAddress`, `recipientAddress` | `to_address`, `recipient` | - | -| `startTime` | `start_time` | Default: `1735689600` (`2025-01-01`) | -| `endTime` | `end_time` | Default: `9999999999` | -| - | `start_block` | New parameter, default: `0` | -| - | `end_block` | New parameter, default: `9999999999` | -| - | `include_null_balances` | New parameter, default: `false` | -| `tx_hash` | `transaction_id` | - | -| `token` | `input_token`, `output_token` | More explicit for pool queries | -| `pool` | `amm_pool` | - | -| `orderBy`, `orderDirection` | _(removed)_ | Always sorted by most recent timestamp first | - -**Important:** The `network_id` parameter has been renamed to `network`. - -**Important:** `matic` network has been renamed to `polygon`. - -### 5. **Batched Parameters** - -Many parameters now support batching - accepting single values or comma-separated strings. - -**Supported Batched Parameters:** - -- `address`, `from_address`, `to_address` -- `contract`, `token_id` -- `factory`, `pool` -- `owner`, `token_account`, `mint` -- `transaction_id`, `signature` - -**Examples:** - -```console -# Single value -?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 - -# Comma-separated, single parameter -?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 - -# Repeated parameter values -?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&contract=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 -``` - -### 6. **New Parameters** - -#### `include_null_balances` - -Added to balance endpoints to optionally include zero/null balances. - -```bash -?include_null_balances=true -``` - -**Default:** `false` - -## 🔄 Response Changes - -### 7. **Pagination Changes** - -Pagination responses have been simplified. The API no longer computes total result counts due to performance and accuracy considerations when working with ClickHouse views and materialized tables. - -**Before:** - -```json -{ - "pagination": { - "previous_page": 1, - "current_page": 2, - "next_page": 3, - "total_pages": 10 - }, - "total_results": 1234 -} -``` - -**After:** - -```json -{ - "pagination": { - "previous_page": 1, - "current_page": 2 - } -} -``` - -**Removed fields:** - -- `next_page` -- `total_pages` -- `total_results` - -**Important:** To retrieve all results, continue incrementing the `page` parameter until the API returns an empty `data` array. This indicates you've reached the end of the results. - -### 8. **Removed Parameters** - -The following deprecated parameters have been removed: - -- `orderBy` - Results are now ordered by timestamp/block by default -- `orderDirection` - Always descending (newest first) - -## 📚 Example Migrations - -### Old vs New: Get Token Balances - -**Before:** - -```bash -GET /balances/evm/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045?network_id=mainnet&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 -``` - -**After:** - -```bash -GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 -``` - -### New Feature: Batched Queries - -Query balances for multiple contracts in a single request: - -```bash -GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 -``` - -## ⚠️ Important Notes - -1. **Backward Compatibility:** The old endpoints are deprecated and will be removed in the future. Migrate by **Oct 30, 2025**. - -2. **Default Sorting:** All results are now sorted by timestamp (descending) by default. Custom sorting is no longer supported. - -3. **Pagination:** Continue paging through results by incrementing the `page` parameter until you receive an empty `data` array. The API no longer provides total counts due to performance optimizations with ClickHouse. - -4. **Time Defaults:** If you previously relied on fetching all historical data without time filters, note that `start_time` now defaults to `2025-01-01`. Adjust accordingly if you need earlier data. diff --git a/website/src/pages/ro/index.json b/website/src/pages/ro/index.json index d833513cf931..c1ad74b06fa7 100644 --- a/website/src/pages/ro/index.json +++ b/website/src/pages/ro/index.json @@ -2,7 +2,7 @@ "title": "Home", "hero": { "title": "The Graph Docs", - "description": "The Graph is a blockchain data solution that powers applications, analytics, and AI on 90+ chains. The Graph's core products include the Token API for web3 apps, Subgraphs for indexing smart contracts, and Substreams for real-time and historical data streaming.", + "description": "The Graph is a blockchain data solution that powers applications, analytics, and AI on 80+ chains. The Graph's core products include the Token API for web3 apps, Subgraphs for indexing smart contracts, and Substreams for real-time and historical data streaming.", "cta1": "How The Graph works", "cta2": "Build your first subgraph" }, diff --git a/website/src/pages/ro/subgraphs/guides/_meta.js b/website/src/pages/ro/subgraphs/guides/_meta.js index fd5608dcceb2..1c081848ea08 100644 --- a/website/src/pages/ro/subgraphs/guides/_meta.js +++ b/website/src/pages/ro/subgraphs/guides/_meta.js @@ -2,7 +2,6 @@ export default { 'subgraph-composition': '', 'subgraph-debug-forking': '', near: '', - grafting: '', 'subgraph-uncrashable': '', 'transfer-to-the-graph': '', diff --git a/website/src/pages/ro/token-api/_meta.js b/website/src/pages/ro/token-api/_meta.js index a8624da52e7f..9588f70cec53 100644 --- a/website/src/pages/ro/token-api/_meta.js +++ b/website/src/pages/ro/token-api/_meta.js @@ -11,6 +11,6 @@ export default { 'tvm-dexs': titles['tvm-dexs'] ?? '', monitoring: titles['monitoring'] ?? '', 'endpoint-pricing': '', + guides: titles['guides'] ?? '', faq: '', - 'upgrade-to-v1': '', } diff --git a/website/src/pages/ro/token-api/guides/_meta-titles.json b/website/src/pages/ro/token-api/guides/_meta-titles.json new file mode 100644 index 000000000000..cd93dcc0fc0b --- /dev/null +++ b/website/src/pages/ro/token-api/guides/_meta-titles.json @@ -0,0 +1,4 @@ +{ + "gpt": "Create Custom GPTS", + "upgrade-to-v1": "" +} diff --git a/website/src/pages/ro/token-api/guides/_meta.js b/website/src/pages/ro/token-api/guides/_meta.js new file mode 100644 index 000000000000..e5aaaadd78f2 --- /dev/null +++ b/website/src/pages/ro/token-api/guides/_meta.js @@ -0,0 +1,4 @@ +export default { + gpt: '', + 'upgrade-to-v1': '', +} diff --git a/website/src/pages/ro/token-api/guides/gpt.mdx b/website/src/pages/ro/token-api/guides/gpt.mdx new file mode 100644 index 000000000000..564d013dea20 --- /dev/null +++ b/website/src/pages/ro/token-api/guides/gpt.mdx @@ -0,0 +1,121 @@ +--- +title: How the Token API Powers Custom GPTs +sidebarTitle: Create Custom GPTs +--- + +## Overview + +The Token API is a pre-indexed blockchain data service that provides real-time access to token balances, metadata, prices, liquidity, and volume across multiple chains. Developers use its REST endpoints to build wallets, trading dashboards, DeFi analytics, and AI systems without maintaining their own indexing stack. Custom GPTs can connect directly to the Token API's OpenAPI schema. + +The Token API enables developers to build **Custom GPTs** to reason over live blockchain data inside ChatGPT that can reason over and respond with live blockchain data directly inside ChatGPT. + +## What the Token API Enables in Custom GPTs + +When a Custom GPT is wired to the Token API, it gains access to a machine-readable schema and authenticated endpoints. Developers can use this to: + +- **Query real-time onchain data**: Balances, token prices, liquidity, and transaction history. +- **Automate domain-specific tasks**: Portfolio tracking, accounting, reconciliation, and market analysis. +- **Power AI agents with verifiable blockchain context**: Use the same data sources dapps rely on. + +Because the Token API provides a machine-readable schema and authenticated requests, it serves as a structured data layer that enables GPT-5 agents to combine natural language reasoning with live onchain data from The Graph. + +## When to Use the Token API for Custom GPTs + +Use the Token API when your GPT needs repeatable, domain-specific behavior grounded in blockchain data. This is most effective when the GPT performs the same type of task frequently or enforces a workflow you define. For one-off or exploratory questions, standard ChatGPT prompts are sufficient. + +## Choosing a Use Case + +Start with a clear, narrow objective, then expand as needed. Common patterns include: + +- **Accounting GPT**: Onchain accounting, tax tagging, and portfolio reconciliation. +- **Trading GPT**: Liquidity, pricing, and volume analysis for trading strategies. +- **Protocol Tracking GPT**: Real-time monitoring of transaction activity and liquidity pools. + +A focused initial goal such as “Retrieve token balances and prices for a wallet” makes it easier to configure reliable behavior before adding complex workflows. + +## Requirements + +| Requirement | Description | +| ---------------------- | -------------------------------------------------------- | +| ChatGPT 5 | Custom GPT creation requires GPT-5 tier or Pro. | +| Token API Subscription | Sign up at [The Graph Market](https://thegraph.market./) | +| Token API Key | Available in your dashboard as the Authentication JWT. | + +## Setting Up a Custom GPT + +Below is an explanatory outline of what happens during setup. This section provides conceptual understanding. + +### Create Custom GPT + +1. Visit chat.openai.com/gpts in your browser. 2, Click Create (top right). +2. Under Configure (in the top left panel), set up your GPT's personality and scope. + +### Configure Your GPT + +You define the GPT's role, scope, and metadata so it knows what it is designed to do. This includes: + +- **Name and Description**: Helps users discover your GPT. + - For example: **Name**: Token Tracker GPT **Description**: An onchain analytics assistant that retrieves live token balances, prices, and liquidity data using The Graph's Token API. +- **Instructions**: Tells the GPT what tasks it should perform using the Token API. + - For example: You are a blockchain data assistant retrieving onchain token data from The Graph's Token API. Use endpoints to fetch balances, liquidity, and price history across EVM chains. Present results in tables with token symbols, prices, and USD values. +- **Knowledge**: Optional context files such as wallet references, accounting rules, or code snippets. +- **New Action**: At the bottom, click “Create new action” to connect your GPT to the Token API. + +### Connect the Token API + +To enable live blockchain queries inside ChatGPT, you connect the GPT to the Token API through: + +#### Authentication + +1. Set Authentication to API Key → Bearer. +2. Open [The Graph Market](https://thegraph.market./) and copy your Authentication JWT from your dashboard. +3. Paste the token into the ChatGPT prompt where the field shows [HIDDEN]. + +#### Schema + +1. Above the Schema box, click Import from URL. +2. Paste: https://token-api.thegraph.com/openapi +3. Click Import. You'll now see endpoints like: + - `getV1EvmTokens` + - `getV1EvmDexes` + - `getV1EvmBalances` +4. Click Test on one (for example `getV1EvmDexes`) to verify connection. + +##### Privacy + +1. At the bottom, under Privacy, paste: https://pinax.network/en/legal/privacy + +### Privacy + +You can attach a privacy policy URL such as: https://pinax.network/en/legal/privacy + +## Example Prompt Patterns + +These examples help illustrate how a GPT reasons over Token API data. + +### Wallet and Portfolio + +Get the total USD balance for a wallet across multiple chains, returning token name, symbol, balance, and price. + +### Trading Analysis + +Compare USDC and DAI liquidity across Uniswap and Curve. Return the top 5 pools by TVL. + +### Accounting + +List all ERC-20 transfers for this address in the last 30 days. Group by token and total incoming/outgoing volume. + +## Best Practices + +| Tip | Why It Matters | +| --------------------------------- | ---------------------------------------------------------------------- | +| Scope your GPT narrowly first | Simplifies debugging and validates schema integration. | +| Use clear role instructions | Helps the GPT choose the right endpoints and avoid assumptions. | +| Name endpoints explicitly | Improves routing accuracy when fetching balances, prices, or DEX data. | +| Combine with code | Enables custom parsing or logic for complex workflows. | +| Add Subgraph or Substream context | Provides richer analytics when combined with Token API data. | + +## FAQs & Resources + +- Builders Office Hours (October 23, 2025) +- Watch the full session: https://x.com/i/broadcasts/1mrGmBzBarNJy diff --git a/website/src/pages/ro/token-api/guides/upgrade-to-v1.mdx b/website/src/pages/ro/token-api/guides/upgrade-to-v1.mdx new file mode 100644 index 000000000000..e2a7ccf973fa --- /dev/null +++ b/website/src/pages/ro/token-api/guides/upgrade-to-v1.mdx @@ -0,0 +1,346 @@ +--- +title: Upgrade to v1 +--- + +This guide covers the migration from the legacy API structure to the new v1 API. The refactoring introduces versioned endpoints, standardized query parameters, improved batching support, and consistent naming conventions. + +**Note** + +- `EVM` = Ethereum Virtual Machine + +Used to describe endpoints supporting EVM-based chains (e.g. `base`, `bsc`, `mainnet`, ...). + +- `SVM` = Solana Virtual Machine + +Used to describe endpoints supporting Solana (currently the only SVM chain supported). + +## 🔑 Breaking Changes Summary + +### 1. API Versioning + +All endpoints now use the `/v1` prefix. + +**Before:** + +``` +GET /balances/evm +GET /nft/items/contract/:contract/token_id/:token_id +``` + +**After:** + +``` +GET /v1/evm/balances +GET /v1/evm/nft/items +``` + +### 2. Route Structure Reorganization + +#### 2.1 EVM Endpoints + +Consolidated under `/v1/evm/*` + +| Old Endpoint | New Endpoint | +| ------------------------------------------------------ | ----------------------------- | +| `/balances/evm` | `/v1/evm/balances` | +| `/historical/balances/evm` | `/v1/evm/balances/historical` | +| `/holders/evm/:contract` | `/v1/evm/holders` | +| `/tokens/evm/:contract` | `/v1/evm/tokens` | +| `/transfers/evm` | `/v1/evm/transfers` | +| `/pools/evm` | `/v1/evm/pools` | +| `/swaps/evm` | `/v1/evm/swaps` | +| `/dexes/evm` | `/v1/evm/dexes` | +| `/ohlc/prices/evm/:contract` | _(removed)_ | +| `/ohlc/pools/evm/:pool` | `/v1/evm/pools/ohlc` | +| `/nft/ownerships/evm/:address` | `/v1/evm/nft/ownerships` | +| `/nft/collections/evm/:contract` | `/v1/evm/nft/collections` | +| `/nft/items/evm/contract/:contract/token_id/:token_id` | `/v1/evm/nft/items` | +| `/nft/holders/evm/:contract` | `/v1/evm/nft/holders` | +| `/nft/activities/evm` | `/v1/evm/nft/transfers` | +| `/nft/sales/evm` | `/v1/evm/nft/sales` | + +**Important:** The NFT endpoint `/nft/activities` has been renamed to `/v1/evm/nft/transfers` to better reflect its purpose. + +**Important:** The EVM Token OHLCV Data endpoint `/ohlc/prices/evm/{contract}` has been removed. You can use `/v1/evm/pools` to find stablecoin pairs for your contract and `/v1/evm/pools/ohlc` for OHLCV data for that pair. + +--- + +#### 2.2 New EVM native balances endpoint + +Native balances for EVM chains can be found under `/v1/evm/balances/native`. They will not show up in the `/v1/evm/balances` endpoint. + +Other endpoints can still use native token under the `0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee` contract. + +--- + +#### 2.3 SVM Endpoints + +Consolidated under `/v1/svm/*` + +| Old Endpoint | New Endpoint | +| ------------------------ | ------------------------- | +| `/balances/svm` | `/v1/svm/balances` | +| `/balances/native/svm` | `/v1/svm/balances/native` | +| `/holders/svm/:contract` | `/v1/svm/holders` | +| `/tokens/svm/:mint` | `/v1/svm/tokens` | +| `/transfers/svm` | `/v1/svm/transfers` | +| `/pools/svm` | `/v1/svm/pools` | +| `/swaps/svm` | `/v1/svm/swaps` | +| `/dexes/svm` | `/v1/svm/dexes` | +| `/owner/svm/:account` | `/v1/svm/owner` | +| `/ohlc/pools/svm/:pool` | `/v1/svm/pools/ohlc` | + +## 📝 Parameter Changes + +### 3. Path Parameters → Query Parameters + +All path parameters have been moved to query parameters. + +**Before:** + +```bash +GET /balances/evm/:address +GET /holders/evm/:contract +GET /nft/items/evm/contract/:contract/token_id/:token_id +``` + +**After:** + +```bash +GET /v1/evm/balances?network=mainnet&address=0x... +GET /v1/evm/holders?network=mainnet&contract=0x... +GET /v1/evm/nft/items?network=mainnet&contract=0x...&token_id=5712 +``` + +### 4. Standardized Parameter Naming + +All query parameters have been standardized to use snake_case naming convention. + +| Old Parameter | New Parameter | Notes | +| --- | --- | --- | +| `network_id` | `network` | Renamed, `matic` has also been renamed to `polygon` | +| `anyAddress` | `address` | Matches either `from` or `to` address | +| `from`, `fromAddress`, `offererAddress` | `from_address`, `offerer` | - | +| `to`, `toAddress`, `recipientAddress` | `to_address`, `recipient` | - | +| `startTime` | `start_time` | Default: `1735689600` (`2025-01-01`) | +| `endTime` | `end_time` | Default: `9999999999` | +| - | `start_block` | New parameter, default: `0` | +| - | `end_block` | New parameter, default: `9999999999` | +| - | `include_null_balances` | New parameter, default: `false` | +| `tx_hash` | `transaction_id` | - | +| `token` | `input_token`, `output_token` | More explicit for pool queries | +| `pool` | `amm_pool` | - | +| `orderBy`, `orderDirection` | _(removed)_ | Always sorted by most recent timestamp first | + +**Important:** The `network_id` parameter has been renamed to `network`. + +**Important:** `matic` network has been renamed to `polygon`. + +### 5. Batched Parameters + +Many parameters now support batching - accepting single values or comma-separated strings. + +**Supported Batched Parameters:** + +- `address`, `from_address`, `to_address` +- `contract`, `token_id` +- `factory`, `pool` +- `owner`, `token_account`, `mint` +- `transaction_id`, `signature` + +**Examples:** + +```console +## Single value +?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 + +## Comma-separated, single parameter +?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 + +## Repeated parameter values +?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&contract=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 +``` + +### 6. New Parameters + +#### `include_null_balances` + +Added to balance endpoints to optionally include zero/null balances. + +```bash +?include_null_balances=true +``` + +**Default:** `false` + +## 🔄 Response Changes + +### 7. Pagination Changes + +Pagination responses have been simplified. The API no longer computes total result counts due to performance and accuracy considerations when working with ClickHouse views and materialized tables. + +**Before:** + +```json +{ + "pagination": { + "previous_page": 1, + "current_page": 2, + "next_page": 3, + "total_pages": 10 + }, + "total_results": 1234 +} +``` + +**After:** + +```json +{ + "pagination": { + "previous_page": 1, + "current_page": 2 + } +} +``` + +**Removed fields:** + +- `next_page` +- `total_pages` +- `total_results` + +**Important:** To retrieve all results, continue incrementing the `page` parameter until the API returns an empty `data` array. This indicates you've reached the end of the results. + +### 8. Removed Parameters + +The following deprecated parameters have been removed: + +- `orderBy` - Results are now ordered by timestamp/block by default +- `orderDirection` - Always descending (newest first) + +### 9. Cached Queries + +Queries are now cached on the ClickHouse side for better performance. + +You can specifically request to not use the cache by setting the `Cache-Control` header to `no-cache`. + +#### Example + +**Cache** + +```console +$ curl -s 'https://token-api.thegraph.com/v1/...' | jq .statistics +{ + "bytes_read": 221, + "rows_read": 1, + "elapsed": 0.002212065 +} +``` + +**No cache** + +```console +$ curl -s 'http://localhost:8000/v1/...' --header 'Cache-Control: no-cache' | jq .statistics +{ + "bytes_read": 14621174348, + "rows_read": 223244390, + "elapsed": 0.971064066 +} +``` + +## 📚 Example Migrations + +### Example 1: Get Token Balances + +**Before:** + +```bash +GET /token/balances/evm/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045?network_id=mainnet&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 +``` + +**After:** + +```bash +GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 +``` + +### Example 2: Get NFT Items + +**Before:** + +```bash +GET /nft/items/evm/contract/0xbd3531da5cf5857e7cfaa92426877b022e612cf8/token_id/5712?network_id=mainnet +``` + +**After:** + +```bash +GET /v1/evm/nft/items?network=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&token_id=5712 +``` + +### Example 3: Get Token Transfers with Time Filter + +**Before:** + +```bash +GET /token/transfers/evm?network_id=mainnet&from=0xd8da6bf26964af9d7eed9e03e53415d37aa96045&startTime=1735689600&endTime=1767225600 +``` + +**After:** + +```bash +GET /v1/evm/transfers?network=mainnet&from_address=0xd8da6bf26964af9d7eed9e03e53415d37aa96045&start_time=1735689600&end_time=1767225600 +``` + +### Example 4: Get NFT Transfer Activities + +**Before:** + +```bash +GET /nft/activities/evm?network_id=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&anyAddress=0xd8da6bf26964af9d7eed9e03e53415d37aa96045 +``` + +**After:** + +```bash +GET /v1/evm/nft/transfers?network=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&address=0xd8da6bf26964af9d7eed9e03e53415d37aa96045 +``` + +### Example 5: Get Pool OHLC Data + +**Before:** + +```bash +GET /token/ohlc/pools/evm/0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640?network_id=mainnet&interval=1h&startTime=1735689600 +``` + +**After:** + +```bash +GET /v1/evm/pools/ohlc?network=mainnet&pool=0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640&interval=1h&start_time=1735689600 +``` + +### Example 6: Batched Query (New Feature) + +Query balances for multiple contracts in a single request: + +```bash +GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 +``` + +Query transfers from multiple addresses: + +```bash +GET /v1/evm/transfers?network=mainnet&from_address=0xabc...,0xdef...,0x123...&start_time=1735689600 +``` + +## ⚠️ Important Notes + +1. **Migration Notes:** The old endpoints were deprecated and removed on **October 30, 2025**. Please ensure all integrations have been migrated to the new Token API v1 endpoints. + +2. **Default Sorting:** All results are now sorted by timestamp (descending) by default. Custom sorting is no longer supported. + +3. **Pagination:** Continue paging through results by incrementing the `page` parameter until you receive an empty `data` array. The API no longer provides total counts due to performance optimizations with ClickHouse. + +4. **Time Defaults:** If you previously relied on fetching all historical data without time filters, note that `start_time` now defaults to `2025-01-01`. Adjust accordingly if you need earlier data. diff --git a/website/src/pages/ro/token-api/upgrade-to-v1.mdx b/website/src/pages/ro/token-api/upgrade-to-v1.mdx deleted file mode 100644 index fbe09101eaa5..000000000000 --- a/website/src/pages/ro/token-api/upgrade-to-v1.mdx +++ /dev/null @@ -1,254 +0,0 @@ ---- -title: Upgrade to v1 ---- - -This guide covers the migration from the legacy API structure to the new v1 API. The refactoring introduces versioned endpoints, standardized query parameters, improved batching support, and consistent naming conventions. - -**Note** - -- `EVM` = Ethereum Virtual Machine - -Used to describe endpoints supporting EVM-based chains (e.g. `base`, `bsc`, `mainnet`, ...). - -- `SVM` = Solana Virtual Machine - -Used to describe endpoints supporting Solana (currently the only SVM chain supported). - -## 🔑 Breaking Changes Summary - -### 1. **API Versioning** - -All endpoints now use the `/v1` prefix. - -**Before:** - -``` -GET /balances/evm -GET /nft/items/contract/:contract/token_id/:token_id -``` - -**After:** - -``` -GET /v1/evm/balances -GET /v1/evm/nft/items -``` - -### 2. **Route Structure Reorganization** - -#### 2.1 EVM Endpoints - -Consolidated under `/v1/evm/*` - -| Old Endpoint | New Endpoint | -| ------------------------------------------------------ | ----------------------------- | -| `/balances/evm` | `/v1/evm/balances` | -| `/historical/balances/evm` | `/v1/evm/balances/historical` | -| `/holders/evm/:contract` | `/v1/evm/holders` | -| `/tokens/evm/:contract` | `/v1/evm/tokens` | -| `/transfers/evm` | `/v1/evm/transfers` | -| `/pools/evm` | `/v1/evm/pools` | -| `/swaps/evm` | `/v1/evm/swaps` | -| `/dexes/evm` | `/v1/evm/dexes` | -| `/ohlc/prices/evm/:contract` | _(removed)_ | -| `/ohlc/pools/evm/:pool` | `/v1/evm/pools/ohlc` | -| `/nft/ownerships/evm/:address` | `/v1/evm/nft/ownerships` | -| `/nft/collections/evm/:contract` | `/v1/evm/nft/collections` | -| `/nft/items/evm/contract/:contract/token_id/:token_id` | `/v1/evm/nft/items` | -| `/nft/holders/evm/:contract` | `/v1/evm/nft/holders` | -| `/nft/activities/evm` | `/v1/evm/nft/transfers` | -| `/nft/sales/evm` | `/v1/evm/nft/sales` | - -**Important:** The NFT endpoint `/nft/activities` has been renamed to `/v1/evm/nft/transfers` to better reflect its purpose. - -**Important:** The EVM Token OHLCV Data endpoint `/ohlc/prices/evm/{contract}` has been removed. You can use `/v1/evm/pools` to find stablecoin pairs for your contract and `/v1/evm/pools/ohlc` for OHLCV data for that pair. - ---- - -#### 2.2 New EVM native balances endpoint - -Native balances for EVM chains can be found under `/v1/evm/balances/native`. They will not show up in the `/v1/evm/balances` endpoint. - -Other endpoints can still use native token under the `0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee` contract. - ---- - -#### 2.3 SVM Endpoints - -Consolidated under `/v1/svm/*` - -| Old Endpoint | New Endpoint | -| ------------------------ | ------------------------- | -| `/balances/svm` | `/v1/svm/balances` | -| `/balances/native/svm` | `/v1/svm/balances/native` | -| `/holders/svm/:contract` | `/v1/svm/holders` | -| `/tokens/svm/:mint` | `/v1/svm/tokens` | -| `/transfers/svm` | `/v1/svm/transfers` | -| `/pools/svm` | `/v1/svm/pools` | -| `/swaps/svm` | `/v1/svm/swaps` | -| `/dexes/svm` | `/v1/svm/dexes` | -| `/owner/svm/:account` | `/v1/svm/owner` | -| `/ohlc/pools/svm/:pool` | `/v1/svm/pools/ohlc` | - -## 📝 Parameter Changes - -### 3. **Path Parameters → Query Parameters** - -All path parameters have been moved to query parameters. - -**Before:** - -```bash -GET /balances/evm/:address -GET /holders/evm/:contract -GET /nft/items/evm/contract/:contract/token_id/:token_id -``` - -**After:** - -```bash -GET /v1/evm/balances?network=mainnet&address=0x... -GET /v1/evm/holders?network=mainnet&contract=0x... -GET /v1/evm/nft/items?network=mainnet&contract=0x...&token_id=5712 -``` - -### 4. **Standardized Parameter Naming** - -All query parameters have been standardized to use snake_case naming convention. - -| Old Parameter | New Parameter | Notes | -| --- | --- | --- | -| `network_id` | `network` | Renamed, `matic` has also been renamed to `polygon` | -| `anyAddress` | `address` | Matches either `from` or `to` address | -| `from`, `fromAddress`, `offererAddress` | `from_address`, `offerer` | - | -| `to`, `toAddress`, `recipientAddress` | `to_address`, `recipient` | - | -| `startTime` | `start_time` | Default: `1735689600` (`2025-01-01`) | -| `endTime` | `end_time` | Default: `9999999999` | -| - | `start_block` | New parameter, default: `0` | -| - | `end_block` | New parameter, default: `9999999999` | -| - | `include_null_balances` | New parameter, default: `false` | -| `tx_hash` | `transaction_id` | - | -| `token` | `input_token`, `output_token` | More explicit for pool queries | -| `pool` | `amm_pool` | - | -| `orderBy`, `orderDirection` | _(removed)_ | Always sorted by most recent timestamp first | - -**Important:** The `network_id` parameter has been renamed to `network`. - -**Important:** `matic` network has been renamed to `polygon`. - -### 5. **Batched Parameters** - -Many parameters now support batching - accepting single values or comma-separated strings. - -**Supported Batched Parameters:** - -- `address`, `from_address`, `to_address` -- `contract`, `token_id` -- `factory`, `pool` -- `owner`, `token_account`, `mint` -- `transaction_id`, `signature` - -**Examples:** - -```console -# Single value -?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 - -# Comma-separated, single parameter -?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 - -# Repeated parameter values -?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&contract=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 -``` - -### 6. **New Parameters** - -#### `include_null_balances` - -Added to balance endpoints to optionally include zero/null balances. - -```bash -?include_null_balances=true -``` - -**Default:** `false` - -## 🔄 Response Changes - -### 7. **Pagination Changes** - -Pagination responses have been simplified. The API no longer computes total result counts due to performance and accuracy considerations when working with ClickHouse views and materialized tables. - -**Before:** - -```json -{ - "pagination": { - "previous_page": 1, - "current_page": 2, - "next_page": 3, - "total_pages": 10 - }, - "total_results": 1234 -} -``` - -**After:** - -```json -{ - "pagination": { - "previous_page": 1, - "current_page": 2 - } -} -``` - -**Removed fields:** - -- `next_page` -- `total_pages` -- `total_results` - -**Important:** To retrieve all results, continue incrementing the `page` parameter until the API returns an empty `data` array. This indicates you've reached the end of the results. - -### 8. **Removed Parameters** - -The following deprecated parameters have been removed: - -- `orderBy` - Results are now ordered by timestamp/block by default -- `orderDirection` - Always descending (newest first) - -## 📚 Example Migrations - -### Old vs New: Get Token Balances - -**Before:** - -```bash -GET /balances/evm/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045?network_id=mainnet&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 -``` - -**After:** - -```bash -GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 -``` - -### New Feature: Batched Queries - -Query balances for multiple contracts in a single request: - -```bash -GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 -``` - -## ⚠️ Important Notes - -1. **Backward Compatibility:** The old endpoints are deprecated and will be removed in the future. Migrate by **Oct 30, 2025**. - -2. **Default Sorting:** All results are now sorted by timestamp (descending) by default. Custom sorting is no longer supported. - -3. **Pagination:** Continue paging through results by incrementing the `page` parameter until you receive an empty `data` array. The API no longer provides total counts due to performance optimizations with ClickHouse. - -4. **Time Defaults:** If you previously relied on fetching all historical data without time filters, note that `start_time` now defaults to `2025-01-01`. Adjust accordingly if you need earlier data. diff --git a/website/src/pages/ru/index.json b/website/src/pages/ru/index.json index cf30e93cbcc6..11fa284eea87 100644 --- a/website/src/pages/ru/index.json +++ b/website/src/pages/ru/index.json @@ -2,7 +2,7 @@ "title": "Главная страница", "hero": { "title": "Документация The Graph", - "description": "The Graph is a blockchain data solution that powers applications, analytics, and AI on 90+ chains. The Graph's core products include the Token API for web3 apps, Subgraphs for indexing smart contracts, and Substreams for real-time and historical data streaming.", + "description": "The Graph is a blockchain data solution that powers applications, analytics, and AI on 80+ chains. The Graph's core products include the Token API for web3 apps, Subgraphs for indexing smart contracts, and Substreams for real-time and historical data streaming.", "cta1": "Как работает The Graph", "cta2": "Создайте свой первый субграф" }, diff --git a/website/src/pages/ru/subgraphs/guides/_meta.js b/website/src/pages/ru/subgraphs/guides/_meta.js index fd5608dcceb2..1c081848ea08 100644 --- a/website/src/pages/ru/subgraphs/guides/_meta.js +++ b/website/src/pages/ru/subgraphs/guides/_meta.js @@ -2,7 +2,6 @@ export default { 'subgraph-composition': '', 'subgraph-debug-forking': '', near: '', - grafting: '', 'subgraph-uncrashable': '', 'transfer-to-the-graph': '', diff --git a/website/src/pages/ru/token-api/_meta.js b/website/src/pages/ru/token-api/_meta.js index a8624da52e7f..9588f70cec53 100644 --- a/website/src/pages/ru/token-api/_meta.js +++ b/website/src/pages/ru/token-api/_meta.js @@ -11,6 +11,6 @@ export default { 'tvm-dexs': titles['tvm-dexs'] ?? '', monitoring: titles['monitoring'] ?? '', 'endpoint-pricing': '', + guides: titles['guides'] ?? '', faq: '', - 'upgrade-to-v1': '', } diff --git a/website/src/pages/ru/token-api/guides/_meta-titles.json b/website/src/pages/ru/token-api/guides/_meta-titles.json new file mode 100644 index 000000000000..cd93dcc0fc0b --- /dev/null +++ b/website/src/pages/ru/token-api/guides/_meta-titles.json @@ -0,0 +1,4 @@ +{ + "gpt": "Create Custom GPTS", + "upgrade-to-v1": "" +} diff --git a/website/src/pages/ru/token-api/guides/_meta.js b/website/src/pages/ru/token-api/guides/_meta.js new file mode 100644 index 000000000000..e5aaaadd78f2 --- /dev/null +++ b/website/src/pages/ru/token-api/guides/_meta.js @@ -0,0 +1,4 @@ +export default { + gpt: '', + 'upgrade-to-v1': '', +} diff --git a/website/src/pages/ru/token-api/guides/gpt.mdx b/website/src/pages/ru/token-api/guides/gpt.mdx new file mode 100644 index 000000000000..564d013dea20 --- /dev/null +++ b/website/src/pages/ru/token-api/guides/gpt.mdx @@ -0,0 +1,121 @@ +--- +title: How the Token API Powers Custom GPTs +sidebarTitle: Create Custom GPTs +--- + +## Overview + +The Token API is a pre-indexed blockchain data service that provides real-time access to token balances, metadata, prices, liquidity, and volume across multiple chains. Developers use its REST endpoints to build wallets, trading dashboards, DeFi analytics, and AI systems without maintaining their own indexing stack. Custom GPTs can connect directly to the Token API's OpenAPI schema. + +The Token API enables developers to build **Custom GPTs** to reason over live blockchain data inside ChatGPT that can reason over and respond with live blockchain data directly inside ChatGPT. + +## What the Token API Enables in Custom GPTs + +When a Custom GPT is wired to the Token API, it gains access to a machine-readable schema and authenticated endpoints. Developers can use this to: + +- **Query real-time onchain data**: Balances, token prices, liquidity, and transaction history. +- **Automate domain-specific tasks**: Portfolio tracking, accounting, reconciliation, and market analysis. +- **Power AI agents with verifiable blockchain context**: Use the same data sources dapps rely on. + +Because the Token API provides a machine-readable schema and authenticated requests, it serves as a structured data layer that enables GPT-5 agents to combine natural language reasoning with live onchain data from The Graph. + +## When to Use the Token API for Custom GPTs + +Use the Token API when your GPT needs repeatable, domain-specific behavior grounded in blockchain data. This is most effective when the GPT performs the same type of task frequently or enforces a workflow you define. For one-off or exploratory questions, standard ChatGPT prompts are sufficient. + +## Choosing a Use Case + +Start with a clear, narrow objective, then expand as needed. Common patterns include: + +- **Accounting GPT**: Onchain accounting, tax tagging, and portfolio reconciliation. +- **Trading GPT**: Liquidity, pricing, and volume analysis for trading strategies. +- **Protocol Tracking GPT**: Real-time monitoring of transaction activity and liquidity pools. + +A focused initial goal such as “Retrieve token balances and prices for a wallet” makes it easier to configure reliable behavior before adding complex workflows. + +## Requirements + +| Requirement | Description | +| ---------------------- | -------------------------------------------------------- | +| ChatGPT 5 | Custom GPT creation requires GPT-5 tier or Pro. | +| Token API Subscription | Sign up at [The Graph Market](https://thegraph.market./) | +| Token API Key | Available in your dashboard as the Authentication JWT. | + +## Setting Up a Custom GPT + +Below is an explanatory outline of what happens during setup. This section provides conceptual understanding. + +### Create Custom GPT + +1. Visit chat.openai.com/gpts in your browser. 2, Click Create (top right). +2. Under Configure (in the top left panel), set up your GPT's personality and scope. + +### Configure Your GPT + +You define the GPT's role, scope, and metadata so it knows what it is designed to do. This includes: + +- **Name and Description**: Helps users discover your GPT. + - For example: **Name**: Token Tracker GPT **Description**: An onchain analytics assistant that retrieves live token balances, prices, and liquidity data using The Graph's Token API. +- **Instructions**: Tells the GPT what tasks it should perform using the Token API. + - For example: You are a blockchain data assistant retrieving onchain token data from The Graph's Token API. Use endpoints to fetch balances, liquidity, and price history across EVM chains. Present results in tables with token symbols, prices, and USD values. +- **Knowledge**: Optional context files such as wallet references, accounting rules, or code snippets. +- **New Action**: At the bottom, click “Create new action” to connect your GPT to the Token API. + +### Connect the Token API + +To enable live blockchain queries inside ChatGPT, you connect the GPT to the Token API through: + +#### Authentication + +1. Set Authentication to API Key → Bearer. +2. Open [The Graph Market](https://thegraph.market./) and copy your Authentication JWT from your dashboard. +3. Paste the token into the ChatGPT prompt where the field shows [HIDDEN]. + +#### Schema + +1. Above the Schema box, click Import from URL. +2. Paste: https://token-api.thegraph.com/openapi +3. Click Import. You'll now see endpoints like: + - `getV1EvmTokens` + - `getV1EvmDexes` + - `getV1EvmBalances` +4. Click Test on one (for example `getV1EvmDexes`) to verify connection. + +##### Privacy + +1. At the bottom, under Privacy, paste: https://pinax.network/en/legal/privacy + +### Privacy + +You can attach a privacy policy URL such as: https://pinax.network/en/legal/privacy + +## Example Prompt Patterns + +These examples help illustrate how a GPT reasons over Token API data. + +### Wallet and Portfolio + +Get the total USD balance for a wallet across multiple chains, returning token name, symbol, balance, and price. + +### Trading Analysis + +Compare USDC and DAI liquidity across Uniswap and Curve. Return the top 5 pools by TVL. + +### Accounting + +List all ERC-20 transfers for this address in the last 30 days. Group by token and total incoming/outgoing volume. + +## Best Practices + +| Tip | Why It Matters | +| --------------------------------- | ---------------------------------------------------------------------- | +| Scope your GPT narrowly first | Simplifies debugging and validates schema integration. | +| Use clear role instructions | Helps the GPT choose the right endpoints and avoid assumptions. | +| Name endpoints explicitly | Improves routing accuracy when fetching balances, prices, or DEX data. | +| Combine with code | Enables custom parsing or logic for complex workflows. | +| Add Subgraph or Substream context | Provides richer analytics when combined with Token API data. | + +## FAQs & Resources + +- Builders Office Hours (October 23, 2025) +- Watch the full session: https://x.com/i/broadcasts/1mrGmBzBarNJy diff --git a/website/src/pages/ru/token-api/guides/upgrade-to-v1.mdx b/website/src/pages/ru/token-api/guides/upgrade-to-v1.mdx new file mode 100644 index 000000000000..e2a7ccf973fa --- /dev/null +++ b/website/src/pages/ru/token-api/guides/upgrade-to-v1.mdx @@ -0,0 +1,346 @@ +--- +title: Upgrade to v1 +--- + +This guide covers the migration from the legacy API structure to the new v1 API. The refactoring introduces versioned endpoints, standardized query parameters, improved batching support, and consistent naming conventions. + +**Note** + +- `EVM` = Ethereum Virtual Machine + +Used to describe endpoints supporting EVM-based chains (e.g. `base`, `bsc`, `mainnet`, ...). + +- `SVM` = Solana Virtual Machine + +Used to describe endpoints supporting Solana (currently the only SVM chain supported). + +## 🔑 Breaking Changes Summary + +### 1. API Versioning + +All endpoints now use the `/v1` prefix. + +**Before:** + +``` +GET /balances/evm +GET /nft/items/contract/:contract/token_id/:token_id +``` + +**After:** + +``` +GET /v1/evm/balances +GET /v1/evm/nft/items +``` + +### 2. Route Structure Reorganization + +#### 2.1 EVM Endpoints + +Consolidated under `/v1/evm/*` + +| Old Endpoint | New Endpoint | +| ------------------------------------------------------ | ----------------------------- | +| `/balances/evm` | `/v1/evm/balances` | +| `/historical/balances/evm` | `/v1/evm/balances/historical` | +| `/holders/evm/:contract` | `/v1/evm/holders` | +| `/tokens/evm/:contract` | `/v1/evm/tokens` | +| `/transfers/evm` | `/v1/evm/transfers` | +| `/pools/evm` | `/v1/evm/pools` | +| `/swaps/evm` | `/v1/evm/swaps` | +| `/dexes/evm` | `/v1/evm/dexes` | +| `/ohlc/prices/evm/:contract` | _(removed)_ | +| `/ohlc/pools/evm/:pool` | `/v1/evm/pools/ohlc` | +| `/nft/ownerships/evm/:address` | `/v1/evm/nft/ownerships` | +| `/nft/collections/evm/:contract` | `/v1/evm/nft/collections` | +| `/nft/items/evm/contract/:contract/token_id/:token_id` | `/v1/evm/nft/items` | +| `/nft/holders/evm/:contract` | `/v1/evm/nft/holders` | +| `/nft/activities/evm` | `/v1/evm/nft/transfers` | +| `/nft/sales/evm` | `/v1/evm/nft/sales` | + +**Important:** The NFT endpoint `/nft/activities` has been renamed to `/v1/evm/nft/transfers` to better reflect its purpose. + +**Important:** The EVM Token OHLCV Data endpoint `/ohlc/prices/evm/{contract}` has been removed. You can use `/v1/evm/pools` to find stablecoin pairs for your contract and `/v1/evm/pools/ohlc` for OHLCV data for that pair. + +--- + +#### 2.2 New EVM native balances endpoint + +Native balances for EVM chains can be found under `/v1/evm/balances/native`. They will not show up in the `/v1/evm/balances` endpoint. + +Other endpoints can still use native token under the `0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee` contract. + +--- + +#### 2.3 SVM Endpoints + +Consolidated under `/v1/svm/*` + +| Old Endpoint | New Endpoint | +| ------------------------ | ------------------------- | +| `/balances/svm` | `/v1/svm/balances` | +| `/balances/native/svm` | `/v1/svm/balances/native` | +| `/holders/svm/:contract` | `/v1/svm/holders` | +| `/tokens/svm/:mint` | `/v1/svm/tokens` | +| `/transfers/svm` | `/v1/svm/transfers` | +| `/pools/svm` | `/v1/svm/pools` | +| `/swaps/svm` | `/v1/svm/swaps` | +| `/dexes/svm` | `/v1/svm/dexes` | +| `/owner/svm/:account` | `/v1/svm/owner` | +| `/ohlc/pools/svm/:pool` | `/v1/svm/pools/ohlc` | + +## 📝 Parameter Changes + +### 3. Path Parameters → Query Parameters + +All path parameters have been moved to query parameters. + +**Before:** + +```bash +GET /balances/evm/:address +GET /holders/evm/:contract +GET /nft/items/evm/contract/:contract/token_id/:token_id +``` + +**After:** + +```bash +GET /v1/evm/balances?network=mainnet&address=0x... +GET /v1/evm/holders?network=mainnet&contract=0x... +GET /v1/evm/nft/items?network=mainnet&contract=0x...&token_id=5712 +``` + +### 4. Standardized Parameter Naming + +All query parameters have been standardized to use snake_case naming convention. + +| Old Parameter | New Parameter | Notes | +| --- | --- | --- | +| `network_id` | `network` | Renamed, `matic` has also been renamed to `polygon` | +| `anyAddress` | `address` | Matches either `from` or `to` address | +| `from`, `fromAddress`, `offererAddress` | `from_address`, `offerer` | - | +| `to`, `toAddress`, `recipientAddress` | `to_address`, `recipient` | - | +| `startTime` | `start_time` | Default: `1735689600` (`2025-01-01`) | +| `endTime` | `end_time` | Default: `9999999999` | +| - | `start_block` | New parameter, default: `0` | +| - | `end_block` | New parameter, default: `9999999999` | +| - | `include_null_balances` | New parameter, default: `false` | +| `tx_hash` | `transaction_id` | - | +| `token` | `input_token`, `output_token` | More explicit for pool queries | +| `pool` | `amm_pool` | - | +| `orderBy`, `orderDirection` | _(removed)_ | Always sorted by most recent timestamp first | + +**Important:** The `network_id` parameter has been renamed to `network`. + +**Important:** `matic` network has been renamed to `polygon`. + +### 5. Batched Parameters + +Many parameters now support batching - accepting single values or comma-separated strings. + +**Supported Batched Parameters:** + +- `address`, `from_address`, `to_address` +- `contract`, `token_id` +- `factory`, `pool` +- `owner`, `token_account`, `mint` +- `transaction_id`, `signature` + +**Examples:** + +```console +## Single value +?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 + +## Comma-separated, single parameter +?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 + +## Repeated parameter values +?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&contract=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 +``` + +### 6. New Parameters + +#### `include_null_balances` + +Added to balance endpoints to optionally include zero/null balances. + +```bash +?include_null_balances=true +``` + +**Default:** `false` + +## 🔄 Response Changes + +### 7. Pagination Changes + +Pagination responses have been simplified. The API no longer computes total result counts due to performance and accuracy considerations when working with ClickHouse views and materialized tables. + +**Before:** + +```json +{ + "pagination": { + "previous_page": 1, + "current_page": 2, + "next_page": 3, + "total_pages": 10 + }, + "total_results": 1234 +} +``` + +**After:** + +```json +{ + "pagination": { + "previous_page": 1, + "current_page": 2 + } +} +``` + +**Removed fields:** + +- `next_page` +- `total_pages` +- `total_results` + +**Important:** To retrieve all results, continue incrementing the `page` parameter until the API returns an empty `data` array. This indicates you've reached the end of the results. + +### 8. Removed Parameters + +The following deprecated parameters have been removed: + +- `orderBy` - Results are now ordered by timestamp/block by default +- `orderDirection` - Always descending (newest first) + +### 9. Cached Queries + +Queries are now cached on the ClickHouse side for better performance. + +You can specifically request to not use the cache by setting the `Cache-Control` header to `no-cache`. + +#### Example + +**Cache** + +```console +$ curl -s 'https://token-api.thegraph.com/v1/...' | jq .statistics +{ + "bytes_read": 221, + "rows_read": 1, + "elapsed": 0.002212065 +} +``` + +**No cache** + +```console +$ curl -s 'http://localhost:8000/v1/...' --header 'Cache-Control: no-cache' | jq .statistics +{ + "bytes_read": 14621174348, + "rows_read": 223244390, + "elapsed": 0.971064066 +} +``` + +## 📚 Example Migrations + +### Example 1: Get Token Balances + +**Before:** + +```bash +GET /token/balances/evm/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045?network_id=mainnet&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 +``` + +**After:** + +```bash +GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 +``` + +### Example 2: Get NFT Items + +**Before:** + +```bash +GET /nft/items/evm/contract/0xbd3531da5cf5857e7cfaa92426877b022e612cf8/token_id/5712?network_id=mainnet +``` + +**After:** + +```bash +GET /v1/evm/nft/items?network=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&token_id=5712 +``` + +### Example 3: Get Token Transfers with Time Filter + +**Before:** + +```bash +GET /token/transfers/evm?network_id=mainnet&from=0xd8da6bf26964af9d7eed9e03e53415d37aa96045&startTime=1735689600&endTime=1767225600 +``` + +**After:** + +```bash +GET /v1/evm/transfers?network=mainnet&from_address=0xd8da6bf26964af9d7eed9e03e53415d37aa96045&start_time=1735689600&end_time=1767225600 +``` + +### Example 4: Get NFT Transfer Activities + +**Before:** + +```bash +GET /nft/activities/evm?network_id=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&anyAddress=0xd8da6bf26964af9d7eed9e03e53415d37aa96045 +``` + +**After:** + +```bash +GET /v1/evm/nft/transfers?network=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&address=0xd8da6bf26964af9d7eed9e03e53415d37aa96045 +``` + +### Example 5: Get Pool OHLC Data + +**Before:** + +```bash +GET /token/ohlc/pools/evm/0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640?network_id=mainnet&interval=1h&startTime=1735689600 +``` + +**After:** + +```bash +GET /v1/evm/pools/ohlc?network=mainnet&pool=0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640&interval=1h&start_time=1735689600 +``` + +### Example 6: Batched Query (New Feature) + +Query balances for multiple contracts in a single request: + +```bash +GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 +``` + +Query transfers from multiple addresses: + +```bash +GET /v1/evm/transfers?network=mainnet&from_address=0xabc...,0xdef...,0x123...&start_time=1735689600 +``` + +## ⚠️ Important Notes + +1. **Migration Notes:** The old endpoints were deprecated and removed on **October 30, 2025**. Please ensure all integrations have been migrated to the new Token API v1 endpoints. + +2. **Default Sorting:** All results are now sorted by timestamp (descending) by default. Custom sorting is no longer supported. + +3. **Pagination:** Continue paging through results by incrementing the `page` parameter until you receive an empty `data` array. The API no longer provides total counts due to performance optimizations with ClickHouse. + +4. **Time Defaults:** If you previously relied on fetching all historical data without time filters, note that `start_time` now defaults to `2025-01-01`. Adjust accordingly if you need earlier data. diff --git a/website/src/pages/ru/token-api/upgrade-to-v1.mdx b/website/src/pages/ru/token-api/upgrade-to-v1.mdx deleted file mode 100644 index fbe09101eaa5..000000000000 --- a/website/src/pages/ru/token-api/upgrade-to-v1.mdx +++ /dev/null @@ -1,254 +0,0 @@ ---- -title: Upgrade to v1 ---- - -This guide covers the migration from the legacy API structure to the new v1 API. The refactoring introduces versioned endpoints, standardized query parameters, improved batching support, and consistent naming conventions. - -**Note** - -- `EVM` = Ethereum Virtual Machine - -Used to describe endpoints supporting EVM-based chains (e.g. `base`, `bsc`, `mainnet`, ...). - -- `SVM` = Solana Virtual Machine - -Used to describe endpoints supporting Solana (currently the only SVM chain supported). - -## 🔑 Breaking Changes Summary - -### 1. **API Versioning** - -All endpoints now use the `/v1` prefix. - -**Before:** - -``` -GET /balances/evm -GET /nft/items/contract/:contract/token_id/:token_id -``` - -**After:** - -``` -GET /v1/evm/balances -GET /v1/evm/nft/items -``` - -### 2. **Route Structure Reorganization** - -#### 2.1 EVM Endpoints - -Consolidated under `/v1/evm/*` - -| Old Endpoint | New Endpoint | -| ------------------------------------------------------ | ----------------------------- | -| `/balances/evm` | `/v1/evm/balances` | -| `/historical/balances/evm` | `/v1/evm/balances/historical` | -| `/holders/evm/:contract` | `/v1/evm/holders` | -| `/tokens/evm/:contract` | `/v1/evm/tokens` | -| `/transfers/evm` | `/v1/evm/transfers` | -| `/pools/evm` | `/v1/evm/pools` | -| `/swaps/evm` | `/v1/evm/swaps` | -| `/dexes/evm` | `/v1/evm/dexes` | -| `/ohlc/prices/evm/:contract` | _(removed)_ | -| `/ohlc/pools/evm/:pool` | `/v1/evm/pools/ohlc` | -| `/nft/ownerships/evm/:address` | `/v1/evm/nft/ownerships` | -| `/nft/collections/evm/:contract` | `/v1/evm/nft/collections` | -| `/nft/items/evm/contract/:contract/token_id/:token_id` | `/v1/evm/nft/items` | -| `/nft/holders/evm/:contract` | `/v1/evm/nft/holders` | -| `/nft/activities/evm` | `/v1/evm/nft/transfers` | -| `/nft/sales/evm` | `/v1/evm/nft/sales` | - -**Important:** The NFT endpoint `/nft/activities` has been renamed to `/v1/evm/nft/transfers` to better reflect its purpose. - -**Important:** The EVM Token OHLCV Data endpoint `/ohlc/prices/evm/{contract}` has been removed. You can use `/v1/evm/pools` to find stablecoin pairs for your contract and `/v1/evm/pools/ohlc` for OHLCV data for that pair. - ---- - -#### 2.2 New EVM native balances endpoint - -Native balances for EVM chains can be found under `/v1/evm/balances/native`. They will not show up in the `/v1/evm/balances` endpoint. - -Other endpoints can still use native token under the `0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee` contract. - ---- - -#### 2.3 SVM Endpoints - -Consolidated under `/v1/svm/*` - -| Old Endpoint | New Endpoint | -| ------------------------ | ------------------------- | -| `/balances/svm` | `/v1/svm/balances` | -| `/balances/native/svm` | `/v1/svm/balances/native` | -| `/holders/svm/:contract` | `/v1/svm/holders` | -| `/tokens/svm/:mint` | `/v1/svm/tokens` | -| `/transfers/svm` | `/v1/svm/transfers` | -| `/pools/svm` | `/v1/svm/pools` | -| `/swaps/svm` | `/v1/svm/swaps` | -| `/dexes/svm` | `/v1/svm/dexes` | -| `/owner/svm/:account` | `/v1/svm/owner` | -| `/ohlc/pools/svm/:pool` | `/v1/svm/pools/ohlc` | - -## 📝 Parameter Changes - -### 3. **Path Parameters → Query Parameters** - -All path parameters have been moved to query parameters. - -**Before:** - -```bash -GET /balances/evm/:address -GET /holders/evm/:contract -GET /nft/items/evm/contract/:contract/token_id/:token_id -``` - -**After:** - -```bash -GET /v1/evm/balances?network=mainnet&address=0x... -GET /v1/evm/holders?network=mainnet&contract=0x... -GET /v1/evm/nft/items?network=mainnet&contract=0x...&token_id=5712 -``` - -### 4. **Standardized Parameter Naming** - -All query parameters have been standardized to use snake_case naming convention. - -| Old Parameter | New Parameter | Notes | -| --- | --- | --- | -| `network_id` | `network` | Renamed, `matic` has also been renamed to `polygon` | -| `anyAddress` | `address` | Matches either `from` or `to` address | -| `from`, `fromAddress`, `offererAddress` | `from_address`, `offerer` | - | -| `to`, `toAddress`, `recipientAddress` | `to_address`, `recipient` | - | -| `startTime` | `start_time` | Default: `1735689600` (`2025-01-01`) | -| `endTime` | `end_time` | Default: `9999999999` | -| - | `start_block` | New parameter, default: `0` | -| - | `end_block` | New parameter, default: `9999999999` | -| - | `include_null_balances` | New parameter, default: `false` | -| `tx_hash` | `transaction_id` | - | -| `token` | `input_token`, `output_token` | More explicit for pool queries | -| `pool` | `amm_pool` | - | -| `orderBy`, `orderDirection` | _(removed)_ | Always sorted by most recent timestamp first | - -**Important:** The `network_id` parameter has been renamed to `network`. - -**Important:** `matic` network has been renamed to `polygon`. - -### 5. **Batched Parameters** - -Many parameters now support batching - accepting single values or comma-separated strings. - -**Supported Batched Parameters:** - -- `address`, `from_address`, `to_address` -- `contract`, `token_id` -- `factory`, `pool` -- `owner`, `token_account`, `mint` -- `transaction_id`, `signature` - -**Examples:** - -```console -# Single value -?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 - -# Comma-separated, single parameter -?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 - -# Repeated parameter values -?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&contract=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 -``` - -### 6. **New Parameters** - -#### `include_null_balances` - -Added to balance endpoints to optionally include zero/null balances. - -```bash -?include_null_balances=true -``` - -**Default:** `false` - -## 🔄 Response Changes - -### 7. **Pagination Changes** - -Pagination responses have been simplified. The API no longer computes total result counts due to performance and accuracy considerations when working with ClickHouse views and materialized tables. - -**Before:** - -```json -{ - "pagination": { - "previous_page": 1, - "current_page": 2, - "next_page": 3, - "total_pages": 10 - }, - "total_results": 1234 -} -``` - -**After:** - -```json -{ - "pagination": { - "previous_page": 1, - "current_page": 2 - } -} -``` - -**Removed fields:** - -- `next_page` -- `total_pages` -- `total_results` - -**Important:** To retrieve all results, continue incrementing the `page` parameter until the API returns an empty `data` array. This indicates you've reached the end of the results. - -### 8. **Removed Parameters** - -The following deprecated parameters have been removed: - -- `orderBy` - Results are now ordered by timestamp/block by default -- `orderDirection` - Always descending (newest first) - -## 📚 Example Migrations - -### Old vs New: Get Token Balances - -**Before:** - -```bash -GET /balances/evm/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045?network_id=mainnet&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 -``` - -**After:** - -```bash -GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 -``` - -### New Feature: Batched Queries - -Query balances for multiple contracts in a single request: - -```bash -GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 -``` - -## ⚠️ Important Notes - -1. **Backward Compatibility:** The old endpoints are deprecated and will be removed in the future. Migrate by **Oct 30, 2025**. - -2. **Default Sorting:** All results are now sorted by timestamp (descending) by default. Custom sorting is no longer supported. - -3. **Pagination:** Continue paging through results by incrementing the `page` parameter until you receive an empty `data` array. The API no longer provides total counts due to performance optimizations with ClickHouse. - -4. **Time Defaults:** If you previously relied on fetching all historical data without time filters, note that `start_time` now defaults to `2025-01-01`. Adjust accordingly if you need earlier data. diff --git a/website/src/pages/sv/index.json b/website/src/pages/sv/index.json index c587ea1d2cdd..d0cb7f764805 100644 --- a/website/src/pages/sv/index.json +++ b/website/src/pages/sv/index.json @@ -2,7 +2,7 @@ "title": "Home", "hero": { "title": "The Graph Docs", - "description": "The Graph is a blockchain data solution that powers applications, analytics, and AI on 90+ chains. The Graph's core products include the Token API for web3 apps, Subgraphs for indexing smart contracts, and Substreams for real-time and historical data streaming.", + "description": "The Graph is a blockchain data solution that powers applications, analytics, and AI on 80+ chains. The Graph's core products include the Token API for web3 apps, Subgraphs for indexing smart contracts, and Substreams for real-time and historical data streaming.", "cta1": "How The Graph works", "cta2": "Build your first subgraph" }, diff --git a/website/src/pages/sv/subgraphs/guides/_meta.js b/website/src/pages/sv/subgraphs/guides/_meta.js index fd5608dcceb2..1c081848ea08 100644 --- a/website/src/pages/sv/subgraphs/guides/_meta.js +++ b/website/src/pages/sv/subgraphs/guides/_meta.js @@ -2,7 +2,6 @@ export default { 'subgraph-composition': '', 'subgraph-debug-forking': '', near: '', - grafting: '', 'subgraph-uncrashable': '', 'transfer-to-the-graph': '', diff --git a/website/src/pages/sv/token-api/_meta.js b/website/src/pages/sv/token-api/_meta.js index a8624da52e7f..9588f70cec53 100644 --- a/website/src/pages/sv/token-api/_meta.js +++ b/website/src/pages/sv/token-api/_meta.js @@ -11,6 +11,6 @@ export default { 'tvm-dexs': titles['tvm-dexs'] ?? '', monitoring: titles['monitoring'] ?? '', 'endpoint-pricing': '', + guides: titles['guides'] ?? '', faq: '', - 'upgrade-to-v1': '', } diff --git a/website/src/pages/sv/token-api/guides/_meta-titles.json b/website/src/pages/sv/token-api/guides/_meta-titles.json new file mode 100644 index 000000000000..cd93dcc0fc0b --- /dev/null +++ b/website/src/pages/sv/token-api/guides/_meta-titles.json @@ -0,0 +1,4 @@ +{ + "gpt": "Create Custom GPTS", + "upgrade-to-v1": "" +} diff --git a/website/src/pages/sv/token-api/guides/_meta.js b/website/src/pages/sv/token-api/guides/_meta.js new file mode 100644 index 000000000000..e5aaaadd78f2 --- /dev/null +++ b/website/src/pages/sv/token-api/guides/_meta.js @@ -0,0 +1,4 @@ +export default { + gpt: '', + 'upgrade-to-v1': '', +} diff --git a/website/src/pages/sv/token-api/guides/gpt.mdx b/website/src/pages/sv/token-api/guides/gpt.mdx new file mode 100644 index 000000000000..564d013dea20 --- /dev/null +++ b/website/src/pages/sv/token-api/guides/gpt.mdx @@ -0,0 +1,121 @@ +--- +title: How the Token API Powers Custom GPTs +sidebarTitle: Create Custom GPTs +--- + +## Overview + +The Token API is a pre-indexed blockchain data service that provides real-time access to token balances, metadata, prices, liquidity, and volume across multiple chains. Developers use its REST endpoints to build wallets, trading dashboards, DeFi analytics, and AI systems without maintaining their own indexing stack. Custom GPTs can connect directly to the Token API's OpenAPI schema. + +The Token API enables developers to build **Custom GPTs** to reason over live blockchain data inside ChatGPT that can reason over and respond with live blockchain data directly inside ChatGPT. + +## What the Token API Enables in Custom GPTs + +When a Custom GPT is wired to the Token API, it gains access to a machine-readable schema and authenticated endpoints. Developers can use this to: + +- **Query real-time onchain data**: Balances, token prices, liquidity, and transaction history. +- **Automate domain-specific tasks**: Portfolio tracking, accounting, reconciliation, and market analysis. +- **Power AI agents with verifiable blockchain context**: Use the same data sources dapps rely on. + +Because the Token API provides a machine-readable schema and authenticated requests, it serves as a structured data layer that enables GPT-5 agents to combine natural language reasoning with live onchain data from The Graph. + +## When to Use the Token API for Custom GPTs + +Use the Token API when your GPT needs repeatable, domain-specific behavior grounded in blockchain data. This is most effective when the GPT performs the same type of task frequently or enforces a workflow you define. For one-off or exploratory questions, standard ChatGPT prompts are sufficient. + +## Choosing a Use Case + +Start with a clear, narrow objective, then expand as needed. Common patterns include: + +- **Accounting GPT**: Onchain accounting, tax tagging, and portfolio reconciliation. +- **Trading GPT**: Liquidity, pricing, and volume analysis for trading strategies. +- **Protocol Tracking GPT**: Real-time monitoring of transaction activity and liquidity pools. + +A focused initial goal such as “Retrieve token balances and prices for a wallet” makes it easier to configure reliable behavior before adding complex workflows. + +## Requirements + +| Requirement | Description | +| ---------------------- | -------------------------------------------------------- | +| ChatGPT 5 | Custom GPT creation requires GPT-5 tier or Pro. | +| Token API Subscription | Sign up at [The Graph Market](https://thegraph.market./) | +| Token API Key | Available in your dashboard as the Authentication JWT. | + +## Setting Up a Custom GPT + +Below is an explanatory outline of what happens during setup. This section provides conceptual understanding. + +### Create Custom GPT + +1. Visit chat.openai.com/gpts in your browser. 2, Click Create (top right). +2. Under Configure (in the top left panel), set up your GPT's personality and scope. + +### Configure Your GPT + +You define the GPT's role, scope, and metadata so it knows what it is designed to do. This includes: + +- **Name and Description**: Helps users discover your GPT. + - For example: **Name**: Token Tracker GPT **Description**: An onchain analytics assistant that retrieves live token balances, prices, and liquidity data using The Graph's Token API. +- **Instructions**: Tells the GPT what tasks it should perform using the Token API. + - For example: You are a blockchain data assistant retrieving onchain token data from The Graph's Token API. Use endpoints to fetch balances, liquidity, and price history across EVM chains. Present results in tables with token symbols, prices, and USD values. +- **Knowledge**: Optional context files such as wallet references, accounting rules, or code snippets. +- **New Action**: At the bottom, click “Create new action” to connect your GPT to the Token API. + +### Connect the Token API + +To enable live blockchain queries inside ChatGPT, you connect the GPT to the Token API through: + +#### Authentication + +1. Set Authentication to API Key → Bearer. +2. Open [The Graph Market](https://thegraph.market./) and copy your Authentication JWT from your dashboard. +3. Paste the token into the ChatGPT prompt where the field shows [HIDDEN]. + +#### Schema + +1. Above the Schema box, click Import from URL. +2. Paste: https://token-api.thegraph.com/openapi +3. Click Import. You'll now see endpoints like: + - `getV1EvmTokens` + - `getV1EvmDexes` + - `getV1EvmBalances` +4. Click Test on one (for example `getV1EvmDexes`) to verify connection. + +##### Privacy + +1. At the bottom, under Privacy, paste: https://pinax.network/en/legal/privacy + +### Privacy + +You can attach a privacy policy URL such as: https://pinax.network/en/legal/privacy + +## Example Prompt Patterns + +These examples help illustrate how a GPT reasons over Token API data. + +### Wallet and Portfolio + +Get the total USD balance for a wallet across multiple chains, returning token name, symbol, balance, and price. + +### Trading Analysis + +Compare USDC and DAI liquidity across Uniswap and Curve. Return the top 5 pools by TVL. + +### Accounting + +List all ERC-20 transfers for this address in the last 30 days. Group by token and total incoming/outgoing volume. + +## Best Practices + +| Tip | Why It Matters | +| --------------------------------- | ---------------------------------------------------------------------- | +| Scope your GPT narrowly first | Simplifies debugging and validates schema integration. | +| Use clear role instructions | Helps the GPT choose the right endpoints and avoid assumptions. | +| Name endpoints explicitly | Improves routing accuracy when fetching balances, prices, or DEX data. | +| Combine with code | Enables custom parsing or logic for complex workflows. | +| Add Subgraph or Substream context | Provides richer analytics when combined with Token API data. | + +## FAQs & Resources + +- Builders Office Hours (October 23, 2025) +- Watch the full session: https://x.com/i/broadcasts/1mrGmBzBarNJy diff --git a/website/src/pages/sv/token-api/guides/upgrade-to-v1.mdx b/website/src/pages/sv/token-api/guides/upgrade-to-v1.mdx new file mode 100644 index 000000000000..e2a7ccf973fa --- /dev/null +++ b/website/src/pages/sv/token-api/guides/upgrade-to-v1.mdx @@ -0,0 +1,346 @@ +--- +title: Upgrade to v1 +--- + +This guide covers the migration from the legacy API structure to the new v1 API. The refactoring introduces versioned endpoints, standardized query parameters, improved batching support, and consistent naming conventions. + +**Note** + +- `EVM` = Ethereum Virtual Machine + +Used to describe endpoints supporting EVM-based chains (e.g. `base`, `bsc`, `mainnet`, ...). + +- `SVM` = Solana Virtual Machine + +Used to describe endpoints supporting Solana (currently the only SVM chain supported). + +## 🔑 Breaking Changes Summary + +### 1. API Versioning + +All endpoints now use the `/v1` prefix. + +**Before:** + +``` +GET /balances/evm +GET /nft/items/contract/:contract/token_id/:token_id +``` + +**After:** + +``` +GET /v1/evm/balances +GET /v1/evm/nft/items +``` + +### 2. Route Structure Reorganization + +#### 2.1 EVM Endpoints + +Consolidated under `/v1/evm/*` + +| Old Endpoint | New Endpoint | +| ------------------------------------------------------ | ----------------------------- | +| `/balances/evm` | `/v1/evm/balances` | +| `/historical/balances/evm` | `/v1/evm/balances/historical` | +| `/holders/evm/:contract` | `/v1/evm/holders` | +| `/tokens/evm/:contract` | `/v1/evm/tokens` | +| `/transfers/evm` | `/v1/evm/transfers` | +| `/pools/evm` | `/v1/evm/pools` | +| `/swaps/evm` | `/v1/evm/swaps` | +| `/dexes/evm` | `/v1/evm/dexes` | +| `/ohlc/prices/evm/:contract` | _(removed)_ | +| `/ohlc/pools/evm/:pool` | `/v1/evm/pools/ohlc` | +| `/nft/ownerships/evm/:address` | `/v1/evm/nft/ownerships` | +| `/nft/collections/evm/:contract` | `/v1/evm/nft/collections` | +| `/nft/items/evm/contract/:contract/token_id/:token_id` | `/v1/evm/nft/items` | +| `/nft/holders/evm/:contract` | `/v1/evm/nft/holders` | +| `/nft/activities/evm` | `/v1/evm/nft/transfers` | +| `/nft/sales/evm` | `/v1/evm/nft/sales` | + +**Important:** The NFT endpoint `/nft/activities` has been renamed to `/v1/evm/nft/transfers` to better reflect its purpose. + +**Important:** The EVM Token OHLCV Data endpoint `/ohlc/prices/evm/{contract}` has been removed. You can use `/v1/evm/pools` to find stablecoin pairs for your contract and `/v1/evm/pools/ohlc` for OHLCV data for that pair. + +--- + +#### 2.2 New EVM native balances endpoint + +Native balances for EVM chains can be found under `/v1/evm/balances/native`. They will not show up in the `/v1/evm/balances` endpoint. + +Other endpoints can still use native token under the `0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee` contract. + +--- + +#### 2.3 SVM Endpoints + +Consolidated under `/v1/svm/*` + +| Old Endpoint | New Endpoint | +| ------------------------ | ------------------------- | +| `/balances/svm` | `/v1/svm/balances` | +| `/balances/native/svm` | `/v1/svm/balances/native` | +| `/holders/svm/:contract` | `/v1/svm/holders` | +| `/tokens/svm/:mint` | `/v1/svm/tokens` | +| `/transfers/svm` | `/v1/svm/transfers` | +| `/pools/svm` | `/v1/svm/pools` | +| `/swaps/svm` | `/v1/svm/swaps` | +| `/dexes/svm` | `/v1/svm/dexes` | +| `/owner/svm/:account` | `/v1/svm/owner` | +| `/ohlc/pools/svm/:pool` | `/v1/svm/pools/ohlc` | + +## 📝 Parameter Changes + +### 3. Path Parameters → Query Parameters + +All path parameters have been moved to query parameters. + +**Before:** + +```bash +GET /balances/evm/:address +GET /holders/evm/:contract +GET /nft/items/evm/contract/:contract/token_id/:token_id +``` + +**After:** + +```bash +GET /v1/evm/balances?network=mainnet&address=0x... +GET /v1/evm/holders?network=mainnet&contract=0x... +GET /v1/evm/nft/items?network=mainnet&contract=0x...&token_id=5712 +``` + +### 4. Standardized Parameter Naming + +All query parameters have been standardized to use snake_case naming convention. + +| Old Parameter | New Parameter | Notes | +| --- | --- | --- | +| `network_id` | `network` | Renamed, `matic` has also been renamed to `polygon` | +| `anyAddress` | `address` | Matches either `from` or `to` address | +| `from`, `fromAddress`, `offererAddress` | `from_address`, `offerer` | - | +| `to`, `toAddress`, `recipientAddress` | `to_address`, `recipient` | - | +| `startTime` | `start_time` | Default: `1735689600` (`2025-01-01`) | +| `endTime` | `end_time` | Default: `9999999999` | +| - | `start_block` | New parameter, default: `0` | +| - | `end_block` | New parameter, default: `9999999999` | +| - | `include_null_balances` | New parameter, default: `false` | +| `tx_hash` | `transaction_id` | - | +| `token` | `input_token`, `output_token` | More explicit for pool queries | +| `pool` | `amm_pool` | - | +| `orderBy`, `orderDirection` | _(removed)_ | Always sorted by most recent timestamp first | + +**Important:** The `network_id` parameter has been renamed to `network`. + +**Important:** `matic` network has been renamed to `polygon`. + +### 5. Batched Parameters + +Many parameters now support batching - accepting single values or comma-separated strings. + +**Supported Batched Parameters:** + +- `address`, `from_address`, `to_address` +- `contract`, `token_id` +- `factory`, `pool` +- `owner`, `token_account`, `mint` +- `transaction_id`, `signature` + +**Examples:** + +```console +## Single value +?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 + +## Comma-separated, single parameter +?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 + +## Repeated parameter values +?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&contract=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 +``` + +### 6. New Parameters + +#### `include_null_balances` + +Added to balance endpoints to optionally include zero/null balances. + +```bash +?include_null_balances=true +``` + +**Default:** `false` + +## 🔄 Response Changes + +### 7. Pagination Changes + +Pagination responses have been simplified. The API no longer computes total result counts due to performance and accuracy considerations when working with ClickHouse views and materialized tables. + +**Before:** + +```json +{ + "pagination": { + "previous_page": 1, + "current_page": 2, + "next_page": 3, + "total_pages": 10 + }, + "total_results": 1234 +} +``` + +**After:** + +```json +{ + "pagination": { + "previous_page": 1, + "current_page": 2 + } +} +``` + +**Removed fields:** + +- `next_page` +- `total_pages` +- `total_results` + +**Important:** To retrieve all results, continue incrementing the `page` parameter until the API returns an empty `data` array. This indicates you've reached the end of the results. + +### 8. Removed Parameters + +The following deprecated parameters have been removed: + +- `orderBy` - Results are now ordered by timestamp/block by default +- `orderDirection` - Always descending (newest first) + +### 9. Cached Queries + +Queries are now cached on the ClickHouse side for better performance. + +You can specifically request to not use the cache by setting the `Cache-Control` header to `no-cache`. + +#### Example + +**Cache** + +```console +$ curl -s 'https://token-api.thegraph.com/v1/...' | jq .statistics +{ + "bytes_read": 221, + "rows_read": 1, + "elapsed": 0.002212065 +} +``` + +**No cache** + +```console +$ curl -s 'http://localhost:8000/v1/...' --header 'Cache-Control: no-cache' | jq .statistics +{ + "bytes_read": 14621174348, + "rows_read": 223244390, + "elapsed": 0.971064066 +} +``` + +## 📚 Example Migrations + +### Example 1: Get Token Balances + +**Before:** + +```bash +GET /token/balances/evm/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045?network_id=mainnet&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 +``` + +**After:** + +```bash +GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 +``` + +### Example 2: Get NFT Items + +**Before:** + +```bash +GET /nft/items/evm/contract/0xbd3531da5cf5857e7cfaa92426877b022e612cf8/token_id/5712?network_id=mainnet +``` + +**After:** + +```bash +GET /v1/evm/nft/items?network=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&token_id=5712 +``` + +### Example 3: Get Token Transfers with Time Filter + +**Before:** + +```bash +GET /token/transfers/evm?network_id=mainnet&from=0xd8da6bf26964af9d7eed9e03e53415d37aa96045&startTime=1735689600&endTime=1767225600 +``` + +**After:** + +```bash +GET /v1/evm/transfers?network=mainnet&from_address=0xd8da6bf26964af9d7eed9e03e53415d37aa96045&start_time=1735689600&end_time=1767225600 +``` + +### Example 4: Get NFT Transfer Activities + +**Before:** + +```bash +GET /nft/activities/evm?network_id=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&anyAddress=0xd8da6bf26964af9d7eed9e03e53415d37aa96045 +``` + +**After:** + +```bash +GET /v1/evm/nft/transfers?network=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&address=0xd8da6bf26964af9d7eed9e03e53415d37aa96045 +``` + +### Example 5: Get Pool OHLC Data + +**Before:** + +```bash +GET /token/ohlc/pools/evm/0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640?network_id=mainnet&interval=1h&startTime=1735689600 +``` + +**After:** + +```bash +GET /v1/evm/pools/ohlc?network=mainnet&pool=0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640&interval=1h&start_time=1735689600 +``` + +### Example 6: Batched Query (New Feature) + +Query balances for multiple contracts in a single request: + +```bash +GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 +``` + +Query transfers from multiple addresses: + +```bash +GET /v1/evm/transfers?network=mainnet&from_address=0xabc...,0xdef...,0x123...&start_time=1735689600 +``` + +## ⚠️ Important Notes + +1. **Migration Notes:** The old endpoints were deprecated and removed on **October 30, 2025**. Please ensure all integrations have been migrated to the new Token API v1 endpoints. + +2. **Default Sorting:** All results are now sorted by timestamp (descending) by default. Custom sorting is no longer supported. + +3. **Pagination:** Continue paging through results by incrementing the `page` parameter until you receive an empty `data` array. The API no longer provides total counts due to performance optimizations with ClickHouse. + +4. **Time Defaults:** If you previously relied on fetching all historical data without time filters, note that `start_time` now defaults to `2025-01-01`. Adjust accordingly if you need earlier data. diff --git a/website/src/pages/sv/token-api/upgrade-to-v1.mdx b/website/src/pages/sv/token-api/upgrade-to-v1.mdx deleted file mode 100644 index fbe09101eaa5..000000000000 --- a/website/src/pages/sv/token-api/upgrade-to-v1.mdx +++ /dev/null @@ -1,254 +0,0 @@ ---- -title: Upgrade to v1 ---- - -This guide covers the migration from the legacy API structure to the new v1 API. The refactoring introduces versioned endpoints, standardized query parameters, improved batching support, and consistent naming conventions. - -**Note** - -- `EVM` = Ethereum Virtual Machine - -Used to describe endpoints supporting EVM-based chains (e.g. `base`, `bsc`, `mainnet`, ...). - -- `SVM` = Solana Virtual Machine - -Used to describe endpoints supporting Solana (currently the only SVM chain supported). - -## 🔑 Breaking Changes Summary - -### 1. **API Versioning** - -All endpoints now use the `/v1` prefix. - -**Before:** - -``` -GET /balances/evm -GET /nft/items/contract/:contract/token_id/:token_id -``` - -**After:** - -``` -GET /v1/evm/balances -GET /v1/evm/nft/items -``` - -### 2. **Route Structure Reorganization** - -#### 2.1 EVM Endpoints - -Consolidated under `/v1/evm/*` - -| Old Endpoint | New Endpoint | -| ------------------------------------------------------ | ----------------------------- | -| `/balances/evm` | `/v1/evm/balances` | -| `/historical/balances/evm` | `/v1/evm/balances/historical` | -| `/holders/evm/:contract` | `/v1/evm/holders` | -| `/tokens/evm/:contract` | `/v1/evm/tokens` | -| `/transfers/evm` | `/v1/evm/transfers` | -| `/pools/evm` | `/v1/evm/pools` | -| `/swaps/evm` | `/v1/evm/swaps` | -| `/dexes/evm` | `/v1/evm/dexes` | -| `/ohlc/prices/evm/:contract` | _(removed)_ | -| `/ohlc/pools/evm/:pool` | `/v1/evm/pools/ohlc` | -| `/nft/ownerships/evm/:address` | `/v1/evm/nft/ownerships` | -| `/nft/collections/evm/:contract` | `/v1/evm/nft/collections` | -| `/nft/items/evm/contract/:contract/token_id/:token_id` | `/v1/evm/nft/items` | -| `/nft/holders/evm/:contract` | `/v1/evm/nft/holders` | -| `/nft/activities/evm` | `/v1/evm/nft/transfers` | -| `/nft/sales/evm` | `/v1/evm/nft/sales` | - -**Important:** The NFT endpoint `/nft/activities` has been renamed to `/v1/evm/nft/transfers` to better reflect its purpose. - -**Important:** The EVM Token OHLCV Data endpoint `/ohlc/prices/evm/{contract}` has been removed. You can use `/v1/evm/pools` to find stablecoin pairs for your contract and `/v1/evm/pools/ohlc` for OHLCV data for that pair. - ---- - -#### 2.2 New EVM native balances endpoint - -Native balances for EVM chains can be found under `/v1/evm/balances/native`. They will not show up in the `/v1/evm/balances` endpoint. - -Other endpoints can still use native token under the `0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee` contract. - ---- - -#### 2.3 SVM Endpoints - -Consolidated under `/v1/svm/*` - -| Old Endpoint | New Endpoint | -| ------------------------ | ------------------------- | -| `/balances/svm` | `/v1/svm/balances` | -| `/balances/native/svm` | `/v1/svm/balances/native` | -| `/holders/svm/:contract` | `/v1/svm/holders` | -| `/tokens/svm/:mint` | `/v1/svm/tokens` | -| `/transfers/svm` | `/v1/svm/transfers` | -| `/pools/svm` | `/v1/svm/pools` | -| `/swaps/svm` | `/v1/svm/swaps` | -| `/dexes/svm` | `/v1/svm/dexes` | -| `/owner/svm/:account` | `/v1/svm/owner` | -| `/ohlc/pools/svm/:pool` | `/v1/svm/pools/ohlc` | - -## 📝 Parameter Changes - -### 3. **Path Parameters → Query Parameters** - -All path parameters have been moved to query parameters. - -**Before:** - -```bash -GET /balances/evm/:address -GET /holders/evm/:contract -GET /nft/items/evm/contract/:contract/token_id/:token_id -``` - -**After:** - -```bash -GET /v1/evm/balances?network=mainnet&address=0x... -GET /v1/evm/holders?network=mainnet&contract=0x... -GET /v1/evm/nft/items?network=mainnet&contract=0x...&token_id=5712 -``` - -### 4. **Standardized Parameter Naming** - -All query parameters have been standardized to use snake_case naming convention. - -| Old Parameter | New Parameter | Notes | -| --- | --- | --- | -| `network_id` | `network` | Renamed, `matic` has also been renamed to `polygon` | -| `anyAddress` | `address` | Matches either `from` or `to` address | -| `from`, `fromAddress`, `offererAddress` | `from_address`, `offerer` | - | -| `to`, `toAddress`, `recipientAddress` | `to_address`, `recipient` | - | -| `startTime` | `start_time` | Default: `1735689600` (`2025-01-01`) | -| `endTime` | `end_time` | Default: `9999999999` | -| - | `start_block` | New parameter, default: `0` | -| - | `end_block` | New parameter, default: `9999999999` | -| - | `include_null_balances` | New parameter, default: `false` | -| `tx_hash` | `transaction_id` | - | -| `token` | `input_token`, `output_token` | More explicit for pool queries | -| `pool` | `amm_pool` | - | -| `orderBy`, `orderDirection` | _(removed)_ | Always sorted by most recent timestamp first | - -**Important:** The `network_id` parameter has been renamed to `network`. - -**Important:** `matic` network has been renamed to `polygon`. - -### 5. **Batched Parameters** - -Many parameters now support batching - accepting single values or comma-separated strings. - -**Supported Batched Parameters:** - -- `address`, `from_address`, `to_address` -- `contract`, `token_id` -- `factory`, `pool` -- `owner`, `token_account`, `mint` -- `transaction_id`, `signature` - -**Examples:** - -```console -# Single value -?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 - -# Comma-separated, single parameter -?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 - -# Repeated parameter values -?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&contract=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 -``` - -### 6. **New Parameters** - -#### `include_null_balances` - -Added to balance endpoints to optionally include zero/null balances. - -```bash -?include_null_balances=true -``` - -**Default:** `false` - -## 🔄 Response Changes - -### 7. **Pagination Changes** - -Pagination responses have been simplified. The API no longer computes total result counts due to performance and accuracy considerations when working with ClickHouse views and materialized tables. - -**Before:** - -```json -{ - "pagination": { - "previous_page": 1, - "current_page": 2, - "next_page": 3, - "total_pages": 10 - }, - "total_results": 1234 -} -``` - -**After:** - -```json -{ - "pagination": { - "previous_page": 1, - "current_page": 2 - } -} -``` - -**Removed fields:** - -- `next_page` -- `total_pages` -- `total_results` - -**Important:** To retrieve all results, continue incrementing the `page` parameter until the API returns an empty `data` array. This indicates you've reached the end of the results. - -### 8. **Removed Parameters** - -The following deprecated parameters have been removed: - -- `orderBy` - Results are now ordered by timestamp/block by default -- `orderDirection` - Always descending (newest first) - -## 📚 Example Migrations - -### Old vs New: Get Token Balances - -**Before:** - -```bash -GET /balances/evm/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045?network_id=mainnet&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 -``` - -**After:** - -```bash -GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 -``` - -### New Feature: Batched Queries - -Query balances for multiple contracts in a single request: - -```bash -GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 -``` - -## ⚠️ Important Notes - -1. **Backward Compatibility:** The old endpoints are deprecated and will be removed in the future. Migrate by **Oct 30, 2025**. - -2. **Default Sorting:** All results are now sorted by timestamp (descending) by default. Custom sorting is no longer supported. - -3. **Pagination:** Continue paging through results by incrementing the `page` parameter until you receive an empty `data` array. The API no longer provides total counts due to performance optimizations with ClickHouse. - -4. **Time Defaults:** If you previously relied on fetching all historical data without time filters, note that `start_time` now defaults to `2025-01-01`. Adjust accordingly if you need earlier data. diff --git a/website/src/pages/tr/index.json b/website/src/pages/tr/index.json index d80ecab9206f..454d6b364941 100644 --- a/website/src/pages/tr/index.json +++ b/website/src/pages/tr/index.json @@ -2,7 +2,7 @@ "title": "Ana sayfa", "hero": { "title": "The Graph Dokümantasyonu", - "description": "The Graph is a blockchain data solution that powers applications, analytics, and AI on 90+ chains. The Graph's core products include the Token API for web3 apps, Subgraphs for indexing smart contracts, and Substreams for real-time and historical data streaming.", + "description": "The Graph is a blockchain data solution that powers applications, analytics, and AI on 80+ chains. The Graph's core products include the Token API for web3 apps, Subgraphs for indexing smart contracts, and Substreams for real-time and historical data streaming.", "cta1": "The Graph nasıl çalışır?", "cta2": "İlk subgraph'inizi oluşturun" }, diff --git a/website/src/pages/tr/subgraphs/guides/_meta.js b/website/src/pages/tr/subgraphs/guides/_meta.js index fd5608dcceb2..1c081848ea08 100644 --- a/website/src/pages/tr/subgraphs/guides/_meta.js +++ b/website/src/pages/tr/subgraphs/guides/_meta.js @@ -2,7 +2,6 @@ export default { 'subgraph-composition': '', 'subgraph-debug-forking': '', near: '', - grafting: '', 'subgraph-uncrashable': '', 'transfer-to-the-graph': '', diff --git a/website/src/pages/tr/token-api/_meta.js b/website/src/pages/tr/token-api/_meta.js index a8624da52e7f..9588f70cec53 100644 --- a/website/src/pages/tr/token-api/_meta.js +++ b/website/src/pages/tr/token-api/_meta.js @@ -11,6 +11,6 @@ export default { 'tvm-dexs': titles['tvm-dexs'] ?? '', monitoring: titles['monitoring'] ?? '', 'endpoint-pricing': '', + guides: titles['guides'] ?? '', faq: '', - 'upgrade-to-v1': '', } diff --git a/website/src/pages/tr/token-api/guides/_meta-titles.json b/website/src/pages/tr/token-api/guides/_meta-titles.json new file mode 100644 index 000000000000..cd93dcc0fc0b --- /dev/null +++ b/website/src/pages/tr/token-api/guides/_meta-titles.json @@ -0,0 +1,4 @@ +{ + "gpt": "Create Custom GPTS", + "upgrade-to-v1": "" +} diff --git a/website/src/pages/tr/token-api/guides/_meta.js b/website/src/pages/tr/token-api/guides/_meta.js new file mode 100644 index 000000000000..e5aaaadd78f2 --- /dev/null +++ b/website/src/pages/tr/token-api/guides/_meta.js @@ -0,0 +1,4 @@ +export default { + gpt: '', + 'upgrade-to-v1': '', +} diff --git a/website/src/pages/tr/token-api/guides/gpt.mdx b/website/src/pages/tr/token-api/guides/gpt.mdx new file mode 100644 index 000000000000..564d013dea20 --- /dev/null +++ b/website/src/pages/tr/token-api/guides/gpt.mdx @@ -0,0 +1,121 @@ +--- +title: How the Token API Powers Custom GPTs +sidebarTitle: Create Custom GPTs +--- + +## Overview + +The Token API is a pre-indexed blockchain data service that provides real-time access to token balances, metadata, prices, liquidity, and volume across multiple chains. Developers use its REST endpoints to build wallets, trading dashboards, DeFi analytics, and AI systems without maintaining their own indexing stack. Custom GPTs can connect directly to the Token API's OpenAPI schema. + +The Token API enables developers to build **Custom GPTs** to reason over live blockchain data inside ChatGPT that can reason over and respond with live blockchain data directly inside ChatGPT. + +## What the Token API Enables in Custom GPTs + +When a Custom GPT is wired to the Token API, it gains access to a machine-readable schema and authenticated endpoints. Developers can use this to: + +- **Query real-time onchain data**: Balances, token prices, liquidity, and transaction history. +- **Automate domain-specific tasks**: Portfolio tracking, accounting, reconciliation, and market analysis. +- **Power AI agents with verifiable blockchain context**: Use the same data sources dapps rely on. + +Because the Token API provides a machine-readable schema and authenticated requests, it serves as a structured data layer that enables GPT-5 agents to combine natural language reasoning with live onchain data from The Graph. + +## When to Use the Token API for Custom GPTs + +Use the Token API when your GPT needs repeatable, domain-specific behavior grounded in blockchain data. This is most effective when the GPT performs the same type of task frequently or enforces a workflow you define. For one-off or exploratory questions, standard ChatGPT prompts are sufficient. + +## Choosing a Use Case + +Start with a clear, narrow objective, then expand as needed. Common patterns include: + +- **Accounting GPT**: Onchain accounting, tax tagging, and portfolio reconciliation. +- **Trading GPT**: Liquidity, pricing, and volume analysis for trading strategies. +- **Protocol Tracking GPT**: Real-time monitoring of transaction activity and liquidity pools. + +A focused initial goal such as “Retrieve token balances and prices for a wallet” makes it easier to configure reliable behavior before adding complex workflows. + +## Requirements + +| Requirement | Description | +| ---------------------- | -------------------------------------------------------- | +| ChatGPT 5 | Custom GPT creation requires GPT-5 tier or Pro. | +| Token API Subscription | Sign up at [The Graph Market](https://thegraph.market./) | +| Token API Key | Available in your dashboard as the Authentication JWT. | + +## Setting Up a Custom GPT + +Below is an explanatory outline of what happens during setup. This section provides conceptual understanding. + +### Create Custom GPT + +1. Visit chat.openai.com/gpts in your browser. 2, Click Create (top right). +2. Under Configure (in the top left panel), set up your GPT's personality and scope. + +### Configure Your GPT + +You define the GPT's role, scope, and metadata so it knows what it is designed to do. This includes: + +- **Name and Description**: Helps users discover your GPT. + - For example: **Name**: Token Tracker GPT **Description**: An onchain analytics assistant that retrieves live token balances, prices, and liquidity data using The Graph's Token API. +- **Instructions**: Tells the GPT what tasks it should perform using the Token API. + - For example: You are a blockchain data assistant retrieving onchain token data from The Graph's Token API. Use endpoints to fetch balances, liquidity, and price history across EVM chains. Present results in tables with token symbols, prices, and USD values. +- **Knowledge**: Optional context files such as wallet references, accounting rules, or code snippets. +- **New Action**: At the bottom, click “Create new action” to connect your GPT to the Token API. + +### Connect the Token API + +To enable live blockchain queries inside ChatGPT, you connect the GPT to the Token API through: + +#### Authentication + +1. Set Authentication to API Key → Bearer. +2. Open [The Graph Market](https://thegraph.market./) and copy your Authentication JWT from your dashboard. +3. Paste the token into the ChatGPT prompt where the field shows [HIDDEN]. + +#### Schema + +1. Above the Schema box, click Import from URL. +2. Paste: https://token-api.thegraph.com/openapi +3. Click Import. You'll now see endpoints like: + - `getV1EvmTokens` + - `getV1EvmDexes` + - `getV1EvmBalances` +4. Click Test on one (for example `getV1EvmDexes`) to verify connection. + +##### Privacy + +1. At the bottom, under Privacy, paste: https://pinax.network/en/legal/privacy + +### Privacy + +You can attach a privacy policy URL such as: https://pinax.network/en/legal/privacy + +## Example Prompt Patterns + +These examples help illustrate how a GPT reasons over Token API data. + +### Wallet and Portfolio + +Get the total USD balance for a wallet across multiple chains, returning token name, symbol, balance, and price. + +### Trading Analysis + +Compare USDC and DAI liquidity across Uniswap and Curve. Return the top 5 pools by TVL. + +### Accounting + +List all ERC-20 transfers for this address in the last 30 days. Group by token and total incoming/outgoing volume. + +## Best Practices + +| Tip | Why It Matters | +| --------------------------------- | ---------------------------------------------------------------------- | +| Scope your GPT narrowly first | Simplifies debugging and validates schema integration. | +| Use clear role instructions | Helps the GPT choose the right endpoints and avoid assumptions. | +| Name endpoints explicitly | Improves routing accuracy when fetching balances, prices, or DEX data. | +| Combine with code | Enables custom parsing or logic for complex workflows. | +| Add Subgraph or Substream context | Provides richer analytics when combined with Token API data. | + +## FAQs & Resources + +- Builders Office Hours (October 23, 2025) +- Watch the full session: https://x.com/i/broadcasts/1mrGmBzBarNJy diff --git a/website/src/pages/tr/token-api/guides/upgrade-to-v1.mdx b/website/src/pages/tr/token-api/guides/upgrade-to-v1.mdx new file mode 100644 index 000000000000..e2a7ccf973fa --- /dev/null +++ b/website/src/pages/tr/token-api/guides/upgrade-to-v1.mdx @@ -0,0 +1,346 @@ +--- +title: Upgrade to v1 +--- + +This guide covers the migration from the legacy API structure to the new v1 API. The refactoring introduces versioned endpoints, standardized query parameters, improved batching support, and consistent naming conventions. + +**Note** + +- `EVM` = Ethereum Virtual Machine + +Used to describe endpoints supporting EVM-based chains (e.g. `base`, `bsc`, `mainnet`, ...). + +- `SVM` = Solana Virtual Machine + +Used to describe endpoints supporting Solana (currently the only SVM chain supported). + +## 🔑 Breaking Changes Summary + +### 1. API Versioning + +All endpoints now use the `/v1` prefix. + +**Before:** + +``` +GET /balances/evm +GET /nft/items/contract/:contract/token_id/:token_id +``` + +**After:** + +``` +GET /v1/evm/balances +GET /v1/evm/nft/items +``` + +### 2. Route Structure Reorganization + +#### 2.1 EVM Endpoints + +Consolidated under `/v1/evm/*` + +| Old Endpoint | New Endpoint | +| ------------------------------------------------------ | ----------------------------- | +| `/balances/evm` | `/v1/evm/balances` | +| `/historical/balances/evm` | `/v1/evm/balances/historical` | +| `/holders/evm/:contract` | `/v1/evm/holders` | +| `/tokens/evm/:contract` | `/v1/evm/tokens` | +| `/transfers/evm` | `/v1/evm/transfers` | +| `/pools/evm` | `/v1/evm/pools` | +| `/swaps/evm` | `/v1/evm/swaps` | +| `/dexes/evm` | `/v1/evm/dexes` | +| `/ohlc/prices/evm/:contract` | _(removed)_ | +| `/ohlc/pools/evm/:pool` | `/v1/evm/pools/ohlc` | +| `/nft/ownerships/evm/:address` | `/v1/evm/nft/ownerships` | +| `/nft/collections/evm/:contract` | `/v1/evm/nft/collections` | +| `/nft/items/evm/contract/:contract/token_id/:token_id` | `/v1/evm/nft/items` | +| `/nft/holders/evm/:contract` | `/v1/evm/nft/holders` | +| `/nft/activities/evm` | `/v1/evm/nft/transfers` | +| `/nft/sales/evm` | `/v1/evm/nft/sales` | + +**Important:** The NFT endpoint `/nft/activities` has been renamed to `/v1/evm/nft/transfers` to better reflect its purpose. + +**Important:** The EVM Token OHLCV Data endpoint `/ohlc/prices/evm/{contract}` has been removed. You can use `/v1/evm/pools` to find stablecoin pairs for your contract and `/v1/evm/pools/ohlc` for OHLCV data for that pair. + +--- + +#### 2.2 New EVM native balances endpoint + +Native balances for EVM chains can be found under `/v1/evm/balances/native`. They will not show up in the `/v1/evm/balances` endpoint. + +Other endpoints can still use native token under the `0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee` contract. + +--- + +#### 2.3 SVM Endpoints + +Consolidated under `/v1/svm/*` + +| Old Endpoint | New Endpoint | +| ------------------------ | ------------------------- | +| `/balances/svm` | `/v1/svm/balances` | +| `/balances/native/svm` | `/v1/svm/balances/native` | +| `/holders/svm/:contract` | `/v1/svm/holders` | +| `/tokens/svm/:mint` | `/v1/svm/tokens` | +| `/transfers/svm` | `/v1/svm/transfers` | +| `/pools/svm` | `/v1/svm/pools` | +| `/swaps/svm` | `/v1/svm/swaps` | +| `/dexes/svm` | `/v1/svm/dexes` | +| `/owner/svm/:account` | `/v1/svm/owner` | +| `/ohlc/pools/svm/:pool` | `/v1/svm/pools/ohlc` | + +## 📝 Parameter Changes + +### 3. Path Parameters → Query Parameters + +All path parameters have been moved to query parameters. + +**Before:** + +```bash +GET /balances/evm/:address +GET /holders/evm/:contract +GET /nft/items/evm/contract/:contract/token_id/:token_id +``` + +**After:** + +```bash +GET /v1/evm/balances?network=mainnet&address=0x... +GET /v1/evm/holders?network=mainnet&contract=0x... +GET /v1/evm/nft/items?network=mainnet&contract=0x...&token_id=5712 +``` + +### 4. Standardized Parameter Naming + +All query parameters have been standardized to use snake_case naming convention. + +| Old Parameter | New Parameter | Notes | +| --- | --- | --- | +| `network_id` | `network` | Renamed, `matic` has also been renamed to `polygon` | +| `anyAddress` | `address` | Matches either `from` or `to` address | +| `from`, `fromAddress`, `offererAddress` | `from_address`, `offerer` | - | +| `to`, `toAddress`, `recipientAddress` | `to_address`, `recipient` | - | +| `startTime` | `start_time` | Default: `1735689600` (`2025-01-01`) | +| `endTime` | `end_time` | Default: `9999999999` | +| - | `start_block` | New parameter, default: `0` | +| - | `end_block` | New parameter, default: `9999999999` | +| - | `include_null_balances` | New parameter, default: `false` | +| `tx_hash` | `transaction_id` | - | +| `token` | `input_token`, `output_token` | More explicit for pool queries | +| `pool` | `amm_pool` | - | +| `orderBy`, `orderDirection` | _(removed)_ | Always sorted by most recent timestamp first | + +**Important:** The `network_id` parameter has been renamed to `network`. + +**Important:** `matic` network has been renamed to `polygon`. + +### 5. Batched Parameters + +Many parameters now support batching - accepting single values or comma-separated strings. + +**Supported Batched Parameters:** + +- `address`, `from_address`, `to_address` +- `contract`, `token_id` +- `factory`, `pool` +- `owner`, `token_account`, `mint` +- `transaction_id`, `signature` + +**Examples:** + +```console +## Single value +?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 + +## Comma-separated, single parameter +?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 + +## Repeated parameter values +?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&contract=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 +``` + +### 6. New Parameters + +#### `include_null_balances` + +Added to balance endpoints to optionally include zero/null balances. + +```bash +?include_null_balances=true +``` + +**Default:** `false` + +## 🔄 Response Changes + +### 7. Pagination Changes + +Pagination responses have been simplified. The API no longer computes total result counts due to performance and accuracy considerations when working with ClickHouse views and materialized tables. + +**Before:** + +```json +{ + "pagination": { + "previous_page": 1, + "current_page": 2, + "next_page": 3, + "total_pages": 10 + }, + "total_results": 1234 +} +``` + +**After:** + +```json +{ + "pagination": { + "previous_page": 1, + "current_page": 2 + } +} +``` + +**Removed fields:** + +- `next_page` +- `total_pages` +- `total_results` + +**Important:** To retrieve all results, continue incrementing the `page` parameter until the API returns an empty `data` array. This indicates you've reached the end of the results. + +### 8. Removed Parameters + +The following deprecated parameters have been removed: + +- `orderBy` - Results are now ordered by timestamp/block by default +- `orderDirection` - Always descending (newest first) + +### 9. Cached Queries + +Queries are now cached on the ClickHouse side for better performance. + +You can specifically request to not use the cache by setting the `Cache-Control` header to `no-cache`. + +#### Example + +**Cache** + +```console +$ curl -s 'https://token-api.thegraph.com/v1/...' | jq .statistics +{ + "bytes_read": 221, + "rows_read": 1, + "elapsed": 0.002212065 +} +``` + +**No cache** + +```console +$ curl -s 'http://localhost:8000/v1/...' --header 'Cache-Control: no-cache' | jq .statistics +{ + "bytes_read": 14621174348, + "rows_read": 223244390, + "elapsed": 0.971064066 +} +``` + +## 📚 Example Migrations + +### Example 1: Get Token Balances + +**Before:** + +```bash +GET /token/balances/evm/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045?network_id=mainnet&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 +``` + +**After:** + +```bash +GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 +``` + +### Example 2: Get NFT Items + +**Before:** + +```bash +GET /nft/items/evm/contract/0xbd3531da5cf5857e7cfaa92426877b022e612cf8/token_id/5712?network_id=mainnet +``` + +**After:** + +```bash +GET /v1/evm/nft/items?network=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&token_id=5712 +``` + +### Example 3: Get Token Transfers with Time Filter + +**Before:** + +```bash +GET /token/transfers/evm?network_id=mainnet&from=0xd8da6bf26964af9d7eed9e03e53415d37aa96045&startTime=1735689600&endTime=1767225600 +``` + +**After:** + +```bash +GET /v1/evm/transfers?network=mainnet&from_address=0xd8da6bf26964af9d7eed9e03e53415d37aa96045&start_time=1735689600&end_time=1767225600 +``` + +### Example 4: Get NFT Transfer Activities + +**Before:** + +```bash +GET /nft/activities/evm?network_id=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&anyAddress=0xd8da6bf26964af9d7eed9e03e53415d37aa96045 +``` + +**After:** + +```bash +GET /v1/evm/nft/transfers?network=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&address=0xd8da6bf26964af9d7eed9e03e53415d37aa96045 +``` + +### Example 5: Get Pool OHLC Data + +**Before:** + +```bash +GET /token/ohlc/pools/evm/0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640?network_id=mainnet&interval=1h&startTime=1735689600 +``` + +**After:** + +```bash +GET /v1/evm/pools/ohlc?network=mainnet&pool=0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640&interval=1h&start_time=1735689600 +``` + +### Example 6: Batched Query (New Feature) + +Query balances for multiple contracts in a single request: + +```bash +GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 +``` + +Query transfers from multiple addresses: + +```bash +GET /v1/evm/transfers?network=mainnet&from_address=0xabc...,0xdef...,0x123...&start_time=1735689600 +``` + +## ⚠️ Important Notes + +1. **Migration Notes:** The old endpoints were deprecated and removed on **October 30, 2025**. Please ensure all integrations have been migrated to the new Token API v1 endpoints. + +2. **Default Sorting:** All results are now sorted by timestamp (descending) by default. Custom sorting is no longer supported. + +3. **Pagination:** Continue paging through results by incrementing the `page` parameter until you receive an empty `data` array. The API no longer provides total counts due to performance optimizations with ClickHouse. + +4. **Time Defaults:** If you previously relied on fetching all historical data without time filters, note that `start_time` now defaults to `2025-01-01`. Adjust accordingly if you need earlier data. diff --git a/website/src/pages/tr/token-api/upgrade-to-v1.mdx b/website/src/pages/tr/token-api/upgrade-to-v1.mdx deleted file mode 100644 index fbe09101eaa5..000000000000 --- a/website/src/pages/tr/token-api/upgrade-to-v1.mdx +++ /dev/null @@ -1,254 +0,0 @@ ---- -title: Upgrade to v1 ---- - -This guide covers the migration from the legacy API structure to the new v1 API. The refactoring introduces versioned endpoints, standardized query parameters, improved batching support, and consistent naming conventions. - -**Note** - -- `EVM` = Ethereum Virtual Machine - -Used to describe endpoints supporting EVM-based chains (e.g. `base`, `bsc`, `mainnet`, ...). - -- `SVM` = Solana Virtual Machine - -Used to describe endpoints supporting Solana (currently the only SVM chain supported). - -## 🔑 Breaking Changes Summary - -### 1. **API Versioning** - -All endpoints now use the `/v1` prefix. - -**Before:** - -``` -GET /balances/evm -GET /nft/items/contract/:contract/token_id/:token_id -``` - -**After:** - -``` -GET /v1/evm/balances -GET /v1/evm/nft/items -``` - -### 2. **Route Structure Reorganization** - -#### 2.1 EVM Endpoints - -Consolidated under `/v1/evm/*` - -| Old Endpoint | New Endpoint | -| ------------------------------------------------------ | ----------------------------- | -| `/balances/evm` | `/v1/evm/balances` | -| `/historical/balances/evm` | `/v1/evm/balances/historical` | -| `/holders/evm/:contract` | `/v1/evm/holders` | -| `/tokens/evm/:contract` | `/v1/evm/tokens` | -| `/transfers/evm` | `/v1/evm/transfers` | -| `/pools/evm` | `/v1/evm/pools` | -| `/swaps/evm` | `/v1/evm/swaps` | -| `/dexes/evm` | `/v1/evm/dexes` | -| `/ohlc/prices/evm/:contract` | _(removed)_ | -| `/ohlc/pools/evm/:pool` | `/v1/evm/pools/ohlc` | -| `/nft/ownerships/evm/:address` | `/v1/evm/nft/ownerships` | -| `/nft/collections/evm/:contract` | `/v1/evm/nft/collections` | -| `/nft/items/evm/contract/:contract/token_id/:token_id` | `/v1/evm/nft/items` | -| `/nft/holders/evm/:contract` | `/v1/evm/nft/holders` | -| `/nft/activities/evm` | `/v1/evm/nft/transfers` | -| `/nft/sales/evm` | `/v1/evm/nft/sales` | - -**Important:** The NFT endpoint `/nft/activities` has been renamed to `/v1/evm/nft/transfers` to better reflect its purpose. - -**Important:** The EVM Token OHLCV Data endpoint `/ohlc/prices/evm/{contract}` has been removed. You can use `/v1/evm/pools` to find stablecoin pairs for your contract and `/v1/evm/pools/ohlc` for OHLCV data for that pair. - ---- - -#### 2.2 New EVM native balances endpoint - -Native balances for EVM chains can be found under `/v1/evm/balances/native`. They will not show up in the `/v1/evm/balances` endpoint. - -Other endpoints can still use native token under the `0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee` contract. - ---- - -#### 2.3 SVM Endpoints - -Consolidated under `/v1/svm/*` - -| Old Endpoint | New Endpoint | -| ------------------------ | ------------------------- | -| `/balances/svm` | `/v1/svm/balances` | -| `/balances/native/svm` | `/v1/svm/balances/native` | -| `/holders/svm/:contract` | `/v1/svm/holders` | -| `/tokens/svm/:mint` | `/v1/svm/tokens` | -| `/transfers/svm` | `/v1/svm/transfers` | -| `/pools/svm` | `/v1/svm/pools` | -| `/swaps/svm` | `/v1/svm/swaps` | -| `/dexes/svm` | `/v1/svm/dexes` | -| `/owner/svm/:account` | `/v1/svm/owner` | -| `/ohlc/pools/svm/:pool` | `/v1/svm/pools/ohlc` | - -## 📝 Parameter Changes - -### 3. **Path Parameters → Query Parameters** - -All path parameters have been moved to query parameters. - -**Before:** - -```bash -GET /balances/evm/:address -GET /holders/evm/:contract -GET /nft/items/evm/contract/:contract/token_id/:token_id -``` - -**After:** - -```bash -GET /v1/evm/balances?network=mainnet&address=0x... -GET /v1/evm/holders?network=mainnet&contract=0x... -GET /v1/evm/nft/items?network=mainnet&contract=0x...&token_id=5712 -``` - -### 4. **Standardized Parameter Naming** - -All query parameters have been standardized to use snake_case naming convention. - -| Old Parameter | New Parameter | Notes | -| --- | --- | --- | -| `network_id` | `network` | Renamed, `matic` has also been renamed to `polygon` | -| `anyAddress` | `address` | Matches either `from` or `to` address | -| `from`, `fromAddress`, `offererAddress` | `from_address`, `offerer` | - | -| `to`, `toAddress`, `recipientAddress` | `to_address`, `recipient` | - | -| `startTime` | `start_time` | Default: `1735689600` (`2025-01-01`) | -| `endTime` | `end_time` | Default: `9999999999` | -| - | `start_block` | New parameter, default: `0` | -| - | `end_block` | New parameter, default: `9999999999` | -| - | `include_null_balances` | New parameter, default: `false` | -| `tx_hash` | `transaction_id` | - | -| `token` | `input_token`, `output_token` | More explicit for pool queries | -| `pool` | `amm_pool` | - | -| `orderBy`, `orderDirection` | _(removed)_ | Always sorted by most recent timestamp first | - -**Important:** The `network_id` parameter has been renamed to `network`. - -**Important:** `matic` network has been renamed to `polygon`. - -### 5. **Batched Parameters** - -Many parameters now support batching - accepting single values or comma-separated strings. - -**Supported Batched Parameters:** - -- `address`, `from_address`, `to_address` -- `contract`, `token_id` -- `factory`, `pool` -- `owner`, `token_account`, `mint` -- `transaction_id`, `signature` - -**Examples:** - -```console -# Single value -?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 - -# Comma-separated, single parameter -?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 - -# Repeated parameter values -?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&contract=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 -``` - -### 6. **New Parameters** - -#### `include_null_balances` - -Added to balance endpoints to optionally include zero/null balances. - -```bash -?include_null_balances=true -``` - -**Default:** `false` - -## 🔄 Response Changes - -### 7. **Pagination Changes** - -Pagination responses have been simplified. The API no longer computes total result counts due to performance and accuracy considerations when working with ClickHouse views and materialized tables. - -**Before:** - -```json -{ - "pagination": { - "previous_page": 1, - "current_page": 2, - "next_page": 3, - "total_pages": 10 - }, - "total_results": 1234 -} -``` - -**After:** - -```json -{ - "pagination": { - "previous_page": 1, - "current_page": 2 - } -} -``` - -**Removed fields:** - -- `next_page` -- `total_pages` -- `total_results` - -**Important:** To retrieve all results, continue incrementing the `page` parameter until the API returns an empty `data` array. This indicates you've reached the end of the results. - -### 8. **Removed Parameters** - -The following deprecated parameters have been removed: - -- `orderBy` - Results are now ordered by timestamp/block by default -- `orderDirection` - Always descending (newest first) - -## 📚 Example Migrations - -### Old vs New: Get Token Balances - -**Before:** - -```bash -GET /balances/evm/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045?network_id=mainnet&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 -``` - -**After:** - -```bash -GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 -``` - -### New Feature: Batched Queries - -Query balances for multiple contracts in a single request: - -```bash -GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 -``` - -## ⚠️ Important Notes - -1. **Backward Compatibility:** The old endpoints are deprecated and will be removed in the future. Migrate by **Oct 30, 2025**. - -2. **Default Sorting:** All results are now sorted by timestamp (descending) by default. Custom sorting is no longer supported. - -3. **Pagination:** Continue paging through results by incrementing the `page` parameter until you receive an empty `data` array. The API no longer provides total counts due to performance optimizations with ClickHouse. - -4. **Time Defaults:** If you previously relied on fetching all historical data without time filters, note that `start_time` now defaults to `2025-01-01`. Adjust accordingly if you need earlier data. diff --git a/website/src/pages/uk/index.json b/website/src/pages/uk/index.json index c5adce6b66b2..cfcd6e75ac1d 100644 --- a/website/src/pages/uk/index.json +++ b/website/src/pages/uk/index.json @@ -2,7 +2,7 @@ "title": "Home", "hero": { "title": "The Graph Docs", - "description": "The Graph is a blockchain data solution that powers applications, analytics, and AI on 90+ chains. The Graph's core products include the Token API for web3 apps, Subgraphs for indexing smart contracts, and Substreams for real-time and historical data streaming.", + "description": "The Graph is a blockchain data solution that powers applications, analytics, and AI on 80+ chains. The Graph's core products include the Token API for web3 apps, Subgraphs for indexing smart contracts, and Substreams for real-time and historical data streaming.", "cta1": "How The Graph works", "cta2": "Build your first subgraph" }, diff --git a/website/src/pages/uk/subgraphs/guides/_meta.js b/website/src/pages/uk/subgraphs/guides/_meta.js index fd5608dcceb2..1c081848ea08 100644 --- a/website/src/pages/uk/subgraphs/guides/_meta.js +++ b/website/src/pages/uk/subgraphs/guides/_meta.js @@ -2,7 +2,6 @@ export default { 'subgraph-composition': '', 'subgraph-debug-forking': '', near: '', - grafting: '', 'subgraph-uncrashable': '', 'transfer-to-the-graph': '', diff --git a/website/src/pages/uk/token-api/_meta.js b/website/src/pages/uk/token-api/_meta.js index a8624da52e7f..9588f70cec53 100644 --- a/website/src/pages/uk/token-api/_meta.js +++ b/website/src/pages/uk/token-api/_meta.js @@ -11,6 +11,6 @@ export default { 'tvm-dexs': titles['tvm-dexs'] ?? '', monitoring: titles['monitoring'] ?? '', 'endpoint-pricing': '', + guides: titles['guides'] ?? '', faq: '', - 'upgrade-to-v1': '', } diff --git a/website/src/pages/uk/token-api/guides/_meta-titles.json b/website/src/pages/uk/token-api/guides/_meta-titles.json new file mode 100644 index 000000000000..cd93dcc0fc0b --- /dev/null +++ b/website/src/pages/uk/token-api/guides/_meta-titles.json @@ -0,0 +1,4 @@ +{ + "gpt": "Create Custom GPTS", + "upgrade-to-v1": "" +} diff --git a/website/src/pages/uk/token-api/guides/_meta.js b/website/src/pages/uk/token-api/guides/_meta.js new file mode 100644 index 000000000000..e5aaaadd78f2 --- /dev/null +++ b/website/src/pages/uk/token-api/guides/_meta.js @@ -0,0 +1,4 @@ +export default { + gpt: '', + 'upgrade-to-v1': '', +} diff --git a/website/src/pages/uk/token-api/guides/gpt.mdx b/website/src/pages/uk/token-api/guides/gpt.mdx new file mode 100644 index 000000000000..564d013dea20 --- /dev/null +++ b/website/src/pages/uk/token-api/guides/gpt.mdx @@ -0,0 +1,121 @@ +--- +title: How the Token API Powers Custom GPTs +sidebarTitle: Create Custom GPTs +--- + +## Overview + +The Token API is a pre-indexed blockchain data service that provides real-time access to token balances, metadata, prices, liquidity, and volume across multiple chains. Developers use its REST endpoints to build wallets, trading dashboards, DeFi analytics, and AI systems without maintaining their own indexing stack. Custom GPTs can connect directly to the Token API's OpenAPI schema. + +The Token API enables developers to build **Custom GPTs** to reason over live blockchain data inside ChatGPT that can reason over and respond with live blockchain data directly inside ChatGPT. + +## What the Token API Enables in Custom GPTs + +When a Custom GPT is wired to the Token API, it gains access to a machine-readable schema and authenticated endpoints. Developers can use this to: + +- **Query real-time onchain data**: Balances, token prices, liquidity, and transaction history. +- **Automate domain-specific tasks**: Portfolio tracking, accounting, reconciliation, and market analysis. +- **Power AI agents with verifiable blockchain context**: Use the same data sources dapps rely on. + +Because the Token API provides a machine-readable schema and authenticated requests, it serves as a structured data layer that enables GPT-5 agents to combine natural language reasoning with live onchain data from The Graph. + +## When to Use the Token API for Custom GPTs + +Use the Token API when your GPT needs repeatable, domain-specific behavior grounded in blockchain data. This is most effective when the GPT performs the same type of task frequently or enforces a workflow you define. For one-off or exploratory questions, standard ChatGPT prompts are sufficient. + +## Choosing a Use Case + +Start with a clear, narrow objective, then expand as needed. Common patterns include: + +- **Accounting GPT**: Onchain accounting, tax tagging, and portfolio reconciliation. +- **Trading GPT**: Liquidity, pricing, and volume analysis for trading strategies. +- **Protocol Tracking GPT**: Real-time monitoring of transaction activity and liquidity pools. + +A focused initial goal such as “Retrieve token balances and prices for a wallet” makes it easier to configure reliable behavior before adding complex workflows. + +## Requirements + +| Requirement | Description | +| ---------------------- | -------------------------------------------------------- | +| ChatGPT 5 | Custom GPT creation requires GPT-5 tier or Pro. | +| Token API Subscription | Sign up at [The Graph Market](https://thegraph.market./) | +| Token API Key | Available in your dashboard as the Authentication JWT. | + +## Setting Up a Custom GPT + +Below is an explanatory outline of what happens during setup. This section provides conceptual understanding. + +### Create Custom GPT + +1. Visit chat.openai.com/gpts in your browser. 2, Click Create (top right). +2. Under Configure (in the top left panel), set up your GPT's personality and scope. + +### Configure Your GPT + +You define the GPT's role, scope, and metadata so it knows what it is designed to do. This includes: + +- **Name and Description**: Helps users discover your GPT. + - For example: **Name**: Token Tracker GPT **Description**: An onchain analytics assistant that retrieves live token balances, prices, and liquidity data using The Graph's Token API. +- **Instructions**: Tells the GPT what tasks it should perform using the Token API. + - For example: You are a blockchain data assistant retrieving onchain token data from The Graph's Token API. Use endpoints to fetch balances, liquidity, and price history across EVM chains. Present results in tables with token symbols, prices, and USD values. +- **Knowledge**: Optional context files such as wallet references, accounting rules, or code snippets. +- **New Action**: At the bottom, click “Create new action” to connect your GPT to the Token API. + +### Connect the Token API + +To enable live blockchain queries inside ChatGPT, you connect the GPT to the Token API through: + +#### Authentication + +1. Set Authentication to API Key → Bearer. +2. Open [The Graph Market](https://thegraph.market./) and copy your Authentication JWT from your dashboard. +3. Paste the token into the ChatGPT prompt where the field shows [HIDDEN]. + +#### Schema + +1. Above the Schema box, click Import from URL. +2. Paste: https://token-api.thegraph.com/openapi +3. Click Import. You'll now see endpoints like: + - `getV1EvmTokens` + - `getV1EvmDexes` + - `getV1EvmBalances` +4. Click Test on one (for example `getV1EvmDexes`) to verify connection. + +##### Privacy + +1. At the bottom, under Privacy, paste: https://pinax.network/en/legal/privacy + +### Privacy + +You can attach a privacy policy URL such as: https://pinax.network/en/legal/privacy + +## Example Prompt Patterns + +These examples help illustrate how a GPT reasons over Token API data. + +### Wallet and Portfolio + +Get the total USD balance for a wallet across multiple chains, returning token name, symbol, balance, and price. + +### Trading Analysis + +Compare USDC and DAI liquidity across Uniswap and Curve. Return the top 5 pools by TVL. + +### Accounting + +List all ERC-20 transfers for this address in the last 30 days. Group by token and total incoming/outgoing volume. + +## Best Practices + +| Tip | Why It Matters | +| --------------------------------- | ---------------------------------------------------------------------- | +| Scope your GPT narrowly first | Simplifies debugging and validates schema integration. | +| Use clear role instructions | Helps the GPT choose the right endpoints and avoid assumptions. | +| Name endpoints explicitly | Improves routing accuracy when fetching balances, prices, or DEX data. | +| Combine with code | Enables custom parsing or logic for complex workflows. | +| Add Subgraph or Substream context | Provides richer analytics when combined with Token API data. | + +## FAQs & Resources + +- Builders Office Hours (October 23, 2025) +- Watch the full session: https://x.com/i/broadcasts/1mrGmBzBarNJy diff --git a/website/src/pages/uk/token-api/guides/upgrade-to-v1.mdx b/website/src/pages/uk/token-api/guides/upgrade-to-v1.mdx new file mode 100644 index 000000000000..e2a7ccf973fa --- /dev/null +++ b/website/src/pages/uk/token-api/guides/upgrade-to-v1.mdx @@ -0,0 +1,346 @@ +--- +title: Upgrade to v1 +--- + +This guide covers the migration from the legacy API structure to the new v1 API. The refactoring introduces versioned endpoints, standardized query parameters, improved batching support, and consistent naming conventions. + +**Note** + +- `EVM` = Ethereum Virtual Machine + +Used to describe endpoints supporting EVM-based chains (e.g. `base`, `bsc`, `mainnet`, ...). + +- `SVM` = Solana Virtual Machine + +Used to describe endpoints supporting Solana (currently the only SVM chain supported). + +## 🔑 Breaking Changes Summary + +### 1. API Versioning + +All endpoints now use the `/v1` prefix. + +**Before:** + +``` +GET /balances/evm +GET /nft/items/contract/:contract/token_id/:token_id +``` + +**After:** + +``` +GET /v1/evm/balances +GET /v1/evm/nft/items +``` + +### 2. Route Structure Reorganization + +#### 2.1 EVM Endpoints + +Consolidated under `/v1/evm/*` + +| Old Endpoint | New Endpoint | +| ------------------------------------------------------ | ----------------------------- | +| `/balances/evm` | `/v1/evm/balances` | +| `/historical/balances/evm` | `/v1/evm/balances/historical` | +| `/holders/evm/:contract` | `/v1/evm/holders` | +| `/tokens/evm/:contract` | `/v1/evm/tokens` | +| `/transfers/evm` | `/v1/evm/transfers` | +| `/pools/evm` | `/v1/evm/pools` | +| `/swaps/evm` | `/v1/evm/swaps` | +| `/dexes/evm` | `/v1/evm/dexes` | +| `/ohlc/prices/evm/:contract` | _(removed)_ | +| `/ohlc/pools/evm/:pool` | `/v1/evm/pools/ohlc` | +| `/nft/ownerships/evm/:address` | `/v1/evm/nft/ownerships` | +| `/nft/collections/evm/:contract` | `/v1/evm/nft/collections` | +| `/nft/items/evm/contract/:contract/token_id/:token_id` | `/v1/evm/nft/items` | +| `/nft/holders/evm/:contract` | `/v1/evm/nft/holders` | +| `/nft/activities/evm` | `/v1/evm/nft/transfers` | +| `/nft/sales/evm` | `/v1/evm/nft/sales` | + +**Important:** The NFT endpoint `/nft/activities` has been renamed to `/v1/evm/nft/transfers` to better reflect its purpose. + +**Important:** The EVM Token OHLCV Data endpoint `/ohlc/prices/evm/{contract}` has been removed. You can use `/v1/evm/pools` to find stablecoin pairs for your contract and `/v1/evm/pools/ohlc` for OHLCV data for that pair. + +--- + +#### 2.2 New EVM native balances endpoint + +Native balances for EVM chains can be found under `/v1/evm/balances/native`. They will not show up in the `/v1/evm/balances` endpoint. + +Other endpoints can still use native token under the `0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee` contract. + +--- + +#### 2.3 SVM Endpoints + +Consolidated under `/v1/svm/*` + +| Old Endpoint | New Endpoint | +| ------------------------ | ------------------------- | +| `/balances/svm` | `/v1/svm/balances` | +| `/balances/native/svm` | `/v1/svm/balances/native` | +| `/holders/svm/:contract` | `/v1/svm/holders` | +| `/tokens/svm/:mint` | `/v1/svm/tokens` | +| `/transfers/svm` | `/v1/svm/transfers` | +| `/pools/svm` | `/v1/svm/pools` | +| `/swaps/svm` | `/v1/svm/swaps` | +| `/dexes/svm` | `/v1/svm/dexes` | +| `/owner/svm/:account` | `/v1/svm/owner` | +| `/ohlc/pools/svm/:pool` | `/v1/svm/pools/ohlc` | + +## 📝 Parameter Changes + +### 3. Path Parameters → Query Parameters + +All path parameters have been moved to query parameters. + +**Before:** + +```bash +GET /balances/evm/:address +GET /holders/evm/:contract +GET /nft/items/evm/contract/:contract/token_id/:token_id +``` + +**After:** + +```bash +GET /v1/evm/balances?network=mainnet&address=0x... +GET /v1/evm/holders?network=mainnet&contract=0x... +GET /v1/evm/nft/items?network=mainnet&contract=0x...&token_id=5712 +``` + +### 4. Standardized Parameter Naming + +All query parameters have been standardized to use snake_case naming convention. + +| Old Parameter | New Parameter | Notes | +| --- | --- | --- | +| `network_id` | `network` | Renamed, `matic` has also been renamed to `polygon` | +| `anyAddress` | `address` | Matches either `from` or `to` address | +| `from`, `fromAddress`, `offererAddress` | `from_address`, `offerer` | - | +| `to`, `toAddress`, `recipientAddress` | `to_address`, `recipient` | - | +| `startTime` | `start_time` | Default: `1735689600` (`2025-01-01`) | +| `endTime` | `end_time` | Default: `9999999999` | +| - | `start_block` | New parameter, default: `0` | +| - | `end_block` | New parameter, default: `9999999999` | +| - | `include_null_balances` | New parameter, default: `false` | +| `tx_hash` | `transaction_id` | - | +| `token` | `input_token`, `output_token` | More explicit for pool queries | +| `pool` | `amm_pool` | - | +| `orderBy`, `orderDirection` | _(removed)_ | Always sorted by most recent timestamp first | + +**Important:** The `network_id` parameter has been renamed to `network`. + +**Important:** `matic` network has been renamed to `polygon`. + +### 5. Batched Parameters + +Many parameters now support batching - accepting single values or comma-separated strings. + +**Supported Batched Parameters:** + +- `address`, `from_address`, `to_address` +- `contract`, `token_id` +- `factory`, `pool` +- `owner`, `token_account`, `mint` +- `transaction_id`, `signature` + +**Examples:** + +```console +## Single value +?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 + +## Comma-separated, single parameter +?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 + +## Repeated parameter values +?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&contract=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 +``` + +### 6. New Parameters + +#### `include_null_balances` + +Added to balance endpoints to optionally include zero/null balances. + +```bash +?include_null_balances=true +``` + +**Default:** `false` + +## 🔄 Response Changes + +### 7. Pagination Changes + +Pagination responses have been simplified. The API no longer computes total result counts due to performance and accuracy considerations when working with ClickHouse views and materialized tables. + +**Before:** + +```json +{ + "pagination": { + "previous_page": 1, + "current_page": 2, + "next_page": 3, + "total_pages": 10 + }, + "total_results": 1234 +} +``` + +**After:** + +```json +{ + "pagination": { + "previous_page": 1, + "current_page": 2 + } +} +``` + +**Removed fields:** + +- `next_page` +- `total_pages` +- `total_results` + +**Important:** To retrieve all results, continue incrementing the `page` parameter until the API returns an empty `data` array. This indicates you've reached the end of the results. + +### 8. Removed Parameters + +The following deprecated parameters have been removed: + +- `orderBy` - Results are now ordered by timestamp/block by default +- `orderDirection` - Always descending (newest first) + +### 9. Cached Queries + +Queries are now cached on the ClickHouse side for better performance. + +You can specifically request to not use the cache by setting the `Cache-Control` header to `no-cache`. + +#### Example + +**Cache** + +```console +$ curl -s 'https://token-api.thegraph.com/v1/...' | jq .statistics +{ + "bytes_read": 221, + "rows_read": 1, + "elapsed": 0.002212065 +} +``` + +**No cache** + +```console +$ curl -s 'http://localhost:8000/v1/...' --header 'Cache-Control: no-cache' | jq .statistics +{ + "bytes_read": 14621174348, + "rows_read": 223244390, + "elapsed": 0.971064066 +} +``` + +## 📚 Example Migrations + +### Example 1: Get Token Balances + +**Before:** + +```bash +GET /token/balances/evm/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045?network_id=mainnet&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 +``` + +**After:** + +```bash +GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 +``` + +### Example 2: Get NFT Items + +**Before:** + +```bash +GET /nft/items/evm/contract/0xbd3531da5cf5857e7cfaa92426877b022e612cf8/token_id/5712?network_id=mainnet +``` + +**After:** + +```bash +GET /v1/evm/nft/items?network=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&token_id=5712 +``` + +### Example 3: Get Token Transfers with Time Filter + +**Before:** + +```bash +GET /token/transfers/evm?network_id=mainnet&from=0xd8da6bf26964af9d7eed9e03e53415d37aa96045&startTime=1735689600&endTime=1767225600 +``` + +**After:** + +```bash +GET /v1/evm/transfers?network=mainnet&from_address=0xd8da6bf26964af9d7eed9e03e53415d37aa96045&start_time=1735689600&end_time=1767225600 +``` + +### Example 4: Get NFT Transfer Activities + +**Before:** + +```bash +GET /nft/activities/evm?network_id=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&anyAddress=0xd8da6bf26964af9d7eed9e03e53415d37aa96045 +``` + +**After:** + +```bash +GET /v1/evm/nft/transfers?network=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&address=0xd8da6bf26964af9d7eed9e03e53415d37aa96045 +``` + +### Example 5: Get Pool OHLC Data + +**Before:** + +```bash +GET /token/ohlc/pools/evm/0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640?network_id=mainnet&interval=1h&startTime=1735689600 +``` + +**After:** + +```bash +GET /v1/evm/pools/ohlc?network=mainnet&pool=0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640&interval=1h&start_time=1735689600 +``` + +### Example 6: Batched Query (New Feature) + +Query balances for multiple contracts in a single request: + +```bash +GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 +``` + +Query transfers from multiple addresses: + +```bash +GET /v1/evm/transfers?network=mainnet&from_address=0xabc...,0xdef...,0x123...&start_time=1735689600 +``` + +## ⚠️ Important Notes + +1. **Migration Notes:** The old endpoints were deprecated and removed on **October 30, 2025**. Please ensure all integrations have been migrated to the new Token API v1 endpoints. + +2. **Default Sorting:** All results are now sorted by timestamp (descending) by default. Custom sorting is no longer supported. + +3. **Pagination:** Continue paging through results by incrementing the `page` parameter until you receive an empty `data` array. The API no longer provides total counts due to performance optimizations with ClickHouse. + +4. **Time Defaults:** If you previously relied on fetching all historical data without time filters, note that `start_time` now defaults to `2025-01-01`. Adjust accordingly if you need earlier data. diff --git a/website/src/pages/uk/token-api/upgrade-to-v1.mdx b/website/src/pages/uk/token-api/upgrade-to-v1.mdx deleted file mode 100644 index fbe09101eaa5..000000000000 --- a/website/src/pages/uk/token-api/upgrade-to-v1.mdx +++ /dev/null @@ -1,254 +0,0 @@ ---- -title: Upgrade to v1 ---- - -This guide covers the migration from the legacy API structure to the new v1 API. The refactoring introduces versioned endpoints, standardized query parameters, improved batching support, and consistent naming conventions. - -**Note** - -- `EVM` = Ethereum Virtual Machine - -Used to describe endpoints supporting EVM-based chains (e.g. `base`, `bsc`, `mainnet`, ...). - -- `SVM` = Solana Virtual Machine - -Used to describe endpoints supporting Solana (currently the only SVM chain supported). - -## 🔑 Breaking Changes Summary - -### 1. **API Versioning** - -All endpoints now use the `/v1` prefix. - -**Before:** - -``` -GET /balances/evm -GET /nft/items/contract/:contract/token_id/:token_id -``` - -**After:** - -``` -GET /v1/evm/balances -GET /v1/evm/nft/items -``` - -### 2. **Route Structure Reorganization** - -#### 2.1 EVM Endpoints - -Consolidated under `/v1/evm/*` - -| Old Endpoint | New Endpoint | -| ------------------------------------------------------ | ----------------------------- | -| `/balances/evm` | `/v1/evm/balances` | -| `/historical/balances/evm` | `/v1/evm/balances/historical` | -| `/holders/evm/:contract` | `/v1/evm/holders` | -| `/tokens/evm/:contract` | `/v1/evm/tokens` | -| `/transfers/evm` | `/v1/evm/transfers` | -| `/pools/evm` | `/v1/evm/pools` | -| `/swaps/evm` | `/v1/evm/swaps` | -| `/dexes/evm` | `/v1/evm/dexes` | -| `/ohlc/prices/evm/:contract` | _(removed)_ | -| `/ohlc/pools/evm/:pool` | `/v1/evm/pools/ohlc` | -| `/nft/ownerships/evm/:address` | `/v1/evm/nft/ownerships` | -| `/nft/collections/evm/:contract` | `/v1/evm/nft/collections` | -| `/nft/items/evm/contract/:contract/token_id/:token_id` | `/v1/evm/nft/items` | -| `/nft/holders/evm/:contract` | `/v1/evm/nft/holders` | -| `/nft/activities/evm` | `/v1/evm/nft/transfers` | -| `/nft/sales/evm` | `/v1/evm/nft/sales` | - -**Important:** The NFT endpoint `/nft/activities` has been renamed to `/v1/evm/nft/transfers` to better reflect its purpose. - -**Important:** The EVM Token OHLCV Data endpoint `/ohlc/prices/evm/{contract}` has been removed. You can use `/v1/evm/pools` to find stablecoin pairs for your contract and `/v1/evm/pools/ohlc` for OHLCV data for that pair. - ---- - -#### 2.2 New EVM native balances endpoint - -Native balances for EVM chains can be found under `/v1/evm/balances/native`. They will not show up in the `/v1/evm/balances` endpoint. - -Other endpoints can still use native token under the `0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee` contract. - ---- - -#### 2.3 SVM Endpoints - -Consolidated under `/v1/svm/*` - -| Old Endpoint | New Endpoint | -| ------------------------ | ------------------------- | -| `/balances/svm` | `/v1/svm/balances` | -| `/balances/native/svm` | `/v1/svm/balances/native` | -| `/holders/svm/:contract` | `/v1/svm/holders` | -| `/tokens/svm/:mint` | `/v1/svm/tokens` | -| `/transfers/svm` | `/v1/svm/transfers` | -| `/pools/svm` | `/v1/svm/pools` | -| `/swaps/svm` | `/v1/svm/swaps` | -| `/dexes/svm` | `/v1/svm/dexes` | -| `/owner/svm/:account` | `/v1/svm/owner` | -| `/ohlc/pools/svm/:pool` | `/v1/svm/pools/ohlc` | - -## 📝 Parameter Changes - -### 3. **Path Parameters → Query Parameters** - -All path parameters have been moved to query parameters. - -**Before:** - -```bash -GET /balances/evm/:address -GET /holders/evm/:contract -GET /nft/items/evm/contract/:contract/token_id/:token_id -``` - -**After:** - -```bash -GET /v1/evm/balances?network=mainnet&address=0x... -GET /v1/evm/holders?network=mainnet&contract=0x... -GET /v1/evm/nft/items?network=mainnet&contract=0x...&token_id=5712 -``` - -### 4. **Standardized Parameter Naming** - -All query parameters have been standardized to use snake_case naming convention. - -| Old Parameter | New Parameter | Notes | -| --- | --- | --- | -| `network_id` | `network` | Renamed, `matic` has also been renamed to `polygon` | -| `anyAddress` | `address` | Matches either `from` or `to` address | -| `from`, `fromAddress`, `offererAddress` | `from_address`, `offerer` | - | -| `to`, `toAddress`, `recipientAddress` | `to_address`, `recipient` | - | -| `startTime` | `start_time` | Default: `1735689600` (`2025-01-01`) | -| `endTime` | `end_time` | Default: `9999999999` | -| - | `start_block` | New parameter, default: `0` | -| - | `end_block` | New parameter, default: `9999999999` | -| - | `include_null_balances` | New parameter, default: `false` | -| `tx_hash` | `transaction_id` | - | -| `token` | `input_token`, `output_token` | More explicit for pool queries | -| `pool` | `amm_pool` | - | -| `orderBy`, `orderDirection` | _(removed)_ | Always sorted by most recent timestamp first | - -**Important:** The `network_id` parameter has been renamed to `network`. - -**Important:** `matic` network has been renamed to `polygon`. - -### 5. **Batched Parameters** - -Many parameters now support batching - accepting single values or comma-separated strings. - -**Supported Batched Parameters:** - -- `address`, `from_address`, `to_address` -- `contract`, `token_id` -- `factory`, `pool` -- `owner`, `token_account`, `mint` -- `transaction_id`, `signature` - -**Examples:** - -```console -# Single value -?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 - -# Comma-separated, single parameter -?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 - -# Repeated parameter values -?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&contract=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 -``` - -### 6. **New Parameters** - -#### `include_null_balances` - -Added to balance endpoints to optionally include zero/null balances. - -```bash -?include_null_balances=true -``` - -**Default:** `false` - -## 🔄 Response Changes - -### 7. **Pagination Changes** - -Pagination responses have been simplified. The API no longer computes total result counts due to performance and accuracy considerations when working with ClickHouse views and materialized tables. - -**Before:** - -```json -{ - "pagination": { - "previous_page": 1, - "current_page": 2, - "next_page": 3, - "total_pages": 10 - }, - "total_results": 1234 -} -``` - -**After:** - -```json -{ - "pagination": { - "previous_page": 1, - "current_page": 2 - } -} -``` - -**Removed fields:** - -- `next_page` -- `total_pages` -- `total_results` - -**Important:** To retrieve all results, continue incrementing the `page` parameter until the API returns an empty `data` array. This indicates you've reached the end of the results. - -### 8. **Removed Parameters** - -The following deprecated parameters have been removed: - -- `orderBy` - Results are now ordered by timestamp/block by default -- `orderDirection` - Always descending (newest first) - -## 📚 Example Migrations - -### Old vs New: Get Token Balances - -**Before:** - -```bash -GET /balances/evm/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045?network_id=mainnet&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 -``` - -**After:** - -```bash -GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 -``` - -### New Feature: Batched Queries - -Query balances for multiple contracts in a single request: - -```bash -GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 -``` - -## ⚠️ Important Notes - -1. **Backward Compatibility:** The old endpoints are deprecated and will be removed in the future. Migrate by **Oct 30, 2025**. - -2. **Default Sorting:** All results are now sorted by timestamp (descending) by default. Custom sorting is no longer supported. - -3. **Pagination:** Continue paging through results by incrementing the `page` parameter until you receive an empty `data` array. The API no longer provides total counts due to performance optimizations with ClickHouse. - -4. **Time Defaults:** If you previously relied on fetching all historical data without time filters, note that `start_time` now defaults to `2025-01-01`. Adjust accordingly if you need earlier data. diff --git a/website/src/pages/ur/index.json b/website/src/pages/ur/index.json index 4d97eec9b52d..cd886bb5f4f0 100644 --- a/website/src/pages/ur/index.json +++ b/website/src/pages/ur/index.json @@ -2,7 +2,7 @@ "title": "Home", "hero": { "title": "The Graph Docs", - "description": "The Graph is a blockchain data solution that powers applications, analytics, and AI on 90+ chains. The Graph's core products include the Token API for web3 apps, Subgraphs for indexing smart contracts, and Substreams for real-time and historical data streaming.", + "description": "The Graph is a blockchain data solution that powers applications, analytics, and AI on 80+ chains. The Graph's core products include the Token API for web3 apps, Subgraphs for indexing smart contracts, and Substreams for real-time and historical data streaming.", "cta1": "How The Graph works", "cta2": "Build your first subgraph" }, diff --git a/website/src/pages/ur/subgraphs/guides/_meta.js b/website/src/pages/ur/subgraphs/guides/_meta.js index fd5608dcceb2..1c081848ea08 100644 --- a/website/src/pages/ur/subgraphs/guides/_meta.js +++ b/website/src/pages/ur/subgraphs/guides/_meta.js @@ -2,7 +2,6 @@ export default { 'subgraph-composition': '', 'subgraph-debug-forking': '', near: '', - grafting: '', 'subgraph-uncrashable': '', 'transfer-to-the-graph': '', diff --git a/website/src/pages/ur/token-api/_meta.js b/website/src/pages/ur/token-api/_meta.js index a8624da52e7f..9588f70cec53 100644 --- a/website/src/pages/ur/token-api/_meta.js +++ b/website/src/pages/ur/token-api/_meta.js @@ -11,6 +11,6 @@ export default { 'tvm-dexs': titles['tvm-dexs'] ?? '', monitoring: titles['monitoring'] ?? '', 'endpoint-pricing': '', + guides: titles['guides'] ?? '', faq: '', - 'upgrade-to-v1': '', } diff --git a/website/src/pages/ur/token-api/guides/_meta-titles.json b/website/src/pages/ur/token-api/guides/_meta-titles.json new file mode 100644 index 000000000000..cd93dcc0fc0b --- /dev/null +++ b/website/src/pages/ur/token-api/guides/_meta-titles.json @@ -0,0 +1,4 @@ +{ + "gpt": "Create Custom GPTS", + "upgrade-to-v1": "" +} diff --git a/website/src/pages/ur/token-api/guides/_meta.js b/website/src/pages/ur/token-api/guides/_meta.js new file mode 100644 index 000000000000..e5aaaadd78f2 --- /dev/null +++ b/website/src/pages/ur/token-api/guides/_meta.js @@ -0,0 +1,4 @@ +export default { + gpt: '', + 'upgrade-to-v1': '', +} diff --git a/website/src/pages/ur/token-api/guides/gpt.mdx b/website/src/pages/ur/token-api/guides/gpt.mdx new file mode 100644 index 000000000000..564d013dea20 --- /dev/null +++ b/website/src/pages/ur/token-api/guides/gpt.mdx @@ -0,0 +1,121 @@ +--- +title: How the Token API Powers Custom GPTs +sidebarTitle: Create Custom GPTs +--- + +## Overview + +The Token API is a pre-indexed blockchain data service that provides real-time access to token balances, metadata, prices, liquidity, and volume across multiple chains. Developers use its REST endpoints to build wallets, trading dashboards, DeFi analytics, and AI systems without maintaining their own indexing stack. Custom GPTs can connect directly to the Token API's OpenAPI schema. + +The Token API enables developers to build **Custom GPTs** to reason over live blockchain data inside ChatGPT that can reason over and respond with live blockchain data directly inside ChatGPT. + +## What the Token API Enables in Custom GPTs + +When a Custom GPT is wired to the Token API, it gains access to a machine-readable schema and authenticated endpoints. Developers can use this to: + +- **Query real-time onchain data**: Balances, token prices, liquidity, and transaction history. +- **Automate domain-specific tasks**: Portfolio tracking, accounting, reconciliation, and market analysis. +- **Power AI agents with verifiable blockchain context**: Use the same data sources dapps rely on. + +Because the Token API provides a machine-readable schema and authenticated requests, it serves as a structured data layer that enables GPT-5 agents to combine natural language reasoning with live onchain data from The Graph. + +## When to Use the Token API for Custom GPTs + +Use the Token API when your GPT needs repeatable, domain-specific behavior grounded in blockchain data. This is most effective when the GPT performs the same type of task frequently or enforces a workflow you define. For one-off or exploratory questions, standard ChatGPT prompts are sufficient. + +## Choosing a Use Case + +Start with a clear, narrow objective, then expand as needed. Common patterns include: + +- **Accounting GPT**: Onchain accounting, tax tagging, and portfolio reconciliation. +- **Trading GPT**: Liquidity, pricing, and volume analysis for trading strategies. +- **Protocol Tracking GPT**: Real-time monitoring of transaction activity and liquidity pools. + +A focused initial goal such as “Retrieve token balances and prices for a wallet” makes it easier to configure reliable behavior before adding complex workflows. + +## Requirements + +| Requirement | Description | +| ---------------------- | -------------------------------------------------------- | +| ChatGPT 5 | Custom GPT creation requires GPT-5 tier or Pro. | +| Token API Subscription | Sign up at [The Graph Market](https://thegraph.market./) | +| Token API Key | Available in your dashboard as the Authentication JWT. | + +## Setting Up a Custom GPT + +Below is an explanatory outline of what happens during setup. This section provides conceptual understanding. + +### Create Custom GPT + +1. Visit chat.openai.com/gpts in your browser. 2, Click Create (top right). +2. Under Configure (in the top left panel), set up your GPT's personality and scope. + +### Configure Your GPT + +You define the GPT's role, scope, and metadata so it knows what it is designed to do. This includes: + +- **Name and Description**: Helps users discover your GPT. + - For example: **Name**: Token Tracker GPT **Description**: An onchain analytics assistant that retrieves live token balances, prices, and liquidity data using The Graph's Token API. +- **Instructions**: Tells the GPT what tasks it should perform using the Token API. + - For example: You are a blockchain data assistant retrieving onchain token data from The Graph's Token API. Use endpoints to fetch balances, liquidity, and price history across EVM chains. Present results in tables with token symbols, prices, and USD values. +- **Knowledge**: Optional context files such as wallet references, accounting rules, or code snippets. +- **New Action**: At the bottom, click “Create new action” to connect your GPT to the Token API. + +### Connect the Token API + +To enable live blockchain queries inside ChatGPT, you connect the GPT to the Token API through: + +#### Authentication + +1. Set Authentication to API Key → Bearer. +2. Open [The Graph Market](https://thegraph.market./) and copy your Authentication JWT from your dashboard. +3. Paste the token into the ChatGPT prompt where the field shows [HIDDEN]. + +#### Schema + +1. Above the Schema box, click Import from URL. +2. Paste: https://token-api.thegraph.com/openapi +3. Click Import. You'll now see endpoints like: + - `getV1EvmTokens` + - `getV1EvmDexes` + - `getV1EvmBalances` +4. Click Test on one (for example `getV1EvmDexes`) to verify connection. + +##### Privacy + +1. At the bottom, under Privacy, paste: https://pinax.network/en/legal/privacy + +### Privacy + +You can attach a privacy policy URL such as: https://pinax.network/en/legal/privacy + +## Example Prompt Patterns + +These examples help illustrate how a GPT reasons over Token API data. + +### Wallet and Portfolio + +Get the total USD balance for a wallet across multiple chains, returning token name, symbol, balance, and price. + +### Trading Analysis + +Compare USDC and DAI liquidity across Uniswap and Curve. Return the top 5 pools by TVL. + +### Accounting + +List all ERC-20 transfers for this address in the last 30 days. Group by token and total incoming/outgoing volume. + +## Best Practices + +| Tip | Why It Matters | +| --------------------------------- | ---------------------------------------------------------------------- | +| Scope your GPT narrowly first | Simplifies debugging and validates schema integration. | +| Use clear role instructions | Helps the GPT choose the right endpoints and avoid assumptions. | +| Name endpoints explicitly | Improves routing accuracy when fetching balances, prices, or DEX data. | +| Combine with code | Enables custom parsing or logic for complex workflows. | +| Add Subgraph or Substream context | Provides richer analytics when combined with Token API data. | + +## FAQs & Resources + +- Builders Office Hours (October 23, 2025) +- Watch the full session: https://x.com/i/broadcasts/1mrGmBzBarNJy diff --git a/website/src/pages/ur/token-api/guides/upgrade-to-v1.mdx b/website/src/pages/ur/token-api/guides/upgrade-to-v1.mdx new file mode 100644 index 000000000000..e2a7ccf973fa --- /dev/null +++ b/website/src/pages/ur/token-api/guides/upgrade-to-v1.mdx @@ -0,0 +1,346 @@ +--- +title: Upgrade to v1 +--- + +This guide covers the migration from the legacy API structure to the new v1 API. The refactoring introduces versioned endpoints, standardized query parameters, improved batching support, and consistent naming conventions. + +**Note** + +- `EVM` = Ethereum Virtual Machine + +Used to describe endpoints supporting EVM-based chains (e.g. `base`, `bsc`, `mainnet`, ...). + +- `SVM` = Solana Virtual Machine + +Used to describe endpoints supporting Solana (currently the only SVM chain supported). + +## 🔑 Breaking Changes Summary + +### 1. API Versioning + +All endpoints now use the `/v1` prefix. + +**Before:** + +``` +GET /balances/evm +GET /nft/items/contract/:contract/token_id/:token_id +``` + +**After:** + +``` +GET /v1/evm/balances +GET /v1/evm/nft/items +``` + +### 2. Route Structure Reorganization + +#### 2.1 EVM Endpoints + +Consolidated under `/v1/evm/*` + +| Old Endpoint | New Endpoint | +| ------------------------------------------------------ | ----------------------------- | +| `/balances/evm` | `/v1/evm/balances` | +| `/historical/balances/evm` | `/v1/evm/balances/historical` | +| `/holders/evm/:contract` | `/v1/evm/holders` | +| `/tokens/evm/:contract` | `/v1/evm/tokens` | +| `/transfers/evm` | `/v1/evm/transfers` | +| `/pools/evm` | `/v1/evm/pools` | +| `/swaps/evm` | `/v1/evm/swaps` | +| `/dexes/evm` | `/v1/evm/dexes` | +| `/ohlc/prices/evm/:contract` | _(removed)_ | +| `/ohlc/pools/evm/:pool` | `/v1/evm/pools/ohlc` | +| `/nft/ownerships/evm/:address` | `/v1/evm/nft/ownerships` | +| `/nft/collections/evm/:contract` | `/v1/evm/nft/collections` | +| `/nft/items/evm/contract/:contract/token_id/:token_id` | `/v1/evm/nft/items` | +| `/nft/holders/evm/:contract` | `/v1/evm/nft/holders` | +| `/nft/activities/evm` | `/v1/evm/nft/transfers` | +| `/nft/sales/evm` | `/v1/evm/nft/sales` | + +**Important:** The NFT endpoint `/nft/activities` has been renamed to `/v1/evm/nft/transfers` to better reflect its purpose. + +**Important:** The EVM Token OHLCV Data endpoint `/ohlc/prices/evm/{contract}` has been removed. You can use `/v1/evm/pools` to find stablecoin pairs for your contract and `/v1/evm/pools/ohlc` for OHLCV data for that pair. + +--- + +#### 2.2 New EVM native balances endpoint + +Native balances for EVM chains can be found under `/v1/evm/balances/native`. They will not show up in the `/v1/evm/balances` endpoint. + +Other endpoints can still use native token under the `0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee` contract. + +--- + +#### 2.3 SVM Endpoints + +Consolidated under `/v1/svm/*` + +| Old Endpoint | New Endpoint | +| ------------------------ | ------------------------- | +| `/balances/svm` | `/v1/svm/balances` | +| `/balances/native/svm` | `/v1/svm/balances/native` | +| `/holders/svm/:contract` | `/v1/svm/holders` | +| `/tokens/svm/:mint` | `/v1/svm/tokens` | +| `/transfers/svm` | `/v1/svm/transfers` | +| `/pools/svm` | `/v1/svm/pools` | +| `/swaps/svm` | `/v1/svm/swaps` | +| `/dexes/svm` | `/v1/svm/dexes` | +| `/owner/svm/:account` | `/v1/svm/owner` | +| `/ohlc/pools/svm/:pool` | `/v1/svm/pools/ohlc` | + +## 📝 Parameter Changes + +### 3. Path Parameters → Query Parameters + +All path parameters have been moved to query parameters. + +**Before:** + +```bash +GET /balances/evm/:address +GET /holders/evm/:contract +GET /nft/items/evm/contract/:contract/token_id/:token_id +``` + +**After:** + +```bash +GET /v1/evm/balances?network=mainnet&address=0x... +GET /v1/evm/holders?network=mainnet&contract=0x... +GET /v1/evm/nft/items?network=mainnet&contract=0x...&token_id=5712 +``` + +### 4. Standardized Parameter Naming + +All query parameters have been standardized to use snake_case naming convention. + +| Old Parameter | New Parameter | Notes | +| --- | --- | --- | +| `network_id` | `network` | Renamed, `matic` has also been renamed to `polygon` | +| `anyAddress` | `address` | Matches either `from` or `to` address | +| `from`, `fromAddress`, `offererAddress` | `from_address`, `offerer` | - | +| `to`, `toAddress`, `recipientAddress` | `to_address`, `recipient` | - | +| `startTime` | `start_time` | Default: `1735689600` (`2025-01-01`) | +| `endTime` | `end_time` | Default: `9999999999` | +| - | `start_block` | New parameter, default: `0` | +| - | `end_block` | New parameter, default: `9999999999` | +| - | `include_null_balances` | New parameter, default: `false` | +| `tx_hash` | `transaction_id` | - | +| `token` | `input_token`, `output_token` | More explicit for pool queries | +| `pool` | `amm_pool` | - | +| `orderBy`, `orderDirection` | _(removed)_ | Always sorted by most recent timestamp first | + +**Important:** The `network_id` parameter has been renamed to `network`. + +**Important:** `matic` network has been renamed to `polygon`. + +### 5. Batched Parameters + +Many parameters now support batching - accepting single values or comma-separated strings. + +**Supported Batched Parameters:** + +- `address`, `from_address`, `to_address` +- `contract`, `token_id` +- `factory`, `pool` +- `owner`, `token_account`, `mint` +- `transaction_id`, `signature` + +**Examples:** + +```console +## Single value +?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 + +## Comma-separated, single parameter +?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 + +## Repeated parameter values +?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&contract=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 +``` + +### 6. New Parameters + +#### `include_null_balances` + +Added to balance endpoints to optionally include zero/null balances. + +```bash +?include_null_balances=true +``` + +**Default:** `false` + +## 🔄 Response Changes + +### 7. Pagination Changes + +Pagination responses have been simplified. The API no longer computes total result counts due to performance and accuracy considerations when working with ClickHouse views and materialized tables. + +**Before:** + +```json +{ + "pagination": { + "previous_page": 1, + "current_page": 2, + "next_page": 3, + "total_pages": 10 + }, + "total_results": 1234 +} +``` + +**After:** + +```json +{ + "pagination": { + "previous_page": 1, + "current_page": 2 + } +} +``` + +**Removed fields:** + +- `next_page` +- `total_pages` +- `total_results` + +**Important:** To retrieve all results, continue incrementing the `page` parameter until the API returns an empty `data` array. This indicates you've reached the end of the results. + +### 8. Removed Parameters + +The following deprecated parameters have been removed: + +- `orderBy` - Results are now ordered by timestamp/block by default +- `orderDirection` - Always descending (newest first) + +### 9. Cached Queries + +Queries are now cached on the ClickHouse side for better performance. + +You can specifically request to not use the cache by setting the `Cache-Control` header to `no-cache`. + +#### Example + +**Cache** + +```console +$ curl -s 'https://token-api.thegraph.com/v1/...' | jq .statistics +{ + "bytes_read": 221, + "rows_read": 1, + "elapsed": 0.002212065 +} +``` + +**No cache** + +```console +$ curl -s 'http://localhost:8000/v1/...' --header 'Cache-Control: no-cache' | jq .statistics +{ + "bytes_read": 14621174348, + "rows_read": 223244390, + "elapsed": 0.971064066 +} +``` + +## 📚 Example Migrations + +### Example 1: Get Token Balances + +**Before:** + +```bash +GET /token/balances/evm/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045?network_id=mainnet&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 +``` + +**After:** + +```bash +GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 +``` + +### Example 2: Get NFT Items + +**Before:** + +```bash +GET /nft/items/evm/contract/0xbd3531da5cf5857e7cfaa92426877b022e612cf8/token_id/5712?network_id=mainnet +``` + +**After:** + +```bash +GET /v1/evm/nft/items?network=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&token_id=5712 +``` + +### Example 3: Get Token Transfers with Time Filter + +**Before:** + +```bash +GET /token/transfers/evm?network_id=mainnet&from=0xd8da6bf26964af9d7eed9e03e53415d37aa96045&startTime=1735689600&endTime=1767225600 +``` + +**After:** + +```bash +GET /v1/evm/transfers?network=mainnet&from_address=0xd8da6bf26964af9d7eed9e03e53415d37aa96045&start_time=1735689600&end_time=1767225600 +``` + +### Example 4: Get NFT Transfer Activities + +**Before:** + +```bash +GET /nft/activities/evm?network_id=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&anyAddress=0xd8da6bf26964af9d7eed9e03e53415d37aa96045 +``` + +**After:** + +```bash +GET /v1/evm/nft/transfers?network=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&address=0xd8da6bf26964af9d7eed9e03e53415d37aa96045 +``` + +### Example 5: Get Pool OHLC Data + +**Before:** + +```bash +GET /token/ohlc/pools/evm/0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640?network_id=mainnet&interval=1h&startTime=1735689600 +``` + +**After:** + +```bash +GET /v1/evm/pools/ohlc?network=mainnet&pool=0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640&interval=1h&start_time=1735689600 +``` + +### Example 6: Batched Query (New Feature) + +Query balances for multiple contracts in a single request: + +```bash +GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 +``` + +Query transfers from multiple addresses: + +```bash +GET /v1/evm/transfers?network=mainnet&from_address=0xabc...,0xdef...,0x123...&start_time=1735689600 +``` + +## ⚠️ Important Notes + +1. **Migration Notes:** The old endpoints were deprecated and removed on **October 30, 2025**. Please ensure all integrations have been migrated to the new Token API v1 endpoints. + +2. **Default Sorting:** All results are now sorted by timestamp (descending) by default. Custom sorting is no longer supported. + +3. **Pagination:** Continue paging through results by incrementing the `page` parameter until you receive an empty `data` array. The API no longer provides total counts due to performance optimizations with ClickHouse. + +4. **Time Defaults:** If you previously relied on fetching all historical data without time filters, note that `start_time` now defaults to `2025-01-01`. Adjust accordingly if you need earlier data. diff --git a/website/src/pages/ur/token-api/upgrade-to-v1.mdx b/website/src/pages/ur/token-api/upgrade-to-v1.mdx deleted file mode 100644 index fbe09101eaa5..000000000000 --- a/website/src/pages/ur/token-api/upgrade-to-v1.mdx +++ /dev/null @@ -1,254 +0,0 @@ ---- -title: Upgrade to v1 ---- - -This guide covers the migration from the legacy API structure to the new v1 API. The refactoring introduces versioned endpoints, standardized query parameters, improved batching support, and consistent naming conventions. - -**Note** - -- `EVM` = Ethereum Virtual Machine - -Used to describe endpoints supporting EVM-based chains (e.g. `base`, `bsc`, `mainnet`, ...). - -- `SVM` = Solana Virtual Machine - -Used to describe endpoints supporting Solana (currently the only SVM chain supported). - -## 🔑 Breaking Changes Summary - -### 1. **API Versioning** - -All endpoints now use the `/v1` prefix. - -**Before:** - -``` -GET /balances/evm -GET /nft/items/contract/:contract/token_id/:token_id -``` - -**After:** - -``` -GET /v1/evm/balances -GET /v1/evm/nft/items -``` - -### 2. **Route Structure Reorganization** - -#### 2.1 EVM Endpoints - -Consolidated under `/v1/evm/*` - -| Old Endpoint | New Endpoint | -| ------------------------------------------------------ | ----------------------------- | -| `/balances/evm` | `/v1/evm/balances` | -| `/historical/balances/evm` | `/v1/evm/balances/historical` | -| `/holders/evm/:contract` | `/v1/evm/holders` | -| `/tokens/evm/:contract` | `/v1/evm/tokens` | -| `/transfers/evm` | `/v1/evm/transfers` | -| `/pools/evm` | `/v1/evm/pools` | -| `/swaps/evm` | `/v1/evm/swaps` | -| `/dexes/evm` | `/v1/evm/dexes` | -| `/ohlc/prices/evm/:contract` | _(removed)_ | -| `/ohlc/pools/evm/:pool` | `/v1/evm/pools/ohlc` | -| `/nft/ownerships/evm/:address` | `/v1/evm/nft/ownerships` | -| `/nft/collections/evm/:contract` | `/v1/evm/nft/collections` | -| `/nft/items/evm/contract/:contract/token_id/:token_id` | `/v1/evm/nft/items` | -| `/nft/holders/evm/:contract` | `/v1/evm/nft/holders` | -| `/nft/activities/evm` | `/v1/evm/nft/transfers` | -| `/nft/sales/evm` | `/v1/evm/nft/sales` | - -**Important:** The NFT endpoint `/nft/activities` has been renamed to `/v1/evm/nft/transfers` to better reflect its purpose. - -**Important:** The EVM Token OHLCV Data endpoint `/ohlc/prices/evm/{contract}` has been removed. You can use `/v1/evm/pools` to find stablecoin pairs for your contract and `/v1/evm/pools/ohlc` for OHLCV data for that pair. - ---- - -#### 2.2 New EVM native balances endpoint - -Native balances for EVM chains can be found under `/v1/evm/balances/native`. They will not show up in the `/v1/evm/balances` endpoint. - -Other endpoints can still use native token under the `0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee` contract. - ---- - -#### 2.3 SVM Endpoints - -Consolidated under `/v1/svm/*` - -| Old Endpoint | New Endpoint | -| ------------------------ | ------------------------- | -| `/balances/svm` | `/v1/svm/balances` | -| `/balances/native/svm` | `/v1/svm/balances/native` | -| `/holders/svm/:contract` | `/v1/svm/holders` | -| `/tokens/svm/:mint` | `/v1/svm/tokens` | -| `/transfers/svm` | `/v1/svm/transfers` | -| `/pools/svm` | `/v1/svm/pools` | -| `/swaps/svm` | `/v1/svm/swaps` | -| `/dexes/svm` | `/v1/svm/dexes` | -| `/owner/svm/:account` | `/v1/svm/owner` | -| `/ohlc/pools/svm/:pool` | `/v1/svm/pools/ohlc` | - -## 📝 Parameter Changes - -### 3. **Path Parameters → Query Parameters** - -All path parameters have been moved to query parameters. - -**Before:** - -```bash -GET /balances/evm/:address -GET /holders/evm/:contract -GET /nft/items/evm/contract/:contract/token_id/:token_id -``` - -**After:** - -```bash -GET /v1/evm/balances?network=mainnet&address=0x... -GET /v1/evm/holders?network=mainnet&contract=0x... -GET /v1/evm/nft/items?network=mainnet&contract=0x...&token_id=5712 -``` - -### 4. **Standardized Parameter Naming** - -All query parameters have been standardized to use snake_case naming convention. - -| Old Parameter | New Parameter | Notes | -| --- | --- | --- | -| `network_id` | `network` | Renamed, `matic` has also been renamed to `polygon` | -| `anyAddress` | `address` | Matches either `from` or `to` address | -| `from`, `fromAddress`, `offererAddress` | `from_address`, `offerer` | - | -| `to`, `toAddress`, `recipientAddress` | `to_address`, `recipient` | - | -| `startTime` | `start_time` | Default: `1735689600` (`2025-01-01`) | -| `endTime` | `end_time` | Default: `9999999999` | -| - | `start_block` | New parameter, default: `0` | -| - | `end_block` | New parameter, default: `9999999999` | -| - | `include_null_balances` | New parameter, default: `false` | -| `tx_hash` | `transaction_id` | - | -| `token` | `input_token`, `output_token` | More explicit for pool queries | -| `pool` | `amm_pool` | - | -| `orderBy`, `orderDirection` | _(removed)_ | Always sorted by most recent timestamp first | - -**Important:** The `network_id` parameter has been renamed to `network`. - -**Important:** `matic` network has been renamed to `polygon`. - -### 5. **Batched Parameters** - -Many parameters now support batching - accepting single values or comma-separated strings. - -**Supported Batched Parameters:** - -- `address`, `from_address`, `to_address` -- `contract`, `token_id` -- `factory`, `pool` -- `owner`, `token_account`, `mint` -- `transaction_id`, `signature` - -**Examples:** - -```console -# Single value -?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 - -# Comma-separated, single parameter -?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 - -# Repeated parameter values -?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&contract=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 -``` - -### 6. **New Parameters** - -#### `include_null_balances` - -Added to balance endpoints to optionally include zero/null balances. - -```bash -?include_null_balances=true -``` - -**Default:** `false` - -## 🔄 Response Changes - -### 7. **Pagination Changes** - -Pagination responses have been simplified. The API no longer computes total result counts due to performance and accuracy considerations when working with ClickHouse views and materialized tables. - -**Before:** - -```json -{ - "pagination": { - "previous_page": 1, - "current_page": 2, - "next_page": 3, - "total_pages": 10 - }, - "total_results": 1234 -} -``` - -**After:** - -```json -{ - "pagination": { - "previous_page": 1, - "current_page": 2 - } -} -``` - -**Removed fields:** - -- `next_page` -- `total_pages` -- `total_results` - -**Important:** To retrieve all results, continue incrementing the `page` parameter until the API returns an empty `data` array. This indicates you've reached the end of the results. - -### 8. **Removed Parameters** - -The following deprecated parameters have been removed: - -- `orderBy` - Results are now ordered by timestamp/block by default -- `orderDirection` - Always descending (newest first) - -## 📚 Example Migrations - -### Old vs New: Get Token Balances - -**Before:** - -```bash -GET /balances/evm/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045?network_id=mainnet&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 -``` - -**After:** - -```bash -GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 -``` - -### New Feature: Batched Queries - -Query balances for multiple contracts in a single request: - -```bash -GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 -``` - -## ⚠️ Important Notes - -1. **Backward Compatibility:** The old endpoints are deprecated and will be removed in the future. Migrate by **Oct 30, 2025**. - -2. **Default Sorting:** All results are now sorted by timestamp (descending) by default. Custom sorting is no longer supported. - -3. **Pagination:** Continue paging through results by incrementing the `page` parameter until you receive an empty `data` array. The API no longer provides total counts due to performance optimizations with ClickHouse. - -4. **Time Defaults:** If you previously relied on fetching all historical data without time filters, note that `start_time` now defaults to `2025-01-01`. Adjust accordingly if you need earlier data. diff --git a/website/src/pages/vi/index.json b/website/src/pages/vi/index.json index 776370dc027c..39668153a643 100644 --- a/website/src/pages/vi/index.json +++ b/website/src/pages/vi/index.json @@ -2,7 +2,7 @@ "title": "Home", "hero": { "title": "The Graph Docs", - "description": "The Graph is a blockchain data solution that powers applications, analytics, and AI on 90+ chains. The Graph's core products include the Token API for web3 apps, Subgraphs for indexing smart contracts, and Substreams for real-time and historical data streaming.", + "description": "The Graph is a blockchain data solution that powers applications, analytics, and AI on 80+ chains. The Graph's core products include the Token API for web3 apps, Subgraphs for indexing smart contracts, and Substreams for real-time and historical data streaming.", "cta1": "How The Graph works", "cta2": "Build your first subgraph" }, diff --git a/website/src/pages/vi/subgraphs/guides/_meta.js b/website/src/pages/vi/subgraphs/guides/_meta.js index fd5608dcceb2..1c081848ea08 100644 --- a/website/src/pages/vi/subgraphs/guides/_meta.js +++ b/website/src/pages/vi/subgraphs/guides/_meta.js @@ -2,7 +2,6 @@ export default { 'subgraph-composition': '', 'subgraph-debug-forking': '', near: '', - grafting: '', 'subgraph-uncrashable': '', 'transfer-to-the-graph': '', diff --git a/website/src/pages/vi/token-api/_meta.js b/website/src/pages/vi/token-api/_meta.js index a8624da52e7f..9588f70cec53 100644 --- a/website/src/pages/vi/token-api/_meta.js +++ b/website/src/pages/vi/token-api/_meta.js @@ -11,6 +11,6 @@ export default { 'tvm-dexs': titles['tvm-dexs'] ?? '', monitoring: titles['monitoring'] ?? '', 'endpoint-pricing': '', + guides: titles['guides'] ?? '', faq: '', - 'upgrade-to-v1': '', } diff --git a/website/src/pages/vi/token-api/guides/_meta-titles.json b/website/src/pages/vi/token-api/guides/_meta-titles.json new file mode 100644 index 000000000000..cd93dcc0fc0b --- /dev/null +++ b/website/src/pages/vi/token-api/guides/_meta-titles.json @@ -0,0 +1,4 @@ +{ + "gpt": "Create Custom GPTS", + "upgrade-to-v1": "" +} diff --git a/website/src/pages/vi/token-api/guides/_meta.js b/website/src/pages/vi/token-api/guides/_meta.js new file mode 100644 index 000000000000..e5aaaadd78f2 --- /dev/null +++ b/website/src/pages/vi/token-api/guides/_meta.js @@ -0,0 +1,4 @@ +export default { + gpt: '', + 'upgrade-to-v1': '', +} diff --git a/website/src/pages/vi/token-api/guides/gpt.mdx b/website/src/pages/vi/token-api/guides/gpt.mdx new file mode 100644 index 000000000000..564d013dea20 --- /dev/null +++ b/website/src/pages/vi/token-api/guides/gpt.mdx @@ -0,0 +1,121 @@ +--- +title: How the Token API Powers Custom GPTs +sidebarTitle: Create Custom GPTs +--- + +## Overview + +The Token API is a pre-indexed blockchain data service that provides real-time access to token balances, metadata, prices, liquidity, and volume across multiple chains. Developers use its REST endpoints to build wallets, trading dashboards, DeFi analytics, and AI systems without maintaining their own indexing stack. Custom GPTs can connect directly to the Token API's OpenAPI schema. + +The Token API enables developers to build **Custom GPTs** to reason over live blockchain data inside ChatGPT that can reason over and respond with live blockchain data directly inside ChatGPT. + +## What the Token API Enables in Custom GPTs + +When a Custom GPT is wired to the Token API, it gains access to a machine-readable schema and authenticated endpoints. Developers can use this to: + +- **Query real-time onchain data**: Balances, token prices, liquidity, and transaction history. +- **Automate domain-specific tasks**: Portfolio tracking, accounting, reconciliation, and market analysis. +- **Power AI agents with verifiable blockchain context**: Use the same data sources dapps rely on. + +Because the Token API provides a machine-readable schema and authenticated requests, it serves as a structured data layer that enables GPT-5 agents to combine natural language reasoning with live onchain data from The Graph. + +## When to Use the Token API for Custom GPTs + +Use the Token API when your GPT needs repeatable, domain-specific behavior grounded in blockchain data. This is most effective when the GPT performs the same type of task frequently or enforces a workflow you define. For one-off or exploratory questions, standard ChatGPT prompts are sufficient. + +## Choosing a Use Case + +Start with a clear, narrow objective, then expand as needed. Common patterns include: + +- **Accounting GPT**: Onchain accounting, tax tagging, and portfolio reconciliation. +- **Trading GPT**: Liquidity, pricing, and volume analysis for trading strategies. +- **Protocol Tracking GPT**: Real-time monitoring of transaction activity and liquidity pools. + +A focused initial goal such as “Retrieve token balances and prices for a wallet” makes it easier to configure reliable behavior before adding complex workflows. + +## Requirements + +| Requirement | Description | +| ---------------------- | -------------------------------------------------------- | +| ChatGPT 5 | Custom GPT creation requires GPT-5 tier or Pro. | +| Token API Subscription | Sign up at [The Graph Market](https://thegraph.market./) | +| Token API Key | Available in your dashboard as the Authentication JWT. | + +## Setting Up a Custom GPT + +Below is an explanatory outline of what happens during setup. This section provides conceptual understanding. + +### Create Custom GPT + +1. Visit chat.openai.com/gpts in your browser. 2, Click Create (top right). +2. Under Configure (in the top left panel), set up your GPT's personality and scope. + +### Configure Your GPT + +You define the GPT's role, scope, and metadata so it knows what it is designed to do. This includes: + +- **Name and Description**: Helps users discover your GPT. + - For example: **Name**: Token Tracker GPT **Description**: An onchain analytics assistant that retrieves live token balances, prices, and liquidity data using The Graph's Token API. +- **Instructions**: Tells the GPT what tasks it should perform using the Token API. + - For example: You are a blockchain data assistant retrieving onchain token data from The Graph's Token API. Use endpoints to fetch balances, liquidity, and price history across EVM chains. Present results in tables with token symbols, prices, and USD values. +- **Knowledge**: Optional context files such as wallet references, accounting rules, or code snippets. +- **New Action**: At the bottom, click “Create new action” to connect your GPT to the Token API. + +### Connect the Token API + +To enable live blockchain queries inside ChatGPT, you connect the GPT to the Token API through: + +#### Authentication + +1. Set Authentication to API Key → Bearer. +2. Open [The Graph Market](https://thegraph.market./) and copy your Authentication JWT from your dashboard. +3. Paste the token into the ChatGPT prompt where the field shows [HIDDEN]. + +#### Schema + +1. Above the Schema box, click Import from URL. +2. Paste: https://token-api.thegraph.com/openapi +3. Click Import. You'll now see endpoints like: + - `getV1EvmTokens` + - `getV1EvmDexes` + - `getV1EvmBalances` +4. Click Test on one (for example `getV1EvmDexes`) to verify connection. + +##### Privacy + +1. At the bottom, under Privacy, paste: https://pinax.network/en/legal/privacy + +### Privacy + +You can attach a privacy policy URL such as: https://pinax.network/en/legal/privacy + +## Example Prompt Patterns + +These examples help illustrate how a GPT reasons over Token API data. + +### Wallet and Portfolio + +Get the total USD balance for a wallet across multiple chains, returning token name, symbol, balance, and price. + +### Trading Analysis + +Compare USDC and DAI liquidity across Uniswap and Curve. Return the top 5 pools by TVL. + +### Accounting + +List all ERC-20 transfers for this address in the last 30 days. Group by token and total incoming/outgoing volume. + +## Best Practices + +| Tip | Why It Matters | +| --------------------------------- | ---------------------------------------------------------------------- | +| Scope your GPT narrowly first | Simplifies debugging and validates schema integration. | +| Use clear role instructions | Helps the GPT choose the right endpoints and avoid assumptions. | +| Name endpoints explicitly | Improves routing accuracy when fetching balances, prices, or DEX data. | +| Combine with code | Enables custom parsing or logic for complex workflows. | +| Add Subgraph or Substream context | Provides richer analytics when combined with Token API data. | + +## FAQs & Resources + +- Builders Office Hours (October 23, 2025) +- Watch the full session: https://x.com/i/broadcasts/1mrGmBzBarNJy diff --git a/website/src/pages/vi/token-api/guides/upgrade-to-v1.mdx b/website/src/pages/vi/token-api/guides/upgrade-to-v1.mdx new file mode 100644 index 000000000000..e2a7ccf973fa --- /dev/null +++ b/website/src/pages/vi/token-api/guides/upgrade-to-v1.mdx @@ -0,0 +1,346 @@ +--- +title: Upgrade to v1 +--- + +This guide covers the migration from the legacy API structure to the new v1 API. The refactoring introduces versioned endpoints, standardized query parameters, improved batching support, and consistent naming conventions. + +**Note** + +- `EVM` = Ethereum Virtual Machine + +Used to describe endpoints supporting EVM-based chains (e.g. `base`, `bsc`, `mainnet`, ...). + +- `SVM` = Solana Virtual Machine + +Used to describe endpoints supporting Solana (currently the only SVM chain supported). + +## 🔑 Breaking Changes Summary + +### 1. API Versioning + +All endpoints now use the `/v1` prefix. + +**Before:** + +``` +GET /balances/evm +GET /nft/items/contract/:contract/token_id/:token_id +``` + +**After:** + +``` +GET /v1/evm/balances +GET /v1/evm/nft/items +``` + +### 2. Route Structure Reorganization + +#### 2.1 EVM Endpoints + +Consolidated under `/v1/evm/*` + +| Old Endpoint | New Endpoint | +| ------------------------------------------------------ | ----------------------------- | +| `/balances/evm` | `/v1/evm/balances` | +| `/historical/balances/evm` | `/v1/evm/balances/historical` | +| `/holders/evm/:contract` | `/v1/evm/holders` | +| `/tokens/evm/:contract` | `/v1/evm/tokens` | +| `/transfers/evm` | `/v1/evm/transfers` | +| `/pools/evm` | `/v1/evm/pools` | +| `/swaps/evm` | `/v1/evm/swaps` | +| `/dexes/evm` | `/v1/evm/dexes` | +| `/ohlc/prices/evm/:contract` | _(removed)_ | +| `/ohlc/pools/evm/:pool` | `/v1/evm/pools/ohlc` | +| `/nft/ownerships/evm/:address` | `/v1/evm/nft/ownerships` | +| `/nft/collections/evm/:contract` | `/v1/evm/nft/collections` | +| `/nft/items/evm/contract/:contract/token_id/:token_id` | `/v1/evm/nft/items` | +| `/nft/holders/evm/:contract` | `/v1/evm/nft/holders` | +| `/nft/activities/evm` | `/v1/evm/nft/transfers` | +| `/nft/sales/evm` | `/v1/evm/nft/sales` | + +**Important:** The NFT endpoint `/nft/activities` has been renamed to `/v1/evm/nft/transfers` to better reflect its purpose. + +**Important:** The EVM Token OHLCV Data endpoint `/ohlc/prices/evm/{contract}` has been removed. You can use `/v1/evm/pools` to find stablecoin pairs for your contract and `/v1/evm/pools/ohlc` for OHLCV data for that pair. + +--- + +#### 2.2 New EVM native balances endpoint + +Native balances for EVM chains can be found under `/v1/evm/balances/native`. They will not show up in the `/v1/evm/balances` endpoint. + +Other endpoints can still use native token under the `0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee` contract. + +--- + +#### 2.3 SVM Endpoints + +Consolidated under `/v1/svm/*` + +| Old Endpoint | New Endpoint | +| ------------------------ | ------------------------- | +| `/balances/svm` | `/v1/svm/balances` | +| `/balances/native/svm` | `/v1/svm/balances/native` | +| `/holders/svm/:contract` | `/v1/svm/holders` | +| `/tokens/svm/:mint` | `/v1/svm/tokens` | +| `/transfers/svm` | `/v1/svm/transfers` | +| `/pools/svm` | `/v1/svm/pools` | +| `/swaps/svm` | `/v1/svm/swaps` | +| `/dexes/svm` | `/v1/svm/dexes` | +| `/owner/svm/:account` | `/v1/svm/owner` | +| `/ohlc/pools/svm/:pool` | `/v1/svm/pools/ohlc` | + +## 📝 Parameter Changes + +### 3. Path Parameters → Query Parameters + +All path parameters have been moved to query parameters. + +**Before:** + +```bash +GET /balances/evm/:address +GET /holders/evm/:contract +GET /nft/items/evm/contract/:contract/token_id/:token_id +``` + +**After:** + +```bash +GET /v1/evm/balances?network=mainnet&address=0x... +GET /v1/evm/holders?network=mainnet&contract=0x... +GET /v1/evm/nft/items?network=mainnet&contract=0x...&token_id=5712 +``` + +### 4. Standardized Parameter Naming + +All query parameters have been standardized to use snake_case naming convention. + +| Old Parameter | New Parameter | Notes | +| --- | --- | --- | +| `network_id` | `network` | Renamed, `matic` has also been renamed to `polygon` | +| `anyAddress` | `address` | Matches either `from` or `to` address | +| `from`, `fromAddress`, `offererAddress` | `from_address`, `offerer` | - | +| `to`, `toAddress`, `recipientAddress` | `to_address`, `recipient` | - | +| `startTime` | `start_time` | Default: `1735689600` (`2025-01-01`) | +| `endTime` | `end_time` | Default: `9999999999` | +| - | `start_block` | New parameter, default: `0` | +| - | `end_block` | New parameter, default: `9999999999` | +| - | `include_null_balances` | New parameter, default: `false` | +| `tx_hash` | `transaction_id` | - | +| `token` | `input_token`, `output_token` | More explicit for pool queries | +| `pool` | `amm_pool` | - | +| `orderBy`, `orderDirection` | _(removed)_ | Always sorted by most recent timestamp first | + +**Important:** The `network_id` parameter has been renamed to `network`. + +**Important:** `matic` network has been renamed to `polygon`. + +### 5. Batched Parameters + +Many parameters now support batching - accepting single values or comma-separated strings. + +**Supported Batched Parameters:** + +- `address`, `from_address`, `to_address` +- `contract`, `token_id` +- `factory`, `pool` +- `owner`, `token_account`, `mint` +- `transaction_id`, `signature` + +**Examples:** + +```console +## Single value +?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 + +## Comma-separated, single parameter +?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 + +## Repeated parameter values +?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&contract=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 +``` + +### 6. New Parameters + +#### `include_null_balances` + +Added to balance endpoints to optionally include zero/null balances. + +```bash +?include_null_balances=true +``` + +**Default:** `false` + +## 🔄 Response Changes + +### 7. Pagination Changes + +Pagination responses have been simplified. The API no longer computes total result counts due to performance and accuracy considerations when working with ClickHouse views and materialized tables. + +**Before:** + +```json +{ + "pagination": { + "previous_page": 1, + "current_page": 2, + "next_page": 3, + "total_pages": 10 + }, + "total_results": 1234 +} +``` + +**After:** + +```json +{ + "pagination": { + "previous_page": 1, + "current_page": 2 + } +} +``` + +**Removed fields:** + +- `next_page` +- `total_pages` +- `total_results` + +**Important:** To retrieve all results, continue incrementing the `page` parameter until the API returns an empty `data` array. This indicates you've reached the end of the results. + +### 8. Removed Parameters + +The following deprecated parameters have been removed: + +- `orderBy` - Results are now ordered by timestamp/block by default +- `orderDirection` - Always descending (newest first) + +### 9. Cached Queries + +Queries are now cached on the ClickHouse side for better performance. + +You can specifically request to not use the cache by setting the `Cache-Control` header to `no-cache`. + +#### Example + +**Cache** + +```console +$ curl -s 'https://token-api.thegraph.com/v1/...' | jq .statistics +{ + "bytes_read": 221, + "rows_read": 1, + "elapsed": 0.002212065 +} +``` + +**No cache** + +```console +$ curl -s 'http://localhost:8000/v1/...' --header 'Cache-Control: no-cache' | jq .statistics +{ + "bytes_read": 14621174348, + "rows_read": 223244390, + "elapsed": 0.971064066 +} +``` + +## 📚 Example Migrations + +### Example 1: Get Token Balances + +**Before:** + +```bash +GET /token/balances/evm/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045?network_id=mainnet&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 +``` + +**After:** + +```bash +GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 +``` + +### Example 2: Get NFT Items + +**Before:** + +```bash +GET /nft/items/evm/contract/0xbd3531da5cf5857e7cfaa92426877b022e612cf8/token_id/5712?network_id=mainnet +``` + +**After:** + +```bash +GET /v1/evm/nft/items?network=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&token_id=5712 +``` + +### Example 3: Get Token Transfers with Time Filter + +**Before:** + +```bash +GET /token/transfers/evm?network_id=mainnet&from=0xd8da6bf26964af9d7eed9e03e53415d37aa96045&startTime=1735689600&endTime=1767225600 +``` + +**After:** + +```bash +GET /v1/evm/transfers?network=mainnet&from_address=0xd8da6bf26964af9d7eed9e03e53415d37aa96045&start_time=1735689600&end_time=1767225600 +``` + +### Example 4: Get NFT Transfer Activities + +**Before:** + +```bash +GET /nft/activities/evm?network_id=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&anyAddress=0xd8da6bf26964af9d7eed9e03e53415d37aa96045 +``` + +**After:** + +```bash +GET /v1/evm/nft/transfers?network=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&address=0xd8da6bf26964af9d7eed9e03e53415d37aa96045 +``` + +### Example 5: Get Pool OHLC Data + +**Before:** + +```bash +GET /token/ohlc/pools/evm/0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640?network_id=mainnet&interval=1h&startTime=1735689600 +``` + +**After:** + +```bash +GET /v1/evm/pools/ohlc?network=mainnet&pool=0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640&interval=1h&start_time=1735689600 +``` + +### Example 6: Batched Query (New Feature) + +Query balances for multiple contracts in a single request: + +```bash +GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 +``` + +Query transfers from multiple addresses: + +```bash +GET /v1/evm/transfers?network=mainnet&from_address=0xabc...,0xdef...,0x123...&start_time=1735689600 +``` + +## ⚠️ Important Notes + +1. **Migration Notes:** The old endpoints were deprecated and removed on **October 30, 2025**. Please ensure all integrations have been migrated to the new Token API v1 endpoints. + +2. **Default Sorting:** All results are now sorted by timestamp (descending) by default. Custom sorting is no longer supported. + +3. **Pagination:** Continue paging through results by incrementing the `page` parameter until you receive an empty `data` array. The API no longer provides total counts due to performance optimizations with ClickHouse. + +4. **Time Defaults:** If you previously relied on fetching all historical data without time filters, note that `start_time` now defaults to `2025-01-01`. Adjust accordingly if you need earlier data. diff --git a/website/src/pages/vi/token-api/upgrade-to-v1.mdx b/website/src/pages/vi/token-api/upgrade-to-v1.mdx deleted file mode 100644 index fbe09101eaa5..000000000000 --- a/website/src/pages/vi/token-api/upgrade-to-v1.mdx +++ /dev/null @@ -1,254 +0,0 @@ ---- -title: Upgrade to v1 ---- - -This guide covers the migration from the legacy API structure to the new v1 API. The refactoring introduces versioned endpoints, standardized query parameters, improved batching support, and consistent naming conventions. - -**Note** - -- `EVM` = Ethereum Virtual Machine - -Used to describe endpoints supporting EVM-based chains (e.g. `base`, `bsc`, `mainnet`, ...). - -- `SVM` = Solana Virtual Machine - -Used to describe endpoints supporting Solana (currently the only SVM chain supported). - -## 🔑 Breaking Changes Summary - -### 1. **API Versioning** - -All endpoints now use the `/v1` prefix. - -**Before:** - -``` -GET /balances/evm -GET /nft/items/contract/:contract/token_id/:token_id -``` - -**After:** - -``` -GET /v1/evm/balances -GET /v1/evm/nft/items -``` - -### 2. **Route Structure Reorganization** - -#### 2.1 EVM Endpoints - -Consolidated under `/v1/evm/*` - -| Old Endpoint | New Endpoint | -| ------------------------------------------------------ | ----------------------------- | -| `/balances/evm` | `/v1/evm/balances` | -| `/historical/balances/evm` | `/v1/evm/balances/historical` | -| `/holders/evm/:contract` | `/v1/evm/holders` | -| `/tokens/evm/:contract` | `/v1/evm/tokens` | -| `/transfers/evm` | `/v1/evm/transfers` | -| `/pools/evm` | `/v1/evm/pools` | -| `/swaps/evm` | `/v1/evm/swaps` | -| `/dexes/evm` | `/v1/evm/dexes` | -| `/ohlc/prices/evm/:contract` | _(removed)_ | -| `/ohlc/pools/evm/:pool` | `/v1/evm/pools/ohlc` | -| `/nft/ownerships/evm/:address` | `/v1/evm/nft/ownerships` | -| `/nft/collections/evm/:contract` | `/v1/evm/nft/collections` | -| `/nft/items/evm/contract/:contract/token_id/:token_id` | `/v1/evm/nft/items` | -| `/nft/holders/evm/:contract` | `/v1/evm/nft/holders` | -| `/nft/activities/evm` | `/v1/evm/nft/transfers` | -| `/nft/sales/evm` | `/v1/evm/nft/sales` | - -**Important:** The NFT endpoint `/nft/activities` has been renamed to `/v1/evm/nft/transfers` to better reflect its purpose. - -**Important:** The EVM Token OHLCV Data endpoint `/ohlc/prices/evm/{contract}` has been removed. You can use `/v1/evm/pools` to find stablecoin pairs for your contract and `/v1/evm/pools/ohlc` for OHLCV data for that pair. - ---- - -#### 2.2 New EVM native balances endpoint - -Native balances for EVM chains can be found under `/v1/evm/balances/native`. They will not show up in the `/v1/evm/balances` endpoint. - -Other endpoints can still use native token under the `0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee` contract. - ---- - -#### 2.3 SVM Endpoints - -Consolidated under `/v1/svm/*` - -| Old Endpoint | New Endpoint | -| ------------------------ | ------------------------- | -| `/balances/svm` | `/v1/svm/balances` | -| `/balances/native/svm` | `/v1/svm/balances/native` | -| `/holders/svm/:contract` | `/v1/svm/holders` | -| `/tokens/svm/:mint` | `/v1/svm/tokens` | -| `/transfers/svm` | `/v1/svm/transfers` | -| `/pools/svm` | `/v1/svm/pools` | -| `/swaps/svm` | `/v1/svm/swaps` | -| `/dexes/svm` | `/v1/svm/dexes` | -| `/owner/svm/:account` | `/v1/svm/owner` | -| `/ohlc/pools/svm/:pool` | `/v1/svm/pools/ohlc` | - -## 📝 Parameter Changes - -### 3. **Path Parameters → Query Parameters** - -All path parameters have been moved to query parameters. - -**Before:** - -```bash -GET /balances/evm/:address -GET /holders/evm/:contract -GET /nft/items/evm/contract/:contract/token_id/:token_id -``` - -**After:** - -```bash -GET /v1/evm/balances?network=mainnet&address=0x... -GET /v1/evm/holders?network=mainnet&contract=0x... -GET /v1/evm/nft/items?network=mainnet&contract=0x...&token_id=5712 -``` - -### 4. **Standardized Parameter Naming** - -All query parameters have been standardized to use snake_case naming convention. - -| Old Parameter | New Parameter | Notes | -| --- | --- | --- | -| `network_id` | `network` | Renamed, `matic` has also been renamed to `polygon` | -| `anyAddress` | `address` | Matches either `from` or `to` address | -| `from`, `fromAddress`, `offererAddress` | `from_address`, `offerer` | - | -| `to`, `toAddress`, `recipientAddress` | `to_address`, `recipient` | - | -| `startTime` | `start_time` | Default: `1735689600` (`2025-01-01`) | -| `endTime` | `end_time` | Default: `9999999999` | -| - | `start_block` | New parameter, default: `0` | -| - | `end_block` | New parameter, default: `9999999999` | -| - | `include_null_balances` | New parameter, default: `false` | -| `tx_hash` | `transaction_id` | - | -| `token` | `input_token`, `output_token` | More explicit for pool queries | -| `pool` | `amm_pool` | - | -| `orderBy`, `orderDirection` | _(removed)_ | Always sorted by most recent timestamp first | - -**Important:** The `network_id` parameter has been renamed to `network`. - -**Important:** `matic` network has been renamed to `polygon`. - -### 5. **Batched Parameters** - -Many parameters now support batching - accepting single values or comma-separated strings. - -**Supported Batched Parameters:** - -- `address`, `from_address`, `to_address` -- `contract`, `token_id` -- `factory`, `pool` -- `owner`, `token_account`, `mint` -- `transaction_id`, `signature` - -**Examples:** - -```console -# Single value -?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 - -# Comma-separated, single parameter -?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 - -# Repeated parameter values -?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&contract=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 -``` - -### 6. **New Parameters** - -#### `include_null_balances` - -Added to balance endpoints to optionally include zero/null balances. - -```bash -?include_null_balances=true -``` - -**Default:** `false` - -## 🔄 Response Changes - -### 7. **Pagination Changes** - -Pagination responses have been simplified. The API no longer computes total result counts due to performance and accuracy considerations when working with ClickHouse views and materialized tables. - -**Before:** - -```json -{ - "pagination": { - "previous_page": 1, - "current_page": 2, - "next_page": 3, - "total_pages": 10 - }, - "total_results": 1234 -} -``` - -**After:** - -```json -{ - "pagination": { - "previous_page": 1, - "current_page": 2 - } -} -``` - -**Removed fields:** - -- `next_page` -- `total_pages` -- `total_results` - -**Important:** To retrieve all results, continue incrementing the `page` parameter until the API returns an empty `data` array. This indicates you've reached the end of the results. - -### 8. **Removed Parameters** - -The following deprecated parameters have been removed: - -- `orderBy` - Results are now ordered by timestamp/block by default -- `orderDirection` - Always descending (newest first) - -## 📚 Example Migrations - -### Old vs New: Get Token Balances - -**Before:** - -```bash -GET /balances/evm/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045?network_id=mainnet&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 -``` - -**After:** - -```bash -GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 -``` - -### New Feature: Batched Queries - -Query balances for multiple contracts in a single request: - -```bash -GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 -``` - -## ⚠️ Important Notes - -1. **Backward Compatibility:** The old endpoints are deprecated and will be removed in the future. Migrate by **Oct 30, 2025**. - -2. **Default Sorting:** All results are now sorted by timestamp (descending) by default. Custom sorting is no longer supported. - -3. **Pagination:** Continue paging through results by incrementing the `page` parameter until you receive an empty `data` array. The API no longer provides total counts due to performance optimizations with ClickHouse. - -4. **Time Defaults:** If you previously relied on fetching all historical data without time filters, note that `start_time` now defaults to `2025-01-01`. Adjust accordingly if you need earlier data. diff --git a/website/src/pages/zh/index.json b/website/src/pages/zh/index.json index f0e93d47203a..5b990df49b59 100644 --- a/website/src/pages/zh/index.json +++ b/website/src/pages/zh/index.json @@ -2,7 +2,7 @@ "title": "主页", "hero": { "title": "The Graph 文档", - "description": "The Graph is a blockchain data solution that powers applications, analytics, and AI on 90+ chains. The Graph's core products include the Token API for web3 apps, Subgraphs for indexing smart contracts, and Substreams for real-time and historical data streaming.", + "description": "The Graph is a blockchain data solution that powers applications, analytics, and AI on 80+ chains. The Graph's core products include the Token API for web3 apps, Subgraphs for indexing smart contracts, and Substreams for real-time and historical data streaming.", "cta1": "The Graph 是如何工作的", "cta2": "创建你的第一个子图" }, diff --git a/website/src/pages/zh/subgraphs/guides/_meta.js b/website/src/pages/zh/subgraphs/guides/_meta.js index fd5608dcceb2..1c081848ea08 100644 --- a/website/src/pages/zh/subgraphs/guides/_meta.js +++ b/website/src/pages/zh/subgraphs/guides/_meta.js @@ -2,7 +2,6 @@ export default { 'subgraph-composition': '', 'subgraph-debug-forking': '', near: '', - grafting: '', 'subgraph-uncrashable': '', 'transfer-to-the-graph': '', diff --git a/website/src/pages/zh/token-api/_meta.js b/website/src/pages/zh/token-api/_meta.js index a8624da52e7f..9588f70cec53 100644 --- a/website/src/pages/zh/token-api/_meta.js +++ b/website/src/pages/zh/token-api/_meta.js @@ -11,6 +11,6 @@ export default { 'tvm-dexs': titles['tvm-dexs'] ?? '', monitoring: titles['monitoring'] ?? '', 'endpoint-pricing': '', + guides: titles['guides'] ?? '', faq: '', - 'upgrade-to-v1': '', } diff --git a/website/src/pages/zh/token-api/guides/_meta-titles.json b/website/src/pages/zh/token-api/guides/_meta-titles.json new file mode 100644 index 000000000000..cd93dcc0fc0b --- /dev/null +++ b/website/src/pages/zh/token-api/guides/_meta-titles.json @@ -0,0 +1,4 @@ +{ + "gpt": "Create Custom GPTS", + "upgrade-to-v1": "" +} diff --git a/website/src/pages/zh/token-api/guides/_meta.js b/website/src/pages/zh/token-api/guides/_meta.js new file mode 100644 index 000000000000..e5aaaadd78f2 --- /dev/null +++ b/website/src/pages/zh/token-api/guides/_meta.js @@ -0,0 +1,4 @@ +export default { + gpt: '', + 'upgrade-to-v1': '', +} diff --git a/website/src/pages/zh/token-api/guides/gpt.mdx b/website/src/pages/zh/token-api/guides/gpt.mdx new file mode 100644 index 000000000000..564d013dea20 --- /dev/null +++ b/website/src/pages/zh/token-api/guides/gpt.mdx @@ -0,0 +1,121 @@ +--- +title: How the Token API Powers Custom GPTs +sidebarTitle: Create Custom GPTs +--- + +## Overview + +The Token API is a pre-indexed blockchain data service that provides real-time access to token balances, metadata, prices, liquidity, and volume across multiple chains. Developers use its REST endpoints to build wallets, trading dashboards, DeFi analytics, and AI systems without maintaining their own indexing stack. Custom GPTs can connect directly to the Token API's OpenAPI schema. + +The Token API enables developers to build **Custom GPTs** to reason over live blockchain data inside ChatGPT that can reason over and respond with live blockchain data directly inside ChatGPT. + +## What the Token API Enables in Custom GPTs + +When a Custom GPT is wired to the Token API, it gains access to a machine-readable schema and authenticated endpoints. Developers can use this to: + +- **Query real-time onchain data**: Balances, token prices, liquidity, and transaction history. +- **Automate domain-specific tasks**: Portfolio tracking, accounting, reconciliation, and market analysis. +- **Power AI agents with verifiable blockchain context**: Use the same data sources dapps rely on. + +Because the Token API provides a machine-readable schema and authenticated requests, it serves as a structured data layer that enables GPT-5 agents to combine natural language reasoning with live onchain data from The Graph. + +## When to Use the Token API for Custom GPTs + +Use the Token API when your GPT needs repeatable, domain-specific behavior grounded in blockchain data. This is most effective when the GPT performs the same type of task frequently or enforces a workflow you define. For one-off or exploratory questions, standard ChatGPT prompts are sufficient. + +## Choosing a Use Case + +Start with a clear, narrow objective, then expand as needed. Common patterns include: + +- **Accounting GPT**: Onchain accounting, tax tagging, and portfolio reconciliation. +- **Trading GPT**: Liquidity, pricing, and volume analysis for trading strategies. +- **Protocol Tracking GPT**: Real-time monitoring of transaction activity and liquidity pools. + +A focused initial goal such as “Retrieve token balances and prices for a wallet” makes it easier to configure reliable behavior before adding complex workflows. + +## Requirements + +| Requirement | Description | +| ---------------------- | -------------------------------------------------------- | +| ChatGPT 5 | Custom GPT creation requires GPT-5 tier or Pro. | +| Token API Subscription | Sign up at [The Graph Market](https://thegraph.market./) | +| Token API Key | Available in your dashboard as the Authentication JWT. | + +## Setting Up a Custom GPT + +Below is an explanatory outline of what happens during setup. This section provides conceptual understanding. + +### Create Custom GPT + +1. Visit chat.openai.com/gpts in your browser. 2, Click Create (top right). +2. Under Configure (in the top left panel), set up your GPT's personality and scope. + +### Configure Your GPT + +You define the GPT's role, scope, and metadata so it knows what it is designed to do. This includes: + +- **Name and Description**: Helps users discover your GPT. + - For example: **Name**: Token Tracker GPT **Description**: An onchain analytics assistant that retrieves live token balances, prices, and liquidity data using The Graph's Token API. +- **Instructions**: Tells the GPT what tasks it should perform using the Token API. + - For example: You are a blockchain data assistant retrieving onchain token data from The Graph's Token API. Use endpoints to fetch balances, liquidity, and price history across EVM chains. Present results in tables with token symbols, prices, and USD values. +- **Knowledge**: Optional context files such as wallet references, accounting rules, or code snippets. +- **New Action**: At the bottom, click “Create new action” to connect your GPT to the Token API. + +### Connect the Token API + +To enable live blockchain queries inside ChatGPT, you connect the GPT to the Token API through: + +#### Authentication + +1. Set Authentication to API Key → Bearer. +2. Open [The Graph Market](https://thegraph.market./) and copy your Authentication JWT from your dashboard. +3. Paste the token into the ChatGPT prompt where the field shows [HIDDEN]. + +#### Schema + +1. Above the Schema box, click Import from URL. +2. Paste: https://token-api.thegraph.com/openapi +3. Click Import. You'll now see endpoints like: + - `getV1EvmTokens` + - `getV1EvmDexes` + - `getV1EvmBalances` +4. Click Test on one (for example `getV1EvmDexes`) to verify connection. + +##### Privacy + +1. At the bottom, under Privacy, paste: https://pinax.network/en/legal/privacy + +### Privacy + +You can attach a privacy policy URL such as: https://pinax.network/en/legal/privacy + +## Example Prompt Patterns + +These examples help illustrate how a GPT reasons over Token API data. + +### Wallet and Portfolio + +Get the total USD balance for a wallet across multiple chains, returning token name, symbol, balance, and price. + +### Trading Analysis + +Compare USDC and DAI liquidity across Uniswap and Curve. Return the top 5 pools by TVL. + +### Accounting + +List all ERC-20 transfers for this address in the last 30 days. Group by token and total incoming/outgoing volume. + +## Best Practices + +| Tip | Why It Matters | +| --------------------------------- | ---------------------------------------------------------------------- | +| Scope your GPT narrowly first | Simplifies debugging and validates schema integration. | +| Use clear role instructions | Helps the GPT choose the right endpoints and avoid assumptions. | +| Name endpoints explicitly | Improves routing accuracy when fetching balances, prices, or DEX data. | +| Combine with code | Enables custom parsing or logic for complex workflows. | +| Add Subgraph or Substream context | Provides richer analytics when combined with Token API data. | + +## FAQs & Resources + +- Builders Office Hours (October 23, 2025) +- Watch the full session: https://x.com/i/broadcasts/1mrGmBzBarNJy diff --git a/website/src/pages/zh/token-api/guides/upgrade-to-v1.mdx b/website/src/pages/zh/token-api/guides/upgrade-to-v1.mdx new file mode 100644 index 000000000000..e2a7ccf973fa --- /dev/null +++ b/website/src/pages/zh/token-api/guides/upgrade-to-v1.mdx @@ -0,0 +1,346 @@ +--- +title: Upgrade to v1 +--- + +This guide covers the migration from the legacy API structure to the new v1 API. The refactoring introduces versioned endpoints, standardized query parameters, improved batching support, and consistent naming conventions. + +**Note** + +- `EVM` = Ethereum Virtual Machine + +Used to describe endpoints supporting EVM-based chains (e.g. `base`, `bsc`, `mainnet`, ...). + +- `SVM` = Solana Virtual Machine + +Used to describe endpoints supporting Solana (currently the only SVM chain supported). + +## 🔑 Breaking Changes Summary + +### 1. API Versioning + +All endpoints now use the `/v1` prefix. + +**Before:** + +``` +GET /balances/evm +GET /nft/items/contract/:contract/token_id/:token_id +``` + +**After:** + +``` +GET /v1/evm/balances +GET /v1/evm/nft/items +``` + +### 2. Route Structure Reorganization + +#### 2.1 EVM Endpoints + +Consolidated under `/v1/evm/*` + +| Old Endpoint | New Endpoint | +| ------------------------------------------------------ | ----------------------------- | +| `/balances/evm` | `/v1/evm/balances` | +| `/historical/balances/evm` | `/v1/evm/balances/historical` | +| `/holders/evm/:contract` | `/v1/evm/holders` | +| `/tokens/evm/:contract` | `/v1/evm/tokens` | +| `/transfers/evm` | `/v1/evm/transfers` | +| `/pools/evm` | `/v1/evm/pools` | +| `/swaps/evm` | `/v1/evm/swaps` | +| `/dexes/evm` | `/v1/evm/dexes` | +| `/ohlc/prices/evm/:contract` | _(removed)_ | +| `/ohlc/pools/evm/:pool` | `/v1/evm/pools/ohlc` | +| `/nft/ownerships/evm/:address` | `/v1/evm/nft/ownerships` | +| `/nft/collections/evm/:contract` | `/v1/evm/nft/collections` | +| `/nft/items/evm/contract/:contract/token_id/:token_id` | `/v1/evm/nft/items` | +| `/nft/holders/evm/:contract` | `/v1/evm/nft/holders` | +| `/nft/activities/evm` | `/v1/evm/nft/transfers` | +| `/nft/sales/evm` | `/v1/evm/nft/sales` | + +**Important:** The NFT endpoint `/nft/activities` has been renamed to `/v1/evm/nft/transfers` to better reflect its purpose. + +**Important:** The EVM Token OHLCV Data endpoint `/ohlc/prices/evm/{contract}` has been removed. You can use `/v1/evm/pools` to find stablecoin pairs for your contract and `/v1/evm/pools/ohlc` for OHLCV data for that pair. + +--- + +#### 2.2 New EVM native balances endpoint + +Native balances for EVM chains can be found under `/v1/evm/balances/native`. They will not show up in the `/v1/evm/balances` endpoint. + +Other endpoints can still use native token under the `0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee` contract. + +--- + +#### 2.3 SVM Endpoints + +Consolidated under `/v1/svm/*` + +| Old Endpoint | New Endpoint | +| ------------------------ | ------------------------- | +| `/balances/svm` | `/v1/svm/balances` | +| `/balances/native/svm` | `/v1/svm/balances/native` | +| `/holders/svm/:contract` | `/v1/svm/holders` | +| `/tokens/svm/:mint` | `/v1/svm/tokens` | +| `/transfers/svm` | `/v1/svm/transfers` | +| `/pools/svm` | `/v1/svm/pools` | +| `/swaps/svm` | `/v1/svm/swaps` | +| `/dexes/svm` | `/v1/svm/dexes` | +| `/owner/svm/:account` | `/v1/svm/owner` | +| `/ohlc/pools/svm/:pool` | `/v1/svm/pools/ohlc` | + +## 📝 Parameter Changes + +### 3. Path Parameters → Query Parameters + +All path parameters have been moved to query parameters. + +**Before:** + +```bash +GET /balances/evm/:address +GET /holders/evm/:contract +GET /nft/items/evm/contract/:contract/token_id/:token_id +``` + +**After:** + +```bash +GET /v1/evm/balances?network=mainnet&address=0x... +GET /v1/evm/holders?network=mainnet&contract=0x... +GET /v1/evm/nft/items?network=mainnet&contract=0x...&token_id=5712 +``` + +### 4. Standardized Parameter Naming + +All query parameters have been standardized to use snake_case naming convention. + +| Old Parameter | New Parameter | Notes | +| --- | --- | --- | +| `network_id` | `network` | Renamed, `matic` has also been renamed to `polygon` | +| `anyAddress` | `address` | Matches either `from` or `to` address | +| `from`, `fromAddress`, `offererAddress` | `from_address`, `offerer` | - | +| `to`, `toAddress`, `recipientAddress` | `to_address`, `recipient` | - | +| `startTime` | `start_time` | Default: `1735689600` (`2025-01-01`) | +| `endTime` | `end_time` | Default: `9999999999` | +| - | `start_block` | New parameter, default: `0` | +| - | `end_block` | New parameter, default: `9999999999` | +| - | `include_null_balances` | New parameter, default: `false` | +| `tx_hash` | `transaction_id` | - | +| `token` | `input_token`, `output_token` | More explicit for pool queries | +| `pool` | `amm_pool` | - | +| `orderBy`, `orderDirection` | _(removed)_ | Always sorted by most recent timestamp first | + +**Important:** The `network_id` parameter has been renamed to `network`. + +**Important:** `matic` network has been renamed to `polygon`. + +### 5. Batched Parameters + +Many parameters now support batching - accepting single values or comma-separated strings. + +**Supported Batched Parameters:** + +- `address`, `from_address`, `to_address` +- `contract`, `token_id` +- `factory`, `pool` +- `owner`, `token_account`, `mint` +- `transaction_id`, `signature` + +**Examples:** + +```console +## Single value +?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 + +## Comma-separated, single parameter +?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 + +## Repeated parameter values +?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&contract=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 +``` + +### 6. New Parameters + +#### `include_null_balances` + +Added to balance endpoints to optionally include zero/null balances. + +```bash +?include_null_balances=true +``` + +**Default:** `false` + +## 🔄 Response Changes + +### 7. Pagination Changes + +Pagination responses have been simplified. The API no longer computes total result counts due to performance and accuracy considerations when working with ClickHouse views and materialized tables. + +**Before:** + +```json +{ + "pagination": { + "previous_page": 1, + "current_page": 2, + "next_page": 3, + "total_pages": 10 + }, + "total_results": 1234 +} +``` + +**After:** + +```json +{ + "pagination": { + "previous_page": 1, + "current_page": 2 + } +} +``` + +**Removed fields:** + +- `next_page` +- `total_pages` +- `total_results` + +**Important:** To retrieve all results, continue incrementing the `page` parameter until the API returns an empty `data` array. This indicates you've reached the end of the results. + +### 8. Removed Parameters + +The following deprecated parameters have been removed: + +- `orderBy` - Results are now ordered by timestamp/block by default +- `orderDirection` - Always descending (newest first) + +### 9. Cached Queries + +Queries are now cached on the ClickHouse side for better performance. + +You can specifically request to not use the cache by setting the `Cache-Control` header to `no-cache`. + +#### Example + +**Cache** + +```console +$ curl -s 'https://token-api.thegraph.com/v1/...' | jq .statistics +{ + "bytes_read": 221, + "rows_read": 1, + "elapsed": 0.002212065 +} +``` + +**No cache** + +```console +$ curl -s 'http://localhost:8000/v1/...' --header 'Cache-Control: no-cache' | jq .statistics +{ + "bytes_read": 14621174348, + "rows_read": 223244390, + "elapsed": 0.971064066 +} +``` + +## 📚 Example Migrations + +### Example 1: Get Token Balances + +**Before:** + +```bash +GET /token/balances/evm/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045?network_id=mainnet&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 +``` + +**After:** + +```bash +GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 +``` + +### Example 2: Get NFT Items + +**Before:** + +```bash +GET /nft/items/evm/contract/0xbd3531da5cf5857e7cfaa92426877b022e612cf8/token_id/5712?network_id=mainnet +``` + +**After:** + +```bash +GET /v1/evm/nft/items?network=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&token_id=5712 +``` + +### Example 3: Get Token Transfers with Time Filter + +**Before:** + +```bash +GET /token/transfers/evm?network_id=mainnet&from=0xd8da6bf26964af9d7eed9e03e53415d37aa96045&startTime=1735689600&endTime=1767225600 +``` + +**After:** + +```bash +GET /v1/evm/transfers?network=mainnet&from_address=0xd8da6bf26964af9d7eed9e03e53415d37aa96045&start_time=1735689600&end_time=1767225600 +``` + +### Example 4: Get NFT Transfer Activities + +**Before:** + +```bash +GET /nft/activities/evm?network_id=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&anyAddress=0xd8da6bf26964af9d7eed9e03e53415d37aa96045 +``` + +**After:** + +```bash +GET /v1/evm/nft/transfers?network=mainnet&contract=0xbd3531da5cf5857e7cfaa92426877b022e612cf8&address=0xd8da6bf26964af9d7eed9e03e53415d37aa96045 +``` + +### Example 5: Get Pool OHLC Data + +**Before:** + +```bash +GET /token/ohlc/pools/evm/0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640?network_id=mainnet&interval=1h&startTime=1735689600 +``` + +**After:** + +```bash +GET /v1/evm/pools/ohlc?network=mainnet&pool=0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640&interval=1h&start_time=1735689600 +``` + +### Example 6: Batched Query (New Feature) + +Query balances for multiple contracts in a single request: + +```bash +GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 +``` + +Query transfers from multiple addresses: + +```bash +GET /v1/evm/transfers?network=mainnet&from_address=0xabc...,0xdef...,0x123...&start_time=1735689600 +``` + +## ⚠️ Important Notes + +1. **Migration Notes:** The old endpoints were deprecated and removed on **October 30, 2025**. Please ensure all integrations have been migrated to the new Token API v1 endpoints. + +2. **Default Sorting:** All results are now sorted by timestamp (descending) by default. Custom sorting is no longer supported. + +3. **Pagination:** Continue paging through results by incrementing the `page` parameter until you receive an empty `data` array. The API no longer provides total counts due to performance optimizations with ClickHouse. + +4. **Time Defaults:** If you previously relied on fetching all historical data without time filters, note that `start_time` now defaults to `2025-01-01`. Adjust accordingly if you need earlier data. diff --git a/website/src/pages/zh/token-api/upgrade-to-v1.mdx b/website/src/pages/zh/token-api/upgrade-to-v1.mdx deleted file mode 100644 index fbe09101eaa5..000000000000 --- a/website/src/pages/zh/token-api/upgrade-to-v1.mdx +++ /dev/null @@ -1,254 +0,0 @@ ---- -title: Upgrade to v1 ---- - -This guide covers the migration from the legacy API structure to the new v1 API. The refactoring introduces versioned endpoints, standardized query parameters, improved batching support, and consistent naming conventions. - -**Note** - -- `EVM` = Ethereum Virtual Machine - -Used to describe endpoints supporting EVM-based chains (e.g. `base`, `bsc`, `mainnet`, ...). - -- `SVM` = Solana Virtual Machine - -Used to describe endpoints supporting Solana (currently the only SVM chain supported). - -## 🔑 Breaking Changes Summary - -### 1. **API Versioning** - -All endpoints now use the `/v1` prefix. - -**Before:** - -``` -GET /balances/evm -GET /nft/items/contract/:contract/token_id/:token_id -``` - -**After:** - -``` -GET /v1/evm/balances -GET /v1/evm/nft/items -``` - -### 2. **Route Structure Reorganization** - -#### 2.1 EVM Endpoints - -Consolidated under `/v1/evm/*` - -| Old Endpoint | New Endpoint | -| ------------------------------------------------------ | ----------------------------- | -| `/balances/evm` | `/v1/evm/balances` | -| `/historical/balances/evm` | `/v1/evm/balances/historical` | -| `/holders/evm/:contract` | `/v1/evm/holders` | -| `/tokens/evm/:contract` | `/v1/evm/tokens` | -| `/transfers/evm` | `/v1/evm/transfers` | -| `/pools/evm` | `/v1/evm/pools` | -| `/swaps/evm` | `/v1/evm/swaps` | -| `/dexes/evm` | `/v1/evm/dexes` | -| `/ohlc/prices/evm/:contract` | _(removed)_ | -| `/ohlc/pools/evm/:pool` | `/v1/evm/pools/ohlc` | -| `/nft/ownerships/evm/:address` | `/v1/evm/nft/ownerships` | -| `/nft/collections/evm/:contract` | `/v1/evm/nft/collections` | -| `/nft/items/evm/contract/:contract/token_id/:token_id` | `/v1/evm/nft/items` | -| `/nft/holders/evm/:contract` | `/v1/evm/nft/holders` | -| `/nft/activities/evm` | `/v1/evm/nft/transfers` | -| `/nft/sales/evm` | `/v1/evm/nft/sales` | - -**Important:** The NFT endpoint `/nft/activities` has been renamed to `/v1/evm/nft/transfers` to better reflect its purpose. - -**Important:** The EVM Token OHLCV Data endpoint `/ohlc/prices/evm/{contract}` has been removed. You can use `/v1/evm/pools` to find stablecoin pairs for your contract and `/v1/evm/pools/ohlc` for OHLCV data for that pair. - ---- - -#### 2.2 New EVM native balances endpoint - -Native balances for EVM chains can be found under `/v1/evm/balances/native`. They will not show up in the `/v1/evm/balances` endpoint. - -Other endpoints can still use native token under the `0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee` contract. - ---- - -#### 2.3 SVM Endpoints - -Consolidated under `/v1/svm/*` - -| Old Endpoint | New Endpoint | -| ------------------------ | ------------------------- | -| `/balances/svm` | `/v1/svm/balances` | -| `/balances/native/svm` | `/v1/svm/balances/native` | -| `/holders/svm/:contract` | `/v1/svm/holders` | -| `/tokens/svm/:mint` | `/v1/svm/tokens` | -| `/transfers/svm` | `/v1/svm/transfers` | -| `/pools/svm` | `/v1/svm/pools` | -| `/swaps/svm` | `/v1/svm/swaps` | -| `/dexes/svm` | `/v1/svm/dexes` | -| `/owner/svm/:account` | `/v1/svm/owner` | -| `/ohlc/pools/svm/:pool` | `/v1/svm/pools/ohlc` | - -## 📝 Parameter Changes - -### 3. **Path Parameters → Query Parameters** - -All path parameters have been moved to query parameters. - -**Before:** - -```bash -GET /balances/evm/:address -GET /holders/evm/:contract -GET /nft/items/evm/contract/:contract/token_id/:token_id -``` - -**After:** - -```bash -GET /v1/evm/balances?network=mainnet&address=0x... -GET /v1/evm/holders?network=mainnet&contract=0x... -GET /v1/evm/nft/items?network=mainnet&contract=0x...&token_id=5712 -``` - -### 4. **Standardized Parameter Naming** - -All query parameters have been standardized to use snake_case naming convention. - -| Old Parameter | New Parameter | Notes | -| --- | --- | --- | -| `network_id` | `network` | Renamed, `matic` has also been renamed to `polygon` | -| `anyAddress` | `address` | Matches either `from` or `to` address | -| `from`, `fromAddress`, `offererAddress` | `from_address`, `offerer` | - | -| `to`, `toAddress`, `recipientAddress` | `to_address`, `recipient` | - | -| `startTime` | `start_time` | Default: `1735689600` (`2025-01-01`) | -| `endTime` | `end_time` | Default: `9999999999` | -| - | `start_block` | New parameter, default: `0` | -| - | `end_block` | New parameter, default: `9999999999` | -| - | `include_null_balances` | New parameter, default: `false` | -| `tx_hash` | `transaction_id` | - | -| `token` | `input_token`, `output_token` | More explicit for pool queries | -| `pool` | `amm_pool` | - | -| `orderBy`, `orderDirection` | _(removed)_ | Always sorted by most recent timestamp first | - -**Important:** The `network_id` parameter has been renamed to `network`. - -**Important:** `matic` network has been renamed to `polygon`. - -### 5. **Batched Parameters** - -Many parameters now support batching - accepting single values or comma-separated strings. - -**Supported Batched Parameters:** - -- `address`, `from_address`, `to_address` -- `contract`, `token_id` -- `factory`, `pool` -- `owner`, `token_account`, `mint` -- `transaction_id`, `signature` - -**Examples:** - -```console -# Single value -?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 - -# Comma-separated, single parameter -?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 - -# Repeated parameter values -?contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&contract=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 -``` - -### 6. **New Parameters** - -#### `include_null_balances` - -Added to balance endpoints to optionally include zero/null balances. - -```bash -?include_null_balances=true -``` - -**Default:** `false` - -## 🔄 Response Changes - -### 7. **Pagination Changes** - -Pagination responses have been simplified. The API no longer computes total result counts due to performance and accuracy considerations when working with ClickHouse views and materialized tables. - -**Before:** - -```json -{ - "pagination": { - "previous_page": 1, - "current_page": 2, - "next_page": 3, - "total_pages": 10 - }, - "total_results": 1234 -} -``` - -**After:** - -```json -{ - "pagination": { - "previous_page": 1, - "current_page": 2 - } -} -``` - -**Removed fields:** - -- `next_page` -- `total_pages` -- `total_results` - -**Important:** To retrieve all results, continue incrementing the `page` parameter until the API returns an empty `data` array. This indicates you've reached the end of the results. - -### 8. **Removed Parameters** - -The following deprecated parameters have been removed: - -- `orderBy` - Results are now ordered by timestamp/block by default -- `orderDirection` - Always descending (newest first) - -## 📚 Example Migrations - -### Old vs New: Get Token Balances - -**Before:** - -```bash -GET /balances/evm/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045?network_id=mainnet&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 -``` - -**After:** - -```bash -GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 -``` - -### New Feature: Batched Queries - -Query balances for multiple contracts in a single request: - -```bash -GET /v1/evm/balances?network=mainnet&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&contract=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 -``` - -## ⚠️ Important Notes - -1. **Backward Compatibility:** The old endpoints are deprecated and will be removed in the future. Migrate by **Oct 30, 2025**. - -2. **Default Sorting:** All results are now sorted by timestamp (descending) by default. Custom sorting is no longer supported. - -3. **Pagination:** Continue paging through results by incrementing the `page` parameter until you receive an empty `data` array. The API no longer provides total counts due to performance optimizations with ClickHouse. - -4. **Time Defaults:** If you previously relied on fetching all historical data without time filters, note that `start_time` now defaults to `2025-01-01`. Adjust accordingly if you need earlier data.