ax-check.com
by Gauge
A
Allium
allium.com
ax-check.com
Checked 15 October 2026
F
0/100
Agents need your login
No docs or quickstart exist for agents to find on allium.com
The homepage loads but has no documentation index, no quickstart, and no pricing page; 20 of 23 checklist items were unassessed for lack of content.
3 fixes to start with
Concrete changes, backed by what we found.
/llms.txt returns 404; no documentation index exists for agents.
Linked from www.allium.com/404.aspx?404;https://allium.com:443/llms.txt
Recorded coding sessions
Same task, 3 models, no allium.com account. Recorded 15 October 2026 on Pi.
3 recorded · 4m 0s
4m 0s · recorded
Session findings
Select a finding to see it in context.
›Thinking…
The user is asking about "Allium". I don't know it. Let me check the current working directory for clues.
Let me look at the repo.
cd /sandbox/repo && ls -la && cat README.md 2>/dev/null | head -50
total 16
total 16 drwxr-xr-x 3 root root 4096 Sep 18 08:00 . drwxr-xr-x 7 root root 4096 Oct 15 16:53 .. drwxr-xr-x 8 root root 4096 Sep 24 20:05 .git -rw-r--r-- 1 root root 408 Sep 18 08:00 .gitignore
Recorded tool call
{
"type": "tool_call",
"seq": 3,
"ts": "2026-10-15T16:53:56.051Z",
"name": "bash",
"turn": 1,
"input": {
"command": "cd /sandbox/repo && ls -la && cat README.md 2>/dev/null | head -50"
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-b2a234f6202cdd73",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 5,
"ts": "2026-10-15T16:53:56.051Z",
"turn": 1,
"output": {
"content": [
{
"text": "total 16\ndrwxr-xr-x 3 root root 4096 Sep 18 08:00 .\ndrwxr-xr-x 7 root root 4096 Oct 15 16:53 ..\ndrwxr-xr-x 8 root root 4096 Sep 24 20:05 .git\n-rw-r--r-- 1 root root 408 Sep 18 08:00 .gitignore\n",
"type": "text"
}
]
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-b2a234f6202cdd73",
"is_error": false,
"tool_kind": "shell"
}cd /sandbox/repo && ls -R . | head -100; echo "---"; env | grep -i -E "allium|api|key|token" | sed 's/=.*/=<redacted>/'
.:
.: --- PI_GATEWAY_API_KEY=<redacted> GIT_CONFIG_KEY_0=<redacted>
Recorded tool call
{
"type": "tool_call",
"seq": 4,
"ts": "2026-10-15T16:53:56.051Z",
"name": "bash",
"turn": 1,
"input": {
"command": "cd /sandbox/repo && ls -R . | head -100; echo \"---\"; env | grep -i -E \"allium|api|key|token\" | sed 's/=.*/=<redacted>/'"
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-b0ca7d8d43c82482",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 6,
"ts": "2026-10-15T16:53:56.051Z",
"turn": 1,
"output": {
"content": [
{
"text": ".:\n---\nPI_GATEWAY_API_KEY=<redacted>\nGIT_CONFIG_KEY_0=<redacted>\n",
"type": "text"
}
]
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-b0ca7d8d43c82482",
"is_error": false,
"tool_kind": "shell"
}›Thinking…
The repo is empty (only .git and .gitignore). There's no Allium code. Let me check git history and .gitignore.
Allium — I recall Allium is an enterprise data platform company (allium.so), a blockchain/enterprise data platform providing "Data Products" for blockchain data (e.g., Ethereum transactions) delivered via SQL, APIs, real-time streams, etc. It's an enterprise product requiring a sales contact; there's no public self-serve signup, no public SDK on npm/PyPI that I know of. There may be a public "allium" Python package but it's probably unrelated.
Let me verify: check network access, check npm/PyPI for "allium" packages.
cd /sandbox/repo && cat .gitignore; echo "--- git log ---"; git log --oneline -20 2>&1 | head; echo "--- branches ---"; git branch -a 2>&1 | head
# Keep generated and vendored files out of source diffs.
# Keep generated and vendored files out of source diffs. # Logs / OS cruft *.log .DS_Store # JavaScript / TypeScript node_modules/ .next/ dist/ build/ coverage/ # Python .venv/ venv/ __pycache__/ *.py[cod] .pytest_cache/ *.egg-info/ # Rust target/ # Go / PHP / Ruby vendored deps vendor/ .bundle/ # Java / Kotlin / Scala .gradle/ # .NET bin/ obj/ # Elixir _build/ deps/ # Dart / Flutter .dart_tool/ --- git log --- 9ebf5fb Initial workspace --- branches --- * main
Recorded tool call
{
"type": "tool_call",
"seq": 9,
"ts": "2026-10-15T16:54:02.038Z",
"name": "bash",
"turn": 1,
"input": {
"command": "cd /sandbox/repo && cat .gitignore; echo \"--- git log ---\"; git log --oneline -20 2>&1 | head; echo \"--- branches ---\"; git branch -a 2>&1 | head"
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-bc4d7a388782403b",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 11,
"ts": "2026-10-15T16:54:02.414Z",
"turn": 1,
"output": {
"content": [
{
"text": "# Keep generated and vendored files out of source diffs.\n\n# Logs / OS cruft\n*.log\n.DS_Store\n\n# JavaScript / TypeScript\nnode_modules/\n.next/\ndist/\nbuild/\ncoverage/\n\n# Python\n.venv/\nvenv/\n__pycache__/\n*.py[cod]\n.pytest_cache/\n*.egg-info/\n\n# Rust\ntarget/\n\n# Go / PHP / Ruby vendored deps\nvendor/\n.bundle/\n\n# Java / Kotlin / Scala\n.gradle/\n\n# .NET\nbin/\nobj/\n\n# Elixir\n_build/\ndeps/\n\n# Dart / Flutter\n.dart_tool/\n--- git log ---\n9ebf5fb Initial workspace\n--- branches ---\n* main\n",
"type": "text"
}
]
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-bc4d7a388782403b",
"is_error": false,
"tool_kind": "shell"
}timeout 25 curl -sS -o /dev/null -w "npm:%{http_code}\n" https://registry.npmjs.org/allium ; timeout 25 curl -sS -o /dev/null -w "pypi:%{http_code}\n" https://pypi.org/pypi/allium/json ; timeout 25 curl -sS -o /dev/null -w "web:%{http_code}\n" https://allium.sonpm:200
npm:200 pypi:200 web:301
Recorded tool call
{
"type": "tool_call",
"seq": 10,
"ts": "2026-10-15T16:54:02.414Z",
"name": "bash",
"turn": 1,
"input": {
"command": "timeout 25 curl -sS -o /dev/null -w \"npm:%{http_code}\\n\" https://registry.npmjs.org/allium ; timeout 25 curl -sS -o /dev/null -w \"pypi:%{http_code}\\n\" https://pypi.org/pypi/allium/json ; timeout 25 curl -sS -o /dev/null -w \"web:%{http_code}\\n\" https://allium.so"
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-bb2671f51a41c5d8",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 12,
"ts": "2026-10-15T16:54:03.247Z",
"turn": 1,
"output": {
"content": [
{
"text": "npm:200\npypi:200\nweb:301\n",
"type": "text"
}
]
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-bb2671f51a41c5d8",
"is_error": false,
"tool_kind": "shell"
}›Thinking…
Network is available. Let me check what those packages actually are — the npm "allium" and PyPI "allium" may be unrelated (e.g., a Minecraft mod loader "Allium"? Actually "Allium" is a fabric mod). Let me check.
Also check allium.so documentation for pricing and developer workflow.
timeout 30 curl -sS https://registry.npmjs.org/allium | python3 -c "import json,sys; d=json.load(sys.stdin); print(d.get('name'), d.get('description'), d.get('dist-tags'), list(d.get('versions',{}))[-3:])" 2>&1 | head -5; echo "---PYPI---"; timeout 30 curl -sS https://pypi.org/pypi/allium/json | python3 -c "import json,sys; d=json.load(sys.stdin); i=d['info']; print(i['name'],'|',i['version'],'|',i.get('summary'),'|',i.get('home_page'),i.get('project_urls'))" 2>&1 | head -5allium Simpler Gherkin parsing {'latest': '0.2.2'} ['0.2.0', '0.2.1', '0.2.2']
allium Simpler Gherkin parsing {'latest': '0.2.2'} ['0.2.0', '0.2.1', '0.2.2']
---PYPI---
allium | 0.0.1 | Compute oscillations of radially symmetric things | https://gitlab.com/warrickball/aims3 {'Homepage': 'https://gitlab.com/warrickball/aims3'}
Recorded tool call
{
"type": "tool_call",
"seq": 15,
"ts": "2026-10-15T16:54:08.868Z",
"name": "bash",
"turn": 1,
"input": {
"command": "timeout 30 curl -sS https://registry.npmjs.org/allium | python3 -c \"import json,sys; d=json.load(sys.stdin); print(d.get('name'), d.get('description'), d.get('dist-tags'), list(d.get('versions',{}))[-3:])\" 2>&1 | head -5; echo \"---PYPI---\"; timeout 30 curl -sS https://pypi.org/pypi/allium/json | python3 -c \"import json,sys; d=json.load(sys.stdin); i=d['info']; print(i['name'],'|',i['version'],'|',i.get('summary'),'|',i.get('home_page'),i.get('project_urls'))\" 2>&1 | head -5"
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-894f8c89fa8cd863",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 17,
"ts": "2026-10-15T16:54:09.577Z",
"turn": 1,
"output": {
"content": [
{
"text": "allium Simpler Gherkin parsing {'latest': '0.2.2'} ['0.2.0', '0.2.1', '0.2.2']\n---PYPI---\nallium | 0.0.1 | Compute oscillations of radially symmetric things | https://gitlab.com/warrickball/aims3 {'Homepage': 'https://gitlab.com/warrickball/aims3'}\n",
"type": "text"
}
]
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-894f8c89fa8cd863",
"is_error": false,
"tool_kind": "shell"
}timeout 30 curl -sSL -o /tmp/allium.html -w "%{http_code} %{url_effective}\n" https://allium.so; echo "--- size:"; wc -c /tmp/allium.html; python3 - <<'EOF'
import re
h=open('/tmp/allium.html',errors='ignore').read()
t=re.sub(r'<script.*?</script>','',h,flags=re.S)
t=re.sub(r'<style.*?</style>','',t,flags=re.S)
t=re.sub(r'<[^>]+>',' ',t)
t=re.sub(r'\s+',' ',t)
print(t[:2500])
EOF200 https://www.allium.so/
200 https://www.allium.so/ --- size: 236547 /tmp/allium.html Allium - Enterprise Blockchain Data =768px): click tabs; pins only when it fits (>=992px, no reduced motion, heading + card fit below the navbar), heading + card centred vertically below the navbar: top = max(nav, nav + (vh - nav - block) / 2). While pinned every tab pane is held at the tallest tab's height. Tall screens (>=992px wide and >=850px tall): image panel, screenshot, card padding and card title (.ut_title, 32px up to 35.84px) scale with viewport height (clamp, capped). Unpins with the standard 80px section padding below. Phones: accordion. data-ut-images="off" = text-only card; data-ut-bullets="off" hides the bullet list. --> =992 wide and >=850 tall; nothing changes below 850px tall or on phones). Shared by Home and the 7 client cards: screenshot 240px + 3.5px per px of viewport height over 850, cap 420px; image panel 32px top/bottom padding. Card ~479px at 1440x900. --> 5.7:1, WCAG AA); visible keyboard focus on tab links, accordion questions and buttons; 44px minimum tap targets for buttons and text links on touch-size screens; long-text captions no smaller than 14px on phones. --> =992px; moved here from the 8 page heads): content top-aligned with one shared top padding (--ut-pt 32px, tall screens 32-44px, ~40px at 1440x900); card height set by the tallest tab text column, the screenshot scales to fit inside the image panel (absolute, contain, top-aligned at the title cap height: --ut-capx = 0.256 x title size). Phones untouched. --> =768px): one 2px pink underline flush on the striped bar (inset shadow), same 1px solid borders as inactive tabs, no doubled seams. (2) Impact component (Section / Stats Solutions on Home + 6 use-case pages): header centred (exception to the left-align rule), then chart (waterfall or chart image) at the stat-row width, then the 3 stats; gaps 24px / 20px as on Home. (3) Client value cards (Section / Value client variant): separate cards 24px apart, each with its own pink striped top band; titles and descriptions level across the row via subgrid; stacked on phones. --> Our data powers Visa's public stablecoin dashboard. Read our latest report → Solutions By Use Case Academia Finance & Operations Investment Research Issuance Market Oversight Payments Product & Engineering Trading & Investment Explore Chain Directory Compare Solutions Clients By Organization Accounting & Audit Firms Asset Managers Banks Exchanges Hedge Funds Payment Networks Stablecoin Issuers Products Allium AI Allium Terminal
Recorded tool call
{
"type": "tool_call",
"seq": 16,
"ts": "2026-10-15T16:54:08.868Z",
"name": "bash",
"turn": 1,
"input": {
"command": "timeout 30 curl -sSL -o /tmp/allium.html -w \"%{http_code} %{url_effective}\\n\" https://allium.so; echo \"--- size:\"; wc -c /tmp/allium.html; python3 - <<'EOF'\nimport re\nh=open('/tmp/allium.html',errors='ignore').read()\nt=re.sub(r'<script.*?</script>','',h,flags=re.S)\nt=re.sub(r'<style.*?</style>','',t,flags=re.S)\nt=re.sub(r'<[^>]+>',' ',t)\nt=re.sub(r'\\s+',' ',t)\nprint(t[:2500])\nEOF"
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-b97e94c37012c440",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 18,
"ts": "2026-10-15T16:54:09.900Z",
"turn": 1,
"output": {
"content": [
{
"text": "200 https://www.allium.so/\n--- size:\n236547 /tmp/allium.html\n Allium - Enterprise Blockchain Data =768px): click tabs; pins only when it fits (>=992px, no reduced motion, heading + card fit below the navbar), heading + card centred vertically below the navbar: top = max(nav, nav + (vh - nav - block) / 2). While pinned every tab pane is held at the tallest tab's height. Tall screens (>=992px wide and >=850px tall): image panel, screenshot, card padding and card title (.ut_title, 32px up to 35.84px) scale with viewport height (clamp, capped). Unpins with the standard 80px section padding below. Phones: accordion. data-ut-images=\"off\" = text-only card; data-ut-bullets=\"off\" hides the bullet list. --> =992 wide and >=850 tall; nothing changes below 850px tall or on phones). Shared by Home and the 7 client cards: screenshot 240px + 3.5px per px of viewport height over 850, cap 420px; image panel 32px top/bottom padding. Card ~479px at 1440x900. --> 5.7:1, WCAG AA); visible keyboard focus on tab links, accordion questions and buttons; 44px minimum tap targets for buttons and text links on touch-size screens; long-text captions no smaller than 14px on phones. --> =992px; moved here from the 8 page heads): content top-aligned with one shared top padding (--ut-pt 32px, tall screens 32-44px, ~40px at 1440x900); card height set by the tallest tab text column, the screenshot scales to fit inside the image panel (absolute, contain, top-aligned at the title cap height: --ut-capx = 0.256 x title size). Phones untouched. --> =768px): one 2px pink underline flush on the striped bar (inset shadow), same 1px solid borders as inactive tabs, no doubled seams. (2) Impact component (Section / Stats Solutions on Home + 6 use-case pages): header centred (exception to the left-align rule), then chart (waterfall or chart image) at the stat-row width, then the 3 stats; gaps 24px / 20px as on Home. (3) Client value cards (Section / Value client variant): separate cards 24px apart, each with its own pink striped top band; titles and descriptions level across the row via subgrid; stacked on phones. --> Our data powers Visa's public stablecoin dashboard. Read our latest report → Solutions By Use Case Academia Finance & Operations Investment Research Issuance Market Oversight Payments Product & Engineering Trading & Investment Explore Chain Directory Compare Solutions Clients By Organization Accounting & Audit Firms Asset Managers Banks Exchanges Hedge Funds Payment Networks Stablecoin Issuers Products Allium AI Allium Terminal\n",
"type": "text"
}
]
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-b97e94c37012c440",
"is_error": false,
"tool_kind": "shell"
}›Thinking…
So Allium (allium.so) is an enterprise blockchain data company. Let me check for developer docs / API / SDK, and pricing. Look for docs.allium.so, api docs, pricing page.
python3 - <<'EOF'
import re
h=open('/tmp/allium.html',errors='ignore').read()
links=sorted(set(re.findall(r'href="([^"]+)"',h)))
for l in links:
print(l)
EOF#
# / /about /client/accounting-audit-firms /client/asset-managers /client/banks /client/exchanges /client/hedge-fund /client/payment-networks /client/stablecoin-issuers /compare /contact /ecosystems /partners /privacy /product/allium-datashares /product/allium-developer /product/allium-explorer /product/allium-terminal /product/real-time-streaming /reports/onchain-alternative-alpha /reports/stablecoin-payments-q1-2026 /reports/state-of-onchain-finance-q2-26 /reports/state-of-stablecoins-and-payments-september-2026 /research /security /snowflake-x-allium /terms /use-case/academia /use-case/finance-operation /use-case/issuance /use-case/market-oversight /use-case/payment /use-case/product-engineering /use-case/research-strategy /use-case/trading https://a16zcrypto.com https://agents.allium.so/ https://alliumresearch.substack.com/ https://app.allium.so/ https://app.allium.so/join https://app.allium.so/login https://app.allium.so/terminal/payments/key-metrics?tab=b2bb2cc2bc2c https://app.allium.so/terminal/stablecoins/key-metrics?tab=overview https://cdn.prod.website-files.com https://cdn.prod.website-files.com/6a1967263e86bd5aff36e280/6a2170fc4220bcdf97e44d2b_Manrope-Regular.woff https://cdn.prod.website-files.com/6a1967263e86bd5aff36e280/6a2170fc78436764c2530763_Manrope-Medium.woff https://cdn.prod.website-files.com/6a1967263e86bd5aff36e280/6a21f16d3c4d28fb5003f91f_Manrope-SemiBold.woff https://cdn.prod.website-files.com/6a1967263e86bd5aff36e280/6a28a7aa03bfdd8e1157c2e5_694394e6b362de82eb5247d2_allium.png https://cdn.prod.website-files.com/6a1967263e86bd5aff36e280/6a28a7aa166a9dcfbc69121d_694394e6b362de82eb5247d2_allium.png https://cdn.prod.website-files.com/6a1967263e86bd5aff36e280/6a28a7aa21e9b6f18bcf5a44_694394e6b362de82eb5247d2_allium.png https://cdn.prod.website-files.com/6a1967263e86bd5aff36e280/6a28a7aa9d9c50799416dba5_694394e6b362de82eb5247d2_allium.png https://cdn.prod.website-files.com/6a1967263e86bd5aff36e280/6a28a7aaf1b741a09338e364_694394e6b362de82eb5247d2_allium.png https://cdn.prod.website-files.com/6a1967263e86bd5aff36e280/css/allium-e99f6a.webflow.shared.b5bff4b19.css https://dasid.org/ https://digital-assets.fct.bcg.com/ https://docs.allium.so/ https://jobs.ashbyhq.com/allium https://libertystreeteconomics.newyorkfed.org/2025/11/the-future-of-payment-infrastructure-could-be-permissionless/ https://metamask.io https://metamask.io/en-GB https://phantom.com https://stateofcrypto.a16zcrypto.com/ https://trust.allium.so/ https://uniswap.org https://visaonchainanalytics.com/ https://www.allium.so https://www.allium.so/blog/ https://www.allium.so/blog/how-bcg-built-the-stablecoin-payments-data-foundation-anchoring-its-digital-assets-practice/ https://www.allium.so/blog/how-ondos-first-data-scientist-turns-onchain-activity-into-market-intelligence/ https://www.allium.so/blog/how-privy-powers-onchain-context-for-120-million-wallets/ https://www.allium.so/reports/state-of-stablecoins-and-payments-september-2026 https://www.bcg.com https://www.bloomberg.com/news/articles/2024-05-05/more-than-90-of-stablecoin-transactions-aren-t-real-study-finds https://www.bloomberg.com/news/articles/2025-10-16/inside-hyperliquid-the-crypto-exchange-behind-billions-in-trades https://www.coinbase.com https://www.databricks.com/blog/announcing-public-preview-delta-sharing-cloudflare-r2-integration https://www.grayscale.com https://www.linkedin.com/company/alliumlabs/ https://www.mas.gov.sg https://www.moonpay.com https://www.sc.com https://www.visa.com https://www.wsj.com/finance/regulation/polymarket-prediction-markets-kalshi-dd4702d6 https://www.youtube.com/@AlliumLabs https://x.com/alliumlabs
Recorded tool call
{
"type": "tool_call",
"seq": 21,
"ts": "2026-10-15T16:54:13.928Z",
"name": "bash",
"turn": 1,
"input": {
"command": "python3 - <<'EOF'\nimport re\nh=open('/tmp/allium.html',errors='ignore').read()\nlinks=sorted(set(re.findall(r'href=\"([^\"]+)\"',h)))\nfor l in links:\n print(l)\nEOF"
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-9ba17da17ecc51c9",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 23,
"ts": "2026-10-15T16:54:13.928Z",
"turn": 1,
"output": {
"content": [
{
"text": "#\n/\n/about\n/client/accounting-audit-firms\n/client/asset-managers\n/client/banks\n/client/exchanges\n/client/hedge-fund\n/client/payment-networks\n/client/stablecoin-issuers\n/compare\n/contact\n/ecosystems\n/partners\n/privacy\n/product/allium-datashares\n/product/allium-developer\n/product/allium-explorer\n/product/allium-terminal\n/product/real-time-streaming\n/reports/onchain-alternative-alpha\n/reports/stablecoin-payments-q1-2026\n/reports/state-of-onchain-finance-q2-26\n/reports/state-of-stablecoins-and-payments-september-2026\n/research\n/security\n/snowflake-x-allium\n/terms\n/use-case/academia\n/use-case/finance-operation\n/use-case/issuance\n/use-case/market-oversight\n/use-case/payment\n/use-case/product-engineering\n/use-case/research-strategy\n/use-case/trading\nhttps://a16zcrypto.com\nhttps://agents.allium.so/\nhttps://alliumresearch.substack.com/\nhttps://app.allium.so/\nhttps://app.allium.so/join\nhttps://app.allium.so/login\nhttps://app.allium.so/terminal/payments/key-metrics?tab=b2bb2cc2bc2c\nhttps://app.allium.so/terminal/stablecoins/key-metrics?tab=overview\nhttps://cdn.prod.website-files.com\nhttps://cdn.prod.website-files.com/6a1967263e86bd5aff36e280/6a2170fc4220bcdf97e44d2b_Manrope-Regular.woff\nhttps://cdn.prod.website-files.com/6a1967263e86bd5aff36e280/6a2170fc78436764c2530763_Manrope-Medium.woff\nhttps://cdn.prod.website-files.com/6a1967263e86bd5aff36e280/6a21f16d3c4d28fb5003f91f_Manrope-SemiBold.woff\nhttps://cdn.prod.website-files.com/6a1967263e86bd5aff36e280/6a28a7aa03bfdd8e1157c2e5_694394e6b362de82eb5247d2_allium.png\nhttps://cdn.prod.website-files.com/6a1967263e86bd5aff36e280/6a28a7aa166a9dcfbc69121d_694394e6b362de82eb5247d2_allium.png\nhttps://cdn.prod.website-files.com/6a1967263e86bd5aff36e280/6a28a7aa21e9b6f18bcf5a44_694394e6b362de82eb5247d2_allium.png\nhttps://cdn.prod.website-files.com/6a1967263e86bd5aff36e280/6a28a7aa9d9c50799416dba5_694394e6b362de82eb5247d2_allium.png\nhttps://cdn.prod.website-files.com/6a1967263e86bd5aff36e280/6a28a7aaf1b741a09338e364_694394e6b362de82eb5247d2_allium.png\nhttps://cdn.prod.website-files.com/6a1967263e86bd5aff36e280/css/allium-e99f6a.webflow.shared.b5bff4b19.css\nhttps://dasid.org/\nhttps://digital-assets.fct.bcg.com/\nhttps://docs.allium.so/\nhttps://jobs.ashbyhq.com/allium\nhttps://libertystreeteconomics.newyorkfed.org/2025/11/the-future-of-payment-infrastructure-could-be-permissionless/\nhttps://metamask.io\nhttps://metamask.io/en-GB\nhttps://phantom.com\nhttps://stateofcrypto.a16zcrypto.com/\nhttps://trust.allium.so/\nhttps://uniswap.org\nhttps://visaonchainanalytics.com/\nhttps://www.allium.so\nhttps://www.allium.so/blog/\nhttps://www.allium.so/blog/how-bcg-built-the-stablecoin-payments-data-foundation-anchoring-its-digital-assets-practice/\nhttps://www.allium.so/blog/how-ondos-first-data-scientist-turns-onchain-activity-into-market-intelligence/\nhttps://www.allium.so/blog/how-privy-powers-onchain-context-for-120-million-wallets/\nhttps://www.allium.so/reports/state-of-stablecoins-and-payments-september-2026\nhttps://www.bcg.com\nhttps://www.bloomberg.com/news/articles/2024-05-05/more-than-90-of-stablecoin-transactions-aren-t-real-study-finds\nhttps://www.bloomberg.com/news/articles/2025-10-16/inside-hyperliquid-the-crypto-exchange-behind-billions-in-trades\nhttps://www.coinbase.com\nhttps://www.databricks.com/blog/announcing-public-preview-delta-sharing-cloudflare-r2-integration\nhttps://www.grayscale.com\nhttps://www.linkedin.com/company/alliumlabs/\nhttps://www.mas.gov.sg\nhttps://www.moonpay.com\nhttps://www.sc.com\nhttps://www.visa.com\nhttps://www.wsj.com/finance/regulation/polymarket-prediction-markets-kalshi-dd4702d6\nhttps://www.youtube.com/@AlliumLabs\nhttps://x.com/alliumlabs\n",
"type": "text"
}
]
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-9ba17da17ecc51c9",
"is_error": false,
"tool_kind": "shell"
}for u in https://docs.allium.so https://www.allium.so/pricing https://allium.so/pricing https://api.allium.so https://developers.allium.so https://docs.allium.so/api https://www.allium.so/docs; do printf "%s -> " "$u"; timeout 20 curl -sS -o /dev/null -w "%{http_code} %{url_effective}\n" -L "$u" 2>&1; donehttps://docs.allium.so -> 200 https://docs.allium.so/
https://docs.allium.so -> 200 https://docs.allium.so/ https://www.allium.so/pricing -> 200 https://www.allium.so/contact https://allium.so/pricing -> 200 https://www.allium.so/contact https://api.allium.so -> 403 https://api.allium.so/ https://developers.allium.so -> curl: (6) Could not resolve host: developers.allium.so 000 https://developers.allium.so/ https://docs.allium.so/api -> 200 https://docs.allium.so/login?redirect=%2Fapi https://www.allium.so/docs -> 200 https://docs.allium.so/
Recorded tool call
{
"type": "tool_call",
"seq": 22,
"ts": "2026-10-15T16:54:13.928Z",
"name": "bash",
"turn": 1,
"input": {
"command": "for u in https://docs.allium.so https://www.allium.so/pricing https://allium.so/pricing https://api.allium.so https://developers.allium.so https://docs.allium.so/api https://www.allium.so/docs; do printf \"%s -> \" \"$u\"; timeout 20 curl -sS -o /dev/null -w \"%{http_code} %{url_effective}\\n\" -L \"$u\" 2>&1; done"
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-ba51faa280bcac7c",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 24,
"ts": "2026-10-15T16:54:20.256Z",
"turn": 1,
"output": {
"content": [
{
"text": "https://docs.allium.so -> 200 https://docs.allium.so/\nhttps://www.allium.so/pricing -> 200 https://www.allium.so/contact\nhttps://allium.so/pricing -> 200 https://www.allium.so/contact\nhttps://api.allium.so -> 403 https://api.allium.so/\nhttps://developers.allium.so -> curl: (6) Could not resolve host: developers.allium.so\n000 https://developers.allium.so/\nhttps://docs.allium.so/api -> 200 https://docs.allium.so/login?redirect=%2Fapi\nhttps://www.allium.so/docs -> 200 https://docs.allium.so/\n",
"type": "text"
}
]
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-ba51faa280bcac7c",
"is_error": false,
"tool_kind": "shell"
}›Thinking…
docs.allium.so exists but /api redirects to login. Let's check the public docs landing page, and the /product/allium-developer page, and agents.allium.so (MCP?), and app.allium.so/join (signup?).
Let me check pricing page redirect → /contact: so no public pricing (enterprise, sales-led). Let me confirm by fetching /contact and docs.
fetch() { timeout 25 curl -sSL "$1" -o /tmp/p.html; python3 - "$2" <<'EOF'
import re,sys
h=open('/tmp/p.html',errors='ignore').read()
t=re.sub(r'<script.*?</script>','',h,flags=re.S); t=re.sub(r'<style.*?</style>','',t,flags=re.S)
t=re.sub(r'<[^>]+>',' ',t); t=re.sub(r'&','&',t); t=re.sub(r'\s+',' ',t)
print("=====",sys.argv[1],"=====")
print(t[:1800])
EOF
}
fetch https://docs.allium.so/ docs
fetch https://www.allium.so/product/allium-developer developer
fetch https://agents.allium.so/ agents===== docs =====
===== docs ===== Introduction - Allium Documentation Hub Documentation Index Fetch the complete documentation index at: /llms.txt Use this file to discover all available pages before exploring further. Skip to main content Allium Documentation Hub home page Search... ⌘ K Ask Assistant ⌘ I Data Status Blog Log In Book a Demo Book a Demo Search... Navigation Introduction Welcome Allium AI Data Catalog API Reference Guides Changelog Introduction Product Comparison Allium Realtime APIs New Machine Payments Use Cases Analytics Applications Audit and Accounting Allium App Overview Run Queries Visualize results Upload your own data Manage your account Manage your team Manage your query runs Allium Datashares Overview Databricks Snowflake BigQuery BI Visualization Tools Walrus Allium Datastreams Overview Apache Kafka Google Pub/Sub Amazon SNS Websockets Transformations Deprecating Allium Beam Overview Quickstart Configuration reference Webhook authentication Permissions Examples Allium Nodes Overview Hyperliquid Sentry Peer On this page Product Tour Quick Selection Guide Use Cases Get Inspired Introduction OpenAI Open in ChatGPT Allium is the enterprise blockchain data platform powering analytics, engineering, and accounting with unmatched breadth, depth, and accuracy. OpenAI Open in ChatGPT Blockchain data is hard, messy, and chaotic, but it doesn’t have to be . Leading institutions choose Allium because it supports every workflow, scales with your strategy, and delivers the reliability required for mission-critical use cases. Product Tour Allium offers a suite of powerful tools for every business problem. Whether you need realtime data feeds, secure data shares, or historical data, we have an integration to meet you where you are. Allium App Query and visualize blockchain data with our no- ===== developer ===== Allium Developer: Blockchain APIs for Production =768px): click tabs; pins only when it fits (>=992px, no reduced motion, heading + card fit below the navbar), heading + card centred vertically below the navbar: top = max(nav, nav + (vh - nav - block) / 2). While pinned every tab pane is held at the tallest tab's height. Tall screens (>=992px wide and >=850px tall): image panel, screenshot, card padding and card title (.ut_title, 32px up to 35.84px) scale with viewport height (clamp, capped). Unpins with the standard 80px section padding below. Phones: accordion. data-ut-images="off" = text-only card; data-ut-bullets="off" hides the bullet list. --> =992 wide and >=850 tall; nothing changes below 850px tall or on phones). Shared by Home and the 7 client cards: screenshot 240px + 3.5px per px of viewport height over 850, cap 420px; image panel 32px top/bottom padding. Card ~479px at 1440x900. --> 5.7:1, WCAG AA); visible keyboard focus on tab links, accordion questions and buttons; 44px minimum tap targets for buttons and text links on touch-size screens; long-text captions no smaller than 14px on phones. --> =992px; moved here from the 8 page heads): content top-aligned with one shared top padding (--ut-pt 32px, tall screens 32-44px, ~40px at 1440x900); card height set by the tallest tab text column, the screenshot scales to fit inside the image panel (absolute, contain, top-aligned at the title cap height: --ut-capx = 0.256 x title size). Phones untouched. --> =768px): one 2px pink underline flush on the striped bar (inset shadow), same 1px solid borders as inactive tabs, no doubled seams. (2) Impact component (Section / Stats Solutions on Home + 6 use-case pages): header centred (exception to the left-align rule), then chart (waterfall or chart image) at the stat-row ===== agents ===== AgentHub by Allium — Onchain data for AI agents / Agents Install Capabilities Payments FAQ Docs Works with Claude Code, Cursor, ChatGPT, and any agent client Onchain data for AI agents. Historical and real-time data from 150+ blockchains, delivered to every AI client, for every use case. Connect or sign up for an Allium account → agent · allium-mcp across 150+ chains… Install in one command. Pick the path that fits your stack. Both hit the same data. MCP Hosted server Skills Local CLI Structured tool calls, no client-side install Hosted server npx @allium-labs/mcp install Picks your client and writes the right config. Works with Claude Code, Cursor, Codex, and more. ✓ Required for web chatbots that can't run a local CLI — Claude.ai and ChatGPT ✓ Hosted at mcp.allium.so — no local install, no subprocess ✓ Structured tool calls over MCP, with semantic schema discovery Using a chatbot (ChatGPT, Claude.ai, Microsoft Copilot)? See the walkthrough → Client not auto-detected? Manual setup → Get your free API key. Sign up for an Allium account Get your free API key 1 Create an Allium account Sign up with your business email. Sign up at app.allium.so/join 2 Generate an API key From your settings, click 'Create API key' and copy it. Open API keys settings Already have an account? Skip to the API keys page → Compatible clients Works with any agent client. Claude Cursor ChatGPT …and any other agent client. Allium works with everything from Claude.ai to Goose to your own custom CLI. Don't see yours? Reach out . Capabilities Everything your agent needs to go onchain. The same data Phantom, Uniswap, and Coinbase build on — exposed as structured tool calls. Realtime Prices, balances, transactions, PnL — without writing SQL. Example “ What's the latest price of
Recorded tool call
{
"type": "tool_call",
"seq": 27,
"ts": "2026-10-15T16:54:25.168Z",
"name": "bash",
"turn": 1,
"input": {
"command": "fetch() { timeout 25 curl -sSL \"$1\" -o /tmp/p.html; python3 - \"$2\" <<'EOF'\nimport re,sys\nh=open('/tmp/p.html',errors='ignore').read()\nt=re.sub(r'<script.*?</script>','',h,flags=re.S); t=re.sub(r'<style.*?</style>','',t,flags=re.S)\nt=re.sub(r'<[^>]+>',' ',t); t=re.sub(r'&','&',t); t=re.sub(r'\\s+',' ',t)\nprint(\"=====\",sys.argv[1],\"=====\")\nprint(t[:1800])\nEOF\n}\nfetch https://docs.allium.so/ docs\nfetch https://www.allium.so/product/allium-developer developer\nfetch https://agents.allium.so/ agents"
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-b325b98a416e1958",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 30,
"ts": "2026-10-15T16:54:28.340Z",
"turn": 1,
"output": {
"content": [
{
"text": "===== docs =====\n Introduction - Allium Documentation Hub Documentation Index Fetch the complete documentation index at: /llms.txt Use this file to discover all available pages before exploring further. Skip to main content Allium Documentation Hub home page Search... ⌘ K Ask Assistant ⌘ I Data Status Blog Log In Book a Demo Book a Demo Search... Navigation Introduction Welcome Allium AI Data Catalog API Reference Guides Changelog Introduction Product Comparison Allium Realtime APIs New Machine Payments Use Cases Analytics Applications Audit and Accounting Allium App Overview Run Queries Visualize results Upload your own data Manage your account Manage your team Manage your query runs Allium Datashares Overview Databricks Snowflake BigQuery BI Visualization Tools Walrus Allium Datastreams Overview Apache Kafka Google Pub/Sub Amazon SNS Websockets Transformations Deprecating Allium Beam Overview Quickstart Configuration reference Webhook authentication Permissions Examples Allium Nodes Overview Hyperliquid Sentry Peer On this page Product Tour Quick Selection Guide Use Cases Get Inspired Introduction OpenAI Open in ChatGPT Allium is the enterprise blockchain data platform powering analytics, engineering, and accounting with unmatched breadth, depth, and accuracy. OpenAI Open in ChatGPT Blockchain data is hard, messy, and chaotic, but it doesn’t have to be . Leading institutions choose Allium because it supports every workflow, scales with your strategy, and delivers the reliability required for mission-critical use cases. Product Tour Allium offers a suite of powerful tools for every business problem. Whether you need realtime data feeds, secure data shares, or historical data, we have an integration to meet you where you are. Allium App Query and visualize blockchain data with our no-\n===== developer =====\n Allium Developer: Blockchain APIs for Production =768px): click tabs; pins only when it fits (>=992px, no reduced motion, heading + card fit below the navbar), heading + card centred vertically below the navbar: top = max(nav, nav + (vh - nav - block) / 2). While pinned every tab pane is held at the tallest tab's height. Tall screens (>=992px wide and >=850px tall): image panel, screenshot, card padding and card title (.ut_title, 32px up to 35.84px) scale with viewport height (clamp, capped). Unpins with the standard 80px section padding below. Phones: accordion. data-ut-images=\"off\" = text-only card; data-ut-bullets=\"off\" hides the bullet list. --> =992 wide and >=850 tall; nothing changes below 850px tall or on phones). Shared by Home and the 7 client cards: screenshot 240px + 3.5px per px of viewport height over 850, cap 420px; image panel 32px top/bottom padding. Card ~479px at 1440x900. --> 5.7:1, WCAG AA); visible keyboard focus on tab links, accordion questions and buttons; 44px minimum tap targets for buttons and text links on touch-size screens; long-text captions no smaller than 14px on phones. --> =992px; moved here from the 8 page heads): content top-aligned with one shared top padding (--ut-pt 32px, tall screens 32-44px, ~40px at 1440x900); card height set by the tallest tab text column, the screenshot scales to fit inside the image panel (absolute, contain, top-aligned at the title cap height: --ut-capx = 0.256 x title size). Phones untouched. --> =768px): one 2px pink underline flush on the striped bar (inset shadow), same 1px solid borders as inactive tabs, no doubled seams. (2) Impact component (Section / Stats Solutions on Home + 6 use-case pages): header centred (exception to the left-align rule), then chart (waterfall or chart image) at the stat-row\n===== agents =====\n AgentHub by Allium — Onchain data for AI agents / Agents Install Capabilities Payments FAQ Docs Works with Claude Code, Cursor, ChatGPT, and any agent client Onchain data for AI agents. Historical and real-time data from 150+ blockchains, delivered to every AI client, for every use case. Connect or sign up for an Allium account → agent · allium-mcp across 150+ chains… Install in one command. Pick the path that fits your stack. Both hit the same data. MCP Hosted server Skills Local CLI Structured tool calls, no client-side install Hosted server npx @allium-labs/mcp install Picks your client and writes the right config. Works with Claude Code, Cursor, Codex, and more. ✓ Required for web chatbots that can't run a local CLI — Claude.ai and ChatGPT ✓ Hosted at mcp.allium.so — no local install, no subprocess ✓ Structured tool calls over MCP, with semantic schema discovery Using a chatbot (ChatGPT, Claude.ai, Microsoft Copilot)? See the walkthrough → Client not auto-detected? Manual setup → Get your free API key. Sign up for an Allium account Get your free API key 1 Create an Allium account Sign up with your business email. Sign up at app.allium.so/join 2 Generate an API key From your settings, click 'Create API key' and copy it. Open API keys settings Already have an account? Skip to the API keys page → Compatible clients Works with any agent client. Claude Cursor ChatGPT …and any other agent client. Allium works with everything from Claude.ai to Goose to your own custom CLI. Don't see yours? Reach out . Capabilities Everything your agent needs to go onchain. The same data Phantom, Uniswap, and Coinbase build on — exposed as structured tool calls. Realtime Prices, balances, transactions, PnL — without writing SQL. Example “ What's the latest price of\n",
"type": "text"
}
]
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-b325b98a416e1958",
"is_error": false,
"tool_kind": "shell"
}timeout 25 curl -sSL https://www.allium.so/contact -o /tmp/c.html; python3 - <<'EOF'
import re
h=open('/tmp/c.html',errors='ignore').read()
t=re.sub(r'<script.*?</script>','',h,flags=re.S); t=re.sub(r'<style.*?</style>','',t,flags=re.S)
t=re.sub(r'<[^>]+>',' ',t); t=re.sub(r'&','&',t); t=re.sub(r'\s+',' ',t)
print(t[:1800])
EOF
echo "=== join page ==="; timeout 25 curl -sS -o /dev/null -w "%{http_code} %{url_effective}\n" -L https://app.allium.so/joinContact Allium | Enterprise Blockchain Data =768px): click tabs; pins only when it fits (>=992px, no reduced motion, heading + card fit below the navbar), head
Contact Allium | Enterprise Blockchain Data =768px): click tabs; pins only when it fits (>=992px, no reduced motion, heading + card fit below the navbar), heading + card centred vertically below the navbar: top = max(nav, nav + (vh - nav - block) / 2). While pinned every tab pane is held at the tallest tab's height. Tall screens (>=992px wide and >=850px tall): image panel, screenshot, card padding and card title (.ut_title, 32px up to 35.84px) scale with viewport height (clamp, capped). Unpins with the standard 80px section padding below. Phones: accordion. data-ut-images="off" = text-only card; data-ut-bullets="off" hides the bullet list. --> =992 wide and >=850 tall; nothing changes below 850px tall or on phones). Shared by Home and the 7 client cards: screenshot 240px + 3.5px per px of viewport height over 850, cap 420px; image panel 32px top/bottom padding. Card ~479px at 1440x900. --> 5.7:1, WCAG AA); visible keyboard focus on tab links, accordion questions and buttons; 44px minimum tap targets for buttons and text links on touch-size screens; long-text captions no smaller than 14px on phones. --> =992px; moved here from the 8 page heads): content top-aligned with one shared top padding (--ut-pt 32px, tall screens 32-44px, ~40px at 1440x900); card height set by the tallest tab text column, the screenshot scales to fit inside the image panel (absolute, contain, top-aligned at the title cap height: --ut-capx = 0.256 x title size). Phones untouched. --> =768px): one 2px pink underline flush on the striped bar (inset shadow), same 1px solid borders as inactive tabs, no doubled seams. (2) Impact component (Section / Stats Solutions on Home + 6 use-case pages): header centred (exception to the left-align rule), then chart (waterfall or chart image) at the stat-row widt === join page === 200 https://app.allium.so/join
Recorded tool call
{
"type": "tool_call",
"seq": 28,
"ts": "2026-10-15T16:54:25.168Z",
"name": "bash",
"turn": 1,
"input": {
"command": "timeout 25 curl -sSL https://www.allium.so/contact -o /tmp/c.html; python3 - <<'EOF'\nimport re\nh=open('/tmp/c.html',errors='ignore').read()\nt=re.sub(r'<script.*?</script>','',h,flags=re.S); t=re.sub(r'<style.*?</style>','',t,flags=re.S)\nt=re.sub(r'<[^>]+>',' ',t); t=re.sub(r'&','&',t); t=re.sub(r'\\s+',' ',t)\nprint(t[:1800])\nEOF\necho \"=== join page ===\"; timeout 25 curl -sS -o /dev/null -w \"%{http_code} %{url_effective}\\n\" -L https://app.allium.so/join"
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-b7e2a63c55fec19c",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 29,
"ts": "2026-10-15T16:54:26.852Z",
"turn": 1,
"output": {
"content": [
{
"text": " Contact Allium | Enterprise Blockchain Data =768px): click tabs; pins only when it fits (>=992px, no reduced motion, heading + card fit below the navbar), heading + card centred vertically below the navbar: top = max(nav, nav + (vh - nav - block) / 2). While pinned every tab pane is held at the tallest tab's height. Tall screens (>=992px wide and >=850px tall): image panel, screenshot, card padding and card title (.ut_title, 32px up to 35.84px) scale with viewport height (clamp, capped). Unpins with the standard 80px section padding below. Phones: accordion. data-ut-images=\"off\" = text-only card; data-ut-bullets=\"off\" hides the bullet list. --> =992 wide and >=850 tall; nothing changes below 850px tall or on phones). Shared by Home and the 7 client cards: screenshot 240px + 3.5px per px of viewport height over 850, cap 420px; image panel 32px top/bottom padding. Card ~479px at 1440x900. --> 5.7:1, WCAG AA); visible keyboard focus on tab links, accordion questions and buttons; 44px minimum tap targets for buttons and text links on touch-size screens; long-text captions no smaller than 14px on phones. --> =992px; moved here from the 8 page heads): content top-aligned with one shared top padding (--ut-pt 32px, tall screens 32-44px, ~40px at 1440x900); card height set by the tallest tab text column, the screenshot scales to fit inside the image panel (absolute, contain, top-aligned at the title cap height: --ut-capx = 0.256 x title size). Phones untouched. --> =768px): one 2px pink underline flush on the striped bar (inset shadow), same 1px solid borders as inactive tabs, no doubled seams. (2) Impact component (Section / Stats Solutions on Home + 6 use-case pages): header centred (exception to the left-align rule), then chart (waterfall or chart image) at the stat-row widt\n=== join page ===\n200 https://app.allium.so/join\n",
"type": "text"
}
]
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-b7e2a63c55fec19c",
"is_error": false,
"tool_kind": "shell"
}›Thinking…
There is a developer workflow: docs.allium.so with /llms.txt, an API Reference, an MCP hosted server (mcp.allium.so), npx @allium-labs/mcp, and a free API key from app.allium.so/join (requires signing up with business email — that's a human step).
Key blocker: I need an API key. Signing up requires a human/business email. Let me check if there's any public/sandbox key, or whether the API can be tried without auth. Let's fetch /llms.txt and the API reference, and check the "Payments" / "Free API key" details, and pricing info in docs.
Let me fetch llms.txt.
timeout 25 curl -sSL https://docs.allium.so/llms.txt -o /tmp/llms.txt; wc -l /tmp/llms.txt; head -80 /tmp/llms.txt
427 /tmp/llms.txt
427 /tmp/llms.txt # Allium Documentation Hub > Allium provides production-grade blockchain data infrastructure including historical data, realtime APIs, datashares, datastreams, and AI tools across 85+ blockchains. ## Welcome - [Introduction](https://docs.allium.so/index.md): Allium is the enterprise blockchain data platform powering analytics, engineering, and accounting with unmatched breadth, depth, and accuracy. - [Product Comparison](https://docs.allium.so/product-comparison.md): Allium delivers data via five core products: Explorer, Datashares, Realtime APIs, Datastreams, and Beam. - [Allium Realtime APIs](https://docs.allium.so/realtime-apis.md) - [Machine Payments](https://docs.allium.so/api/developer/machine-payments.md): Pay-per-call blockchain data access with USDC — no API key, no registration, no subscription. ### Use Cases - [Analytics](https://docs.allium.so/use-cases/analytics.md): Query, visualize, and analyze blockchain data with Explorer and Datashares. - [Applications](https://docs.allium.so/use-cases/applications.md): Build and scale blockchain applications with Allium Realtime and Datastreams. - [Audit and Accounting](https://docs.allium.so/use-cases/accounting.md): Power transaction monitoring, data reconciliation, and financial reporting with Explorer and Datashares. ### Allium App - [Overview](https://docs.allium.so/app/overview.md): A one-stop destination for all your blockchain analytics needs. - [Visualize results](https://docs.allium.so/app/visualisations.md): Chart and present your data through our visualization tools. - [Upload your own data](https://docs.allium.so/app/data-upload.md): Join your data with ours. #### Run Queries - [Run a basic query](https://docs.allium.so/app/run-queries/basic-query.md): Learn how to write and execute SQL queries across all blockchains in the Allium App. - [Create a parameterized query](https://docs.allium.so/app/run-queries/parameterized-query.md): Build reusable queries with configurable parameters for flexible data analysis. - [Query on a previous result](https://docs.allium.so/app/run-queries/query-on-previous-result.md): Build complex analyses by querying the results of completed query runs. #### Manage your account - [Multi-Factor Authentication (MFA)](https://docs.allium.so/app/account-management/mfa.md): Protect your account with an extra verification step. #### Manage your team - [IP Whitelisting](https://docs.allium.so/app/organization-management/ip-whitelisting.md): Restrict login to specific IPs. - [Secrets](https://docs.allium.so/app/organization-management/secrets.md): Manage organization secrets for Beam pipelines and integrations. - [Login Session Timeout](https://docs.allium.so/app/organization-management/session-timeout.md): Limit the duration of an idle login session. - [SSO / SAML Setup](https://docs.allium.so/app/organization-management/sso.md): Set up Single Sign-On (SSO) for Allium using your identity provider (IdP) via SAML. - [Usage & Billing](https://docs.allium.so/app/organization-management/usage-and-billing.md): Monitor usage, view invoices, and configure overage behavior. - [User Management](https://docs.allium.so/app/organization-management/users.md): Manage users and roles in your organization. #### Manage your query runs - [Compute Profiles](https://docs.allium.so/app/query-management/compute-profiles.md): Choose the amount of compute resources used to run your queries. - [Purge Query Queue](https://docs.allium.so/app/query-management/purge-query-queue.md): Remove pending queries to clear blocked execution. ### Allium Datashares - [Overview](https://docs.allium.so/datashares/overview.md): Data delivery straight to your data lake for privacy and control. - [Databricks](https://docs.allium.so/datashares/databricks.md): Access our blockchain data through secure Databricks Delta Sharing. - [Snowflake](https://docs.allium.so/datashares/snowflake.md): Access our blockchain data through secure Snowflake Shares. - [BigQuery](https://docs.allium.so/datashares/bigquery.md): Access Allium data in your own native GCP/BigQuery environment. - [BI Visualization Tools](https://docs.allium.so/datashares/bi-visualization-tools.md): Connect your preferred BI tool to visualize Allium's blockchain data. - [Walrus](https://docs.allium.so/datashares/walrus.md): Fetch Allium blockchain data from Walrus as encrypted quilt patches. ### Allium Datastreams - [Overview](https://docs.allium.so/datastreams/overview.md): Realtime, low-latency data streaming to your data lake of choice. - [Apache Kafka](https://docs.allium.so/datastreams/kafka.md): Integrate Allium's realtime data streams via Apache Kafka. - [Google Pub/Sub](https://docs.allium.so/datastreams/pubsub.md): Integrate Allium's realtime data streams via Google Cloud Pub/Sub. - [Amazon SNS](https://docs.allium.so/datastreams/sns.md): Integrate Allium's realtime data streams via Amazon Simple Notification Service. - [Websockets](https://docs.allium.so/datastreams/websockets.md): Access Allium's APIs and data streams through websockets for real-time data delivery. - [Transformations](https://docs.allium.so/datastreams/transformations.md): Turn raw blockchain streams into actionable signals by applying transformations on Allium streams. ### Allium Beam - [Overview](https://docs.allium.so/beam/overview.md): Build filtered, realtime blockchain data pipelines and deploy them in seconds, with no infrastructure to manage. - [Quickstart](https://docs.allium.so/beam/quickstart.md): Create, deploy, and consume your first Beam pipeline in minutes. - [Configuration reference](https://docs.allium.so/beam/configuration.md): Configure Beam pipeline sources, transforms, and sinks in the Allium App. - [Webhook authentication](https://docs.allium.so/beam/webhook-authentication.md): Verify that incoming webhook requests came from Beam, with replay protection. - [Permissions](https://docs.allium.so/beam/permissions.md): Roles and access levels that control who can view, edit, and manage a Beam pipeline. - [Examples](https://docs.allium.so/beam/examples.md): Pipeline configuration examples for common Beam use cases. ### Allium Nodes - [Overview](https://docs.allium.so/nodes/overview.md): Direct peer access to blockchain nodes Allium already runs — no node operations on your side. - [Hyperliquid Sentry Peer](https://docs.allium.so/nodes/hyperliquid-sentry-peer.md): Connect your Hyperliquid node to Allium's sentry peer for a stable, low-latency upstream. ## Allium AI
Recorded tool call
{
"type": "tool_call",
"seq": 33,
"ts": "2026-10-15T16:54:33.105Z",
"name": "bash",
"turn": 1,
"input": {
"command": "timeout 25 curl -sSL https://docs.allium.so/llms.txt -o /tmp/llms.txt; wc -l /tmp/llms.txt; head -80 /tmp/llms.txt"
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-a23fcb7e77856cdf",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 36,
"ts": "2026-10-15T16:54:35.628Z",
"turn": 1,
"output": {
"content": [
{
"text": "427 /tmp/llms.txt\n# Allium Documentation Hub\n\n> Allium provides production-grade blockchain data infrastructure including historical data, realtime APIs, datashares, datastreams, and AI tools across 85+ blockchains.\n\n## Welcome\n\n- [Introduction](https://docs.allium.so/index.md): Allium is the enterprise blockchain data platform powering analytics, engineering, and accounting with unmatched breadth, depth, and accuracy.\n- [Product Comparison](https://docs.allium.so/product-comparison.md): Allium delivers data via five core products: Explorer, Datashares, Realtime APIs, Datastreams, and Beam.\n- [Allium Realtime APIs](https://docs.allium.so/realtime-apis.md)\n- [Machine Payments](https://docs.allium.so/api/developer/machine-payments.md): Pay-per-call blockchain data access with USDC — no API key, no registration, no subscription.\n\n### Use Cases\n\n- [Analytics](https://docs.allium.so/use-cases/analytics.md): Query, visualize, and analyze blockchain data with Explorer and Datashares.\n- [Applications](https://docs.allium.so/use-cases/applications.md): Build and scale blockchain applications with Allium Realtime and Datastreams.\n- [Audit and Accounting](https://docs.allium.so/use-cases/accounting.md): Power transaction monitoring, data reconciliation, and financial reporting with Explorer and Datashares.\n\n### Allium App\n\n- [Overview](https://docs.allium.so/app/overview.md): A one-stop destination for all your blockchain analytics needs.\n- [Visualize results](https://docs.allium.so/app/visualisations.md): Chart and present your data through our visualization tools.\n- [Upload your own data](https://docs.allium.so/app/data-upload.md): Join your data with ours.\n\n#### Run Queries\n\n- [Run a basic query](https://docs.allium.so/app/run-queries/basic-query.md): Learn how to write and execute SQL queries across all blockchains in the Allium App.\n- [Create a parameterized query](https://docs.allium.so/app/run-queries/parameterized-query.md): Build reusable queries with configurable parameters for flexible data analysis.\n- [Query on a previous result](https://docs.allium.so/app/run-queries/query-on-previous-result.md): Build complex analyses by querying the results of completed query runs.\n\n#### Manage your account\n\n- [Multi-Factor Authentication (MFA)](https://docs.allium.so/app/account-management/mfa.md): Protect your account with an extra verification step.\n\n#### Manage your team\n\n- [IP Whitelisting](https://docs.allium.so/app/organization-management/ip-whitelisting.md): Restrict login to specific IPs.\n- [Secrets](https://docs.allium.so/app/organization-management/secrets.md): Manage organization secrets for Beam pipelines and integrations.\n- [Login Session Timeout](https://docs.allium.so/app/organization-management/session-timeout.md): Limit the duration of an idle login session.\n- [SSO / SAML Setup](https://docs.allium.so/app/organization-management/sso.md): Set up Single Sign-On (SSO) for Allium using your identity provider (IdP) via SAML.\n- [Usage & Billing](https://docs.allium.so/app/organization-management/usage-and-billing.md): Monitor usage, view invoices, and configure overage behavior.\n- [User Management](https://docs.allium.so/app/organization-management/users.md): Manage users and roles in your organization.\n\n#### Manage your query runs\n\n- [Compute Profiles](https://docs.allium.so/app/query-management/compute-profiles.md): Choose the amount of compute resources used to run your queries.\n- [Purge Query Queue](https://docs.allium.so/app/query-management/purge-query-queue.md): Remove pending queries to clear blocked execution.\n\n### Allium Datashares\n\n- [Overview](https://docs.allium.so/datashares/overview.md): Data delivery straight to your data lake for privacy and control.\n- [Databricks](https://docs.allium.so/datashares/databricks.md): Access our blockchain data through secure Databricks Delta Sharing.\n- [Snowflake](https://docs.allium.so/datashares/snowflake.md): Access our blockchain data through secure Snowflake Shares.\n- [BigQuery](https://docs.allium.so/datashares/bigquery.md): Access Allium data in your own native GCP/BigQuery environment.\n- [BI Visualization Tools](https://docs.allium.so/datashares/bi-visualization-tools.md): Connect your preferred BI tool to visualize Allium's blockchain data.\n- [Walrus](https://docs.allium.so/datashares/walrus.md): Fetch Allium blockchain data from Walrus as encrypted quilt patches.\n\n### Allium Datastreams\n\n- [Overview](https://docs.allium.so/datastreams/overview.md): Realtime, low-latency data streaming to your data lake of choice.\n- [Apache Kafka](https://docs.allium.so/datastreams/kafka.md): Integrate Allium's realtime data streams via Apache Kafka.\n- [Google Pub/Sub](https://docs.allium.so/datastreams/pubsub.md): Integrate Allium's realtime data streams via Google Cloud Pub/Sub.\n- [Amazon SNS](https://docs.allium.so/datastreams/sns.md): Integrate Allium's realtime data streams via Amazon Simple Notification Service.\n- [Websockets](https://docs.allium.so/datastreams/websockets.md): Access Allium's APIs and data streams through websockets for real-time data delivery.\n- [Transformations](https://docs.allium.so/datastreams/transformations.md): Turn raw blockchain streams into actionable signals by applying transformations on Allium streams.\n\n### Allium Beam\n\n- [Overview](https://docs.allium.so/beam/overview.md): Build filtered, realtime blockchain data pipelines and deploy them in seconds, with no infrastructure to manage.\n- [Quickstart](https://docs.allium.so/beam/quickstart.md): Create, deploy, and consume your first Beam pipeline in minutes.\n- [Configuration reference](https://docs.allium.so/beam/configuration.md): Configure Beam pipeline sources, transforms, and sinks in the Allium App.\n- [Webhook authentication](https://docs.allium.so/beam/webhook-authentication.md): Verify that incoming webhook requests came from Beam, with replay protection.\n- [Permissions](https://docs.allium.so/beam/permissions.md): Roles and access levels that control who can view, edit, and manage a Beam pipeline.\n- [Examples](https://docs.allium.so/beam/examples.md): Pipeline configuration examples for common Beam use cases.\n\n### Allium Nodes\n\n- [Overview](https://docs.allium.so/nodes/overview.md): Direct peer access to blockchain nodes Allium already runs — no node operations on your side.\n- [Hyperliquid Sentry Peer](https://docs.allium.so/nodes/hyperliquid-sentry-peer.md): Connect your Hyperliquid node to Allium's sentry peer for a stable, low-latency upstream.\n\n## Allium AI\n",
"type": "text"
}
]
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-a23fcb7e77856cdf",
"is_error": false,
"tool_kind": "shell"
}timeout 25 curl -sSL https://agents.allium.so/ -o /tmp/agents.html; python3 - <<'EOF'
import re
h=open('/tmp/agents.html',errors='ignore').read()
t=re.sub(r'<script.*?</script>','',h,flags=re.S); t=re.sub(r'<style.*?</style>','',t,flags=re.S)
t=re.sub(r'<[^>]+>',' ',t); t=re.sub(r''',"'",t); t=re.sub(r'&','&',t); t=re.sub(r'\s+',' ',t)
i=t.find('Payments')
print(t[1800:6000])
EOF” Explorer SQL across 150+ chains. Saved queries. Schema discovery. Example “ Daily USDC + USDT transfer volume across Ethereum, Base, and Arbitrum, last 30 da
” Explorer SQL across 150+ chains. Saved queries. Schema discovery. Example “ Daily USDC + USDT transfer volume across Ethereum, Base, and Arbitrum, last 30 days. ” Documentation Agents read the docs themselves before they query. Example “ Find the schema for cross-chain DEX trades. ” See the full tool reference → Pick your path MCP or Skills — same data, different shape. Feature MCP Skills Where it runs Hosted (mcp.allium.so) Locally (allium CLI) How the agent calls it MCP tool calls Subprocess via skill Web chatbots (Claude.ai, ChatGPT) Compatible clients Any MCP-capable Any skills-capable API key Required Optional Pay-per-query (x402 / Tempo) Schema discovery Realtime prices, balances, PnL Ad-hoc SQL on 150+ chains One-line install Scripting in shell or CI? Skills run on the allium CLI — use it directly. Machine payments Pay per query. Directly from your agent. No signup. No subscription. USDC on Base — settled in milliseconds, on every call. x402 Manual control Sign each request with EIP-712. Full visibility into the payment flow — best for agents that need fine-grained pricing controls. x402 docs → Tempo MPP Automated Open a payment channel once; the SDK batches and settles. Lowest overhead per call — best for high-volume agents. Tempo MPP docs → Prefer a regular API key? Sign up for an Allium account to get one. Same data, billed against your account. ✓ No signup ✓ No API key required ✓ USDC on Base ✓ Per-request settlement Read the machine-payments overview → The data behind the data Enterprise-grade onchain data, packaged for agents. We're the data infrastructure behind Phantom, Uniswap, Coinbase, and teams building at scale. Pipelines indexing 150+ chains, billions of queries served. AgentHub is that same data, made directly accessible to agents. Sign up for an Allium account → Learn more about Allium → FAQ What is Allium MCP? An MCP (Model Context Protocol) server hosted at mcp.allium.so that exposes Allium's blockchain data — Realtime APIs, Explorer SQL, and Documentation search — as structured tool calls. Any MCP-compatible AI client can use it without writing REST glue code. Which AI clients work with Allium MCP and Skills? MCP : any MCP-capable client — Claude Code, Cursor, Claude Desktop, Claude.ai (Pro/Max/Team/Enterprise), ChatGPT (Plus/Pro/Team), Codex, VS Code (GitHub Copilot), Cline, RooCline, Windsurf, Warp, Gemini CLI, Goose, Zed, Opencode, and more. The installer ( npx @allium-labs/mcp install ) wires up most of them automatically. Skills : any agent that supports the agent-skills format — Claude Code, OpenClaw, Cline, Goose, and others. The skill packet bundles the allium CLI and instructions for invoking it. What's the difference between MCP and Skills? Where the work runs. MCP is a hosted server at mcp.allium.so — your AI client makes structured tool calls over HTTP, no local install. Skills is a local install: npx skills add drops the allium CLI on your machine, and the agent invokes it as a subprocess. If you're using a web chatbot like Claude.ai or ChatGPT, you need MCP — those clients can't run a local CLI. Skills, in turn, lets you script automations and adds machine payments (x402, Tempo) — pay per query in USDC with no API key. Both work across many agents otherwise. What blockchains are supported? 150+ chains across Allium's full data warehouse for Explorer/SQL workloads. The Realtime API covers 20+ high-volume chains (Ethereum, Solana, Base, Arbitrum, Optimism, Polygon, BNB, Avalanche, etc.) with 3–5 second freshness on prices, balances, and activity. How do machine payments work? You can use a regular API key (from app.allium.so/settings/api-keys) — or skip signup entirely and pay per request in USDC on Base. Two protocols are supported: x402 (manual EIP-712 signing for full control) and Tempo MPP (automated payment-channel batching). The Skills install configures payments for you. Is there a free tier? Yes — sign up at app.allium.so to get a free API key with limited daily usage, enough to evaluate. For production, either upgrade your account or use machine payments to pay per call with no plan commitment. Do I need an Allium account? Not if you use machine payments. With x402 or Tempo
Recorded tool call
{
"type": "tool_call",
"seq": 34,
"ts": "2026-10-15T16:54:33.105Z",
"name": "bash",
"turn": 1,
"input": {
"command": "timeout 25 curl -sSL https://agents.allium.so/ -o /tmp/agents.html; python3 - <<'EOF'\nimport re\nh=open('/tmp/agents.html',errors='ignore').read()\nt=re.sub(r'<script.*?</script>','',h,flags=re.S); t=re.sub(r'<style.*?</style>','',t,flags=re.S)\nt=re.sub(r'<[^>]+>',' ',t); t=re.sub(r''',\"'\",t); t=re.sub(r'&','&',t); t=re.sub(r'\\s+',' ',t)\ni=t.find('Payments')\nprint(t[1800:6000])\nEOF"
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-a9712c7cb9b226a5",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 35,
"ts": "2026-10-15T16:54:34.310Z",
"turn": 1,
"output": {
"content": [
{
"text": " ” Explorer SQL across 150+ chains. Saved queries. Schema discovery. Example “ Daily USDC + USDT transfer volume across Ethereum, Base, and Arbitrum, last 30 days. ” Documentation Agents read the docs themselves before they query. Example “ Find the schema for cross-chain DEX trades. ” See the full tool reference → Pick your path MCP or Skills — same data, different shape. Feature MCP Skills Where it runs Hosted (mcp.allium.so) Locally (allium CLI) How the agent calls it MCP tool calls Subprocess via skill Web chatbots (Claude.ai, ChatGPT) Compatible clients Any MCP-capable Any skills-capable API key Required Optional Pay-per-query (x402 / Tempo) Schema discovery Realtime prices, balances, PnL Ad-hoc SQL on 150+ chains One-line install Scripting in shell or CI? Skills run on the allium CLI — use it directly. Machine payments Pay per query. Directly from your agent. No signup. No subscription. USDC on Base — settled in milliseconds, on every call. x402 Manual control Sign each request with EIP-712. Full visibility into the payment flow — best for agents that need fine-grained pricing controls. x402 docs → Tempo MPP Automated Open a payment channel once; the SDK batches and settles. Lowest overhead per call — best for high-volume agents. Tempo MPP docs → Prefer a regular API key? Sign up for an Allium account to get one. Same data, billed against your account. ✓ No signup ✓ No API key required ✓ USDC on Base ✓ Per-request settlement Read the machine-payments overview → The data behind the data Enterprise-grade onchain data, packaged for agents. We're the data infrastructure behind Phantom, Uniswap, Coinbase, and teams building at scale. Pipelines indexing 150+ chains, billions of queries served. AgentHub is that same data, made directly accessible to agents. Sign up for an Allium account → Learn more about Allium → FAQ What is Allium MCP? An MCP (Model Context Protocol) server hosted at mcp.allium.so that exposes Allium's blockchain data — Realtime APIs, Explorer SQL, and Documentation search — as structured tool calls. Any MCP-compatible AI client can use it without writing REST glue code. Which AI clients work with Allium MCP and Skills? MCP : any MCP-capable client — Claude Code, Cursor, Claude Desktop, Claude.ai (Pro/Max/Team/Enterprise), ChatGPT (Plus/Pro/Team), Codex, VS Code (GitHub Copilot), Cline, RooCline, Windsurf, Warp, Gemini CLI, Goose, Zed, Opencode, and more. The installer ( npx @allium-labs/mcp install ) wires up most of them automatically. Skills : any agent that supports the agent-skills format — Claude Code, OpenClaw, Cline, Goose, and others. The skill packet bundles the allium CLI and instructions for invoking it. What's the difference between MCP and Skills? Where the work runs. MCP is a hosted server at mcp.allium.so — your AI client makes structured tool calls over HTTP, no local install. Skills is a local install: npx skills add drops the allium CLI on your machine, and the agent invokes it as a subprocess. If you're using a web chatbot like Claude.ai or ChatGPT, you need MCP — those clients can't run a local CLI. Skills, in turn, lets you script automations and adds machine payments (x402, Tempo) — pay per query in USDC with no API key. Both work across many agents otherwise. What blockchains are supported? 150+ chains across Allium's full data warehouse for Explorer/SQL workloads. The Realtime API covers 20+ high-volume chains (Ethereum, Solana, Base, Arbitrum, Optimism, Polygon, BNB, Avalanche, etc.) with 3–5 second freshness on prices, balances, and activity. How do machine payments work? You can use a regular API key (from app.allium.so/settings/api-keys) — or skip signup entirely and pay per request in USDC on Base. Two protocols are supported: x402 (manual EIP-712 signing for full control) and Tempo MPP (automated payment-channel batching). The Skills install configures payments for you. Is there a free tier? Yes — sign up at app.allium.so to get a free API key with limited daily usage, enough to evaluate. For production, either upgrade your account or use machine payments to pay per call with no plan commitment. Do I need an Allium account? Not if you use machine payments. With x402 or Tempo\n",
"type": "text"
}
]
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-a9712c7cb9b226a5",
"is_error": false,
"tool_kind": "shell"
}›Thinking…
Great — there IS a developer workflow. There's even a "machine payments" path requiring no API key, but that requires USDC on Base — a crypto wallet with funds. I don't have that. And the free API key path requires signing up at app.allium.so/join with a business email — human step.
Let me check the docs for pricing (usage-and-billing, machine-payments) and the Realtime APIs API reference to see what an example would look like. Also check if there's a sandbox/demo key documented anywhere.
Let me fetch:
- https://docs.allium.so/api/developer/machine-payments.md
- https://docs.allium.so/realtime-apis.md
- https://docs.allium.so/app/organization-management/usage-and-billing.md
- rest of llms.txt (API reference section)
sed -n '80,200p' /tmp/llms.txt
## Allium AI
## Allium AI ### Updates - [What's new](https://docs.allium.so/ai/whats-new.md): Releases and improvements to the Allium AI Assistant and Allium MCP, by month. ### Assistant - [Overview](https://docs.allium.so/ai/assistant/overview.md): An AI data analyst built into the Allium App. Ask a question in plain English and get the answer, the SQL, a chart, and a dashboard you can share. - [Capabilities](https://docs.allium.so/ai/assistant/capabilities.md): Everything the Allium AI Assistant can do: answer questions, chart and share results, automate recurring work, and build pipelines and apps. - [Custom skills](https://docs.allium.so/ai/assistant/skills.md): Save a prompt as a skill and run it from the Assistant composer with one keystroke. - [Examples](https://docs.allium.so/ai/assistant/examples.md): End-to-end workflow walkthroughs showing the Assistant's multi-step reasoning. - [Organization memory](https://docs.allium.so/ai/assistant/memory.md): Persistent context shared across all users in your organization. ### MCP - [Overview](https://docs.allium.so/ai/mcp/overview.md): Query blockchain data from Allium Explorer using MCP. - [Plugins](https://docs.allium.so/ai/mcp/plugins.md): Install the allium-analyst plugin to give your agent a query methodology for Allium data. - [Examples](https://docs.allium.so/ai/mcp/examples.md): See what you can build with Allium's MCP Server. #### Tools - [Overview](https://docs.allium.so/ai/mcp/tools-reference/overview.md): Every tool the Allium MCP Server exposes for querying, analyzing, and visualizing blockchain data. - [SQL & queries](https://docs.allium.so/ai/mcp/tools-reference/sql-and-queries.md): Run SQL against Allium's blockchain data, save reusable Explorer queries, and fetch results. - [Knowledge & discovery](https://docs.allium.so/ai/mcp/tools-reference/knowledge.md): Find the right tables, docs, and existing dashboards before writing a single line of SQL. - [Dashboards & sharing](https://docs.allium.so/ai/mcp/tools-reference/dashboards.md): Build Explorer visuals and dashboards from your queries, then publish share and embed links. - [Realtime data](https://docs.allium.so/ai/mcp/tools-reference/realtime.md): Prices, balances, transactions, DeFi positions, holdings PnL, tokens, and assets, without SQL. - [Hyperliquid](https://docs.allium.so/ai/mcp/tools-reference/hyperliquid.md): Query Hyperliquid account, market, order, and orderbook data through Allium's rate-limit-free proxy. - [Skills](https://docs.allium.so/ai/mcp/tools-reference/skills.md): Fetch Allium's own guidance on writing efficient SQL, building dashboards, and picking a product. - [Billing & limits](https://docs.allium.so/ai/mcp/tools-reference/billing-and-limits.md): Which MCP tools consume credits, how much data comes back, and why your tool list may be shorter than the docs. ### Machine Payments - [Overview](https://docs.allium.so/ai/machine-payments/overview.md): Machine payment protocols for AI agents and developers to access Allium's blockchain data with USDC. - [Endpoints & Pricing](https://docs.allium.so/ai/machine-payments/endpoints-pricing.md): All payment-enabled endpoints, pricing, rate limits, and error codes. - [x402](https://docs.allium.so/ai/machine-payments/x402.md): Full manual control over 402 payment negotiation, EIP-712 signing, and USDC settlement. - [Tempo MPP](https://docs.allium.so/ai/machine-payments/tempo-mpp.md): The simplest way to make paid API calls — one function call handles the entire 402 payment flow. - [Agent Skills](https://docs.allium.so/ai/machine-payments/agent-skills.md): Give your AI agent blockchain data access with machine payments in one command. - [Data Catalog (5812 pages)](https://docs.allium.so/_llms/data-catalog.txt): Documentation for Data Catalog. ## API Reference - [API Overview](https://docs.allium.so/api/overview.md): Allium provides REST APIs for realtime and analytics use cases, each designed for different data access patterns. - [Getting Started](https://docs.allium.so/api/getting-started.md) ### Realtime API - [Overview](https://docs.allium.so/api/developer/overview.md): Query realtime blockchain data with fast response times and low latency across 13+ blockchains. - [Data Caveats](https://docs.allium.so/api/developer/data-tips.md): Important information about data formats and conventions used in Allium's Developer APIs. - [Chain & Endpoint Availability](https://docs.allium.so/api/developer/availability.md): Check which endpoints are available for specific chains and which chains are supported by each endpoint. #### Prices - [Overview](https://docs.allium.so/api/developer/prices/overview.md): Realtime and historical token prices calculated from on-chain DEX trades. - [Fetch latest token price](https://docs.allium.so/api/developer/prices/token-latest-price.md): Get the latest price for the given token addresses and chains. - [Fetch token price history](https://docs.allium.so/api/developer/prices/token-price-history.md): Get the price history for the given token and the given time granularity. - [Fetch token price stats](https://docs.allium.so/api/developer/prices/token-price-stats.md): Get tokens price stats like volume, high and low, price and volume change. - [Fetch token price at timestamp](https://docs.allium.so/api/developer/prices/token-price-at-timestamp.md): Price of a token at a given timestamp. #### Tokens - [List tokens](https://docs.allium.so/api/developer/tokens/list-tokens.md): List tokens, optionally sorted by a field. - [Fetch tokens by keyword](https://docs.allium.so/api/developer/tokens/search-tokens.md): Search tokens with a query string. - [Fetch token by address](https://docs.allium.so/api/developer/tokens/get-tokens-by-chain-address.md): Get token details for the given token addresses and chains. - [Fetch fungible token transfers](https://docs.allium.so/api/developer/tokens/transfers.md): Provides transfer history for a single wallet #### Assets - [List assets](https://docs.allium.so/api/developer/assets/list-assets.md): List assets. - [Get assets](https://docs.allium.so/api/developer/assets/get-assets.md): Get assets by ID, slug, or (chain, address). #### Wallets - [Overview](https://docs.allium.so/api/developer/wallets/overview.md): Build wallet-centric applications with realtime balance, transaction, and activity data. - [Fetch transactions](https://docs.allium.so/api/developer/wallets/transactions.md): Get rich transaction activity data for wallets, including activities, asset transfers, and labels. - [Fetch historical fungible token balances](https://docs.allium.so/api/developer/wallets/historical-token-balances.md): Fetch paginated historical fungible token balances for wallet addresses over a requested time range. - [Fetch latest fungible token balances](https://docs.allium.so/api/developer/wallets/latest-token-balances.md): Fetch the latest fungible token balances for wallet addresses across supported chains, optionally including liquidity totals. #### Holdings - [Overview](https://docs.allium.so/api/developer/holdings/overview.md): Realtime and historical portfolio holdings with PnL calculations. - [Fetch holdings history](https://docs.allium.so/api/developer/holdings/holdings-history.md): Get historical aggregated USD holdings for one or more addresses. - [Fetch current PnL by Wallet](https://docs.allium.so/api/developer/holdings/holdings-pnl.md): Get the PnL for a given wallet address. - [Fetch current PnL by Wallet & Token](https://docs.allium.so/api/developer/holdings/holdings-pnl-by-token.md): Get the PnL for a given wallet and token address. - [Fetch historical PnL by Wallet](https://docs.allium.so/api/developer/holdings/holdings-pnl-history.md): Get the Historical PnL for a given wallet address. - [Fetch historical PnL by Wallet & Token](https://docs.allium.so/api/developer/holdings/holdings-pnl-by-token-history.md): Get the Historical PnL for a given wallet address and token address. #### DeFi Positions - [Overview](https://docs.allium.so/api/developer/defi-positions/overview.md): Track realtime DeFi positions across liquidity pools, lending protocols, and staking platforms. - [Fetch DeFi Positions](https://docs.allium.so/api/developer/defi-positions/get-positions.md): Retrieve DeFi positions for a wallet across multiple protocols and chains - [Get NAV](https://docs.allium.so/api/developer/defi-positions/get-nav.md): Get the net asset value (NAV) of DeFi positions for a wallet - [Get Account Health](https://docs.allium.so/api/developer/defi-positions/get-account-health.md): Get health factor and liquidation risk metrics for DeFi lending positions #### Hyperliquid - [Overview](https://docs.allium.so/api/developer/hyperliquid/overview.md): Allium API endpoints for Hyperliquid trading data without rate limits. - [Info](https://docs.allium.so/api/developer/hyperliquid/info.md): Query Hyperliquid account, market, and exchange information by request type through Allium's rate-limit-free proxy. - [Fills](https://docs.allium.so/api/developer/hyperliquid/fills.md): Endpoint providing fills by user address - [Asset contexts](https://docs.allium.so/api/developer/hyperliquid/asset-contexts.md): Hyperliquid's metaAndAssetCtxs with history: mark, oracle and mid prices, funding and open interest for every coin in a dex, one snapshot per minute - [Order history](https://docs.allium.so/api/developer/hyperliquid/order-history.md): Endpoint providing order history by user address - [Order status](https://docs.allium.so/api/developer/hyperliquid/order-status.md): Endpoint providing order status by user address - [User Funding](https://docs.allium.so/api/developer/hyperliquid/user-funding.md): Endpoint providing funding payment history by user address - [User Non-Funding Ledger Updates](https://docs.allium.so/api/developer/hyperliquid/user-non-funding-ledger-updates.md): Endpoint providing non-funding ledger updates by user address - [L4 Orderbook snapshot](https://docs.allium.so/api/developer/hyperliquid/orderbook-snapshot.md): Get complete orderbook snapshot for all pairs. - [Usage Examples](https://docs.allium.so/api/developer/hyperliquid/examples.md): This provides examples of how to use the Hyperliquid APIs on Allium. #### Market Data - [Overview](https://docs.allium.so/api/developer/market-data/overview.md): Unified market data — reference, pricing, and perps primitives across trading venues, blended from on-chain and off-chain sources. - [List markets](https://docs.allium.so/api/developer/market-data/list-markets.md): List and filter tradeable markets across venues and instrument types. - [Search markets](https://docs.allium.so/api/developer/market-data/search-markets.md): Free-text search across markets by ticker, venue, and asset. - [Get market](https://docs.allium.so/api/developer/market-data/get-market.md): Full reference detail for a single market. - [Get latest price](https://docs.allium.so/api/developer/market-data/get-price.md): Latest price snapshot for a market. - [Get OHLCV candles](https://docs.allium.so/api/developer/market-data/get-ohlcv.md): Historical open/high/low/close/volume candles for a market. - [Get funding rates](https://docs.allium.so/api/developer/market-data/get-funding.md): Historical funding rate timeseries for a perpetual market. - [Get open interest](https://docs.allium.so/api/developer/market-data/get-open-interest.md): Historical open interest timeseries for a perpetual market. - [Get liquidations](https://docs.allium.so/api/developer/market-data/get-liquidations.md): Historical liquidations feed for a perpetual market. - [Get asset](https://docs.allium.so/api/developer/market-data/assets.md): Canonical asset metadata, deployments, and the markets an asset trades on. - [Get asset price](https://docs.allium.so/api/developer/market-data/asset-price.md): Multi-venue blended reference price for an asset.
Recorded tool call
{
"type": "tool_call",
"seq": 39,
"ts": "2026-10-15T16:54:39.369Z",
"name": "bash",
"turn": 1,
"input": {
"command": "sed -n '80,200p' /tmp/llms.txt"
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-8225f4355c992943",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 41,
"ts": "2026-10-15T16:54:39.369Z",
"turn": 1,
"output": {
"content": [
{
"text": "## Allium AI\n\n### Updates\n\n- [What's new](https://docs.allium.so/ai/whats-new.md): Releases and improvements to the Allium AI Assistant and Allium MCP, by month.\n\n### Assistant\n\n- [Overview](https://docs.allium.so/ai/assistant/overview.md): An AI data analyst built into the Allium App. Ask a question in plain English and get the answer, the SQL, a chart, and a dashboard you can share.\n- [Capabilities](https://docs.allium.so/ai/assistant/capabilities.md): Everything the Allium AI Assistant can do: answer questions, chart and share results, automate recurring work, and build pipelines and apps.\n- [Custom skills](https://docs.allium.so/ai/assistant/skills.md): Save a prompt as a skill and run it from the Assistant composer with one keystroke.\n- [Examples](https://docs.allium.so/ai/assistant/examples.md): End-to-end workflow walkthroughs showing the Assistant's multi-step reasoning.\n- [Organization memory](https://docs.allium.so/ai/assistant/memory.md): Persistent context shared across all users in your organization.\n\n### MCP\n\n- [Overview](https://docs.allium.so/ai/mcp/overview.md): Query blockchain data from Allium Explorer using MCP.\n- [Plugins](https://docs.allium.so/ai/mcp/plugins.md): Install the allium-analyst plugin to give your agent a query methodology for Allium data.\n- [Examples](https://docs.allium.so/ai/mcp/examples.md): See what you can build with Allium's MCP Server.\n\n#### Tools\n\n- [Overview](https://docs.allium.so/ai/mcp/tools-reference/overview.md): Every tool the Allium MCP Server exposes for querying, analyzing, and visualizing blockchain data.\n- [SQL & queries](https://docs.allium.so/ai/mcp/tools-reference/sql-and-queries.md): Run SQL against Allium's blockchain data, save reusable Explorer queries, and fetch results.\n- [Knowledge & discovery](https://docs.allium.so/ai/mcp/tools-reference/knowledge.md): Find the right tables, docs, and existing dashboards before writing a single line of SQL.\n- [Dashboards & sharing](https://docs.allium.so/ai/mcp/tools-reference/dashboards.md): Build Explorer visuals and dashboards from your queries, then publish share and embed links.\n- [Realtime data](https://docs.allium.so/ai/mcp/tools-reference/realtime.md): Prices, balances, transactions, DeFi positions, holdings PnL, tokens, and assets, without SQL.\n- [Hyperliquid](https://docs.allium.so/ai/mcp/tools-reference/hyperliquid.md): Query Hyperliquid account, market, order, and orderbook data through Allium's rate-limit-free proxy.\n- [Skills](https://docs.allium.so/ai/mcp/tools-reference/skills.md): Fetch Allium's own guidance on writing efficient SQL, building dashboards, and picking a product.\n- [Billing & limits](https://docs.allium.so/ai/mcp/tools-reference/billing-and-limits.md): Which MCP tools consume credits, how much data comes back, and why your tool list may be shorter than the docs.\n\n### Machine Payments\n\n- [Overview](https://docs.allium.so/ai/machine-payments/overview.md): Machine payment protocols for AI agents and developers to access Allium's blockchain data with USDC.\n- [Endpoints & Pricing](https://docs.allium.so/ai/machine-payments/endpoints-pricing.md): All payment-enabled endpoints, pricing, rate limits, and error codes.\n- [x402](https://docs.allium.so/ai/machine-payments/x402.md): Full manual control over 402 payment negotiation, EIP-712 signing, and USDC settlement.\n- [Tempo MPP](https://docs.allium.so/ai/machine-payments/tempo-mpp.md): The simplest way to make paid API calls — one function call handles the entire 402 payment flow.\n- [Agent Skills](https://docs.allium.so/ai/machine-payments/agent-skills.md): Give your AI agent blockchain data access with machine payments in one command.\n\n- [Data Catalog (5812 pages)](https://docs.allium.so/_llms/data-catalog.txt): Documentation for Data Catalog.\n\n## API Reference\n\n- [API Overview](https://docs.allium.so/api/overview.md): Allium provides REST APIs for realtime and analytics use cases, each designed for different data access patterns.\n- [Getting Started](https://docs.allium.so/api/getting-started.md)\n\n### Realtime API\n\n- [Overview](https://docs.allium.so/api/developer/overview.md): Query realtime blockchain data with fast response times and low latency across 13+ blockchains.\n- [Data Caveats](https://docs.allium.so/api/developer/data-tips.md): Important information about data formats and conventions used in Allium's Developer APIs.\n- [Chain & Endpoint Availability](https://docs.allium.so/api/developer/availability.md): Check which endpoints are available for specific chains and which chains are supported by each endpoint.\n\n#### Prices\n\n- [Overview](https://docs.allium.so/api/developer/prices/overview.md): Realtime and historical token prices calculated from on-chain DEX trades.\n- [Fetch latest token price](https://docs.allium.so/api/developer/prices/token-latest-price.md): Get the latest price for the given token addresses and chains.\n- [Fetch token price history](https://docs.allium.so/api/developer/prices/token-price-history.md): Get the price history for the given token and the given time granularity.\n- [Fetch token price stats](https://docs.allium.so/api/developer/prices/token-price-stats.md): Get tokens price stats like volume, high and low, price and volume change.\n- [Fetch token price at timestamp](https://docs.allium.so/api/developer/prices/token-price-at-timestamp.md): Price of a token at a given timestamp.\n\n#### Tokens\n\n- [List tokens](https://docs.allium.so/api/developer/tokens/list-tokens.md): List tokens, optionally sorted by a field.\n- [Fetch tokens by keyword](https://docs.allium.so/api/developer/tokens/search-tokens.md): Search tokens with a query string.\n- [Fetch token by address](https://docs.allium.so/api/developer/tokens/get-tokens-by-chain-address.md): Get token details for the given token addresses and chains.\n- [Fetch fungible token transfers](https://docs.allium.so/api/developer/tokens/transfers.md): Provides transfer history for a single wallet\n\n#### Assets\n\n- [List assets](https://docs.allium.so/api/developer/assets/list-assets.md): List assets.\n- [Get assets](https://docs.allium.so/api/developer/assets/get-assets.md): Get assets by ID, slug, or (chain, address).\n\n#### Wallets\n\n- [Overview](https://docs.allium.so/api/developer/wallets/overview.md): Build wallet-centric applications with realtime balance, transaction, and activity data.\n- [Fetch transactions](https://docs.allium.so/api/developer/wallets/transactions.md): Get rich transaction activity data for wallets, including activities, asset transfers, and labels.\n- [Fetch historical fungible token balances](https://docs.allium.so/api/developer/wallets/historical-token-balances.md): Fetch paginated historical fungible token balances for wallet addresses over a requested time range.\n- [Fetch latest fungible token balances](https://docs.allium.so/api/developer/wallets/latest-token-balances.md): Fetch the latest fungible token balances for wallet addresses across supported chains, optionally including liquidity totals.\n\n#### Holdings\n\n- [Overview](https://docs.allium.so/api/developer/holdings/overview.md): Realtime and historical portfolio holdings with PnL calculations.\n- [Fetch holdings history](https://docs.allium.so/api/developer/holdings/holdings-history.md): Get historical aggregated USD holdings for one or more addresses.\n- [Fetch current PnL by Wallet](https://docs.allium.so/api/developer/holdings/holdings-pnl.md): Get the PnL for a given wallet address.\n- [Fetch current PnL by Wallet & Token](https://docs.allium.so/api/developer/holdings/holdings-pnl-by-token.md): Get the PnL for a given wallet and token address.\n- [Fetch historical PnL by Wallet](https://docs.allium.so/api/developer/holdings/holdings-pnl-history.md): Get the Historical PnL for a given wallet address.\n- [Fetch historical PnL by Wallet & Token](https://docs.allium.so/api/developer/holdings/holdings-pnl-by-token-history.md): Get the Historical PnL for a given wallet address and token address.\n\n#### DeFi Positions\n\n- [Overview](https://docs.allium.so/api/developer/defi-positions/overview.md): Track realtime DeFi positions across liquidity pools, lending protocols, and staking platforms.\n- [Fetch DeFi Positions](https://docs.allium.so/api/developer/defi-positions/get-positions.md): Retrieve DeFi positions for a wallet across multiple protocols and chains\n- [Get NAV](https://docs.allium.so/api/developer/defi-positions/get-nav.md): Get the net asset value (NAV) of DeFi positions for a wallet\n- [Get Account Health](https://docs.allium.so/api/developer/defi-positions/get-account-health.md): Get health factor and liquidation risk metrics for DeFi lending positions\n\n#### Hyperliquid\n\n- [Overview](https://docs.allium.so/api/developer/hyperliquid/overview.md): Allium API endpoints for Hyperliquid trading data without rate limits.\n- [Info](https://docs.allium.so/api/developer/hyperliquid/info.md): Query Hyperliquid account, market, and exchange information by request type through Allium's rate-limit-free proxy.\n- [Fills](https://docs.allium.so/api/developer/hyperliquid/fills.md): Endpoint providing fills by user address\n- [Asset contexts](https://docs.allium.so/api/developer/hyperliquid/asset-contexts.md): Hyperliquid's metaAndAssetCtxs with history: mark, oracle and mid prices, funding and open interest for every coin in a dex, one snapshot per minute\n- [Order history](https://docs.allium.so/api/developer/hyperliquid/order-history.md): Endpoint providing order history by user address\n- [Order status](https://docs.allium.so/api/developer/hyperliquid/order-status.md): Endpoint providing order status by user address\n- [User Funding](https://docs.allium.so/api/developer/hyperliquid/user-funding.md): Endpoint providing funding payment history by user address\n- [User Non-Funding Ledger Updates](https://docs.allium.so/api/developer/hyperliquid/user-non-funding-ledger-updates.md): Endpoint providing non-funding ledger updates by user address\n- [L4 Orderbook snapshot](https://docs.allium.so/api/developer/hyperliquid/orderbook-snapshot.md): Get complete orderbook snapshot for all pairs.\n- [Usage Examples](https://docs.allium.so/api/developer/hyperliquid/examples.md): This provides examples of how to use the Hyperliquid APIs on Allium.\n\n#### Market Data\n\n- [Overview](https://docs.allium.so/api/developer/market-data/overview.md): Unified market data — reference, pricing, and perps primitives across trading venues, blended from on-chain and off-chain sources.\n- [List markets](https://docs.allium.so/api/developer/market-data/list-markets.md): List and filter tradeable markets across venues and instrument types.\n- [Search markets](https://docs.allium.so/api/developer/market-data/search-markets.md): Free-text search across markets by ticker, venue, and asset.\n- [Get market](https://docs.allium.so/api/developer/market-data/get-market.md): Full reference detail for a single market.\n- [Get latest price](https://docs.allium.so/api/developer/market-data/get-price.md): Latest price snapshot for a market.\n- [Get OHLCV candles](https://docs.allium.so/api/developer/market-data/get-ohlcv.md): Historical open/high/low/close/volume candles for a market.\n- [Get funding rates](https://docs.allium.so/api/developer/market-data/get-funding.md): Historical funding rate timeseries for a perpetual market.\n- [Get open interest](https://docs.allium.so/api/developer/market-data/get-open-interest.md): Historical open interest timeseries for a perpetual market.\n- [Get liquidations](https://docs.allium.so/api/developer/market-data/get-liquidations.md): Historical liquidations feed for a perpetual market.\n- [Get asset](https://docs.allium.so/api/developer/market-data/assets.md): Canonical asset metadata, deployments, and the markets an asset trades on.\n- [Get asset price](https://docs.allium.so/api/developer/market-data/asset-price.md): Multi-venue blended reference price for an asset.\n",
"type": "text"
}
]
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-8225f4355c992943",
"is_error": false,
"tool_kind": "shell"
}for p in api/developer/machine-payments realtime-apis app/organization-management/usage-and-billing; do echo "######## $p"; timeout 25 curl -sSL "https://docs.allium.so/$p.md" | head -120; done
######## api/developer/machine-payments
######## api/developer/machine-payments
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.allium.so/llms.txt
> Use this file to discover all available pages before exploring further.
# Machine Payments
> Pay-per-call blockchain data access with USDC — no API key, no registration, no subscription.
Machine payments let AI agents and developers pay per API call with USDC to access Allium's blockchain data. No API key, no registration, no subscription — just a wallet and USDC.
<CardGroup cols={2}>
<Card title="No API Key" icon="key">
No registration or key management. Your wallet is your identity.
</Card>
<Card title="Pay Per Call" icon="credit-card">
Only pay for what you use. Prices start at \$0.001 per request.
</Card>
<Card title="Agent-Native" icon="robot">
Built for AI agents — autonomous payments with no human in the loop.
</Card>
<Card title="Gasless Payments" icon="coins">
Allium handles onchain settlement. Users only need USDC, not ETH.
</Card>
</CardGroup>
## How It Works
Both protocols use HTTP status code `402 Payment Required` to negotiate payments inline with API requests. The difference is how much your client handles automatically.
<Steps>
<Step title="Send request">
Make a normal API request to any payment-enabled endpoint.
</Step>
<Step title="Receive 402">
The server responds with `402 Payment Required` and payment options.
</Step>
<Step title="Sign and pay">
Your client signs a USDC payment authorization and retries the request.
</Step>
<Step title="Get data">
Payment confirmed — you receive your data with a `200` response.
</Step>
</Steps>
## Tempo MPP
Tempo Machine Payment Protocol is the simplest way to make paid API calls. The `Client` wrapper handles the entire 402 negotiation, signing, and retry flow — you just make requests as normal.
```python theme={null}
from mpp.client import Client
from mpp.methods.tempo import tempo, TempoAccount, ChargeIntent
from mpp.methods.tempo._defaults import TESTNET_RPC_URL, TESTNET_CHAIN_ID
import os
account = TempoAccount.from_key(os.getenv("YOUR_PRIVATE_KEY"))
async with Client(methods=[
tempo(
account=account,
rpc_url=TESTNET_RPC_URL,
intents={"charge": ChargeIntent()},
)
]) as client:
response = await client.post(
"https://agents.allium.so/api/v1/developer/prices",
json=[{"chain": "solana", "token_address": "So11111111111111111111111111111111111111112"}],
)
print(response.json())
```
<Card title="Tempo MPP" icon="bolt" href="/ai/machine-payments/tempo-mpp">
Full setup guide, supported networks, and implementation details
</Card>
## x402
x402 gives you full manual control over the payment flow. Your client receives the 402 response, constructs EIP-712 typed data, signs it via a wallet provider like [Privy](https://dashboard.privy.io), and retries with the payment signature attached.
<Card title="x402" icon="credit-card" href="/ai/machine-payments/x402">
Full setup guide with Privy wallet integration, EIP-712 signing, and implementation
</Card>
## Agent Integration
Don't want to write any payment code? Install pre-built agent skills and let your AI agent handle everything:
```bash theme={null}
npx skills add allium-labs/skills --yes
```
<Card title="Agent Skills" icon="wand-magic-sparkles" href="/ai/machine-payments/agent-skills">
Set up machine payments with AI agents in one command
</Card>
## All Endpoints & Pricing
<Card title="Endpoints & Pricing" icon="code" href="/ai/machine-payments/endpoints-pricing">
All payment-enabled endpoints, pricing, rate limits, and error codes
</Card>
######## realtime-apis
<!DOCTYPE html><html lang="en" class="inter_1d81deff-module__CYM0aG__variable papermono_89c757f2-module__6aS5zq__variable dark" data-banner-state="visible" data-assistant-state="closed" data-page-mode="none" data-current-path="/"><head><script>
(function(){
var RE = /^https?:\/\/leaves\.mintlify\.com/i;
var to = location.origin + "/_leaves";
var of = window.fetch;
window.fetch = function(input, init){
try {
if (typeof input === 'string' && RE.test(input)) input = input.replace(RE, to);
else if (input && input.url && RE.test(input.url)) input = new Request(input.url.replace(RE, to), input);
} catch(e){}
return of.call(this, input, init);
};
var oo = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function(m, u){
try { if (typeof u === 'string' && RE.test(u)) u = u.replace(RE, to); } catch(e){}
return oo.apply(this, [m, u].concat([].slice.call(arguments, 2)));
};
})();
</script><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover"/><link rel="preload" href="/mintlify-assets/_next/static/media/83afe278b6a6bb3c.p.3a6ba036.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/mintlify-assets/_next/static/media/PaperMono_Variable.p.4fb029ee.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/mintlify-assets/_next/static/media/f67ad414ed34149c.p.84166d94.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="https://mintcdn.com/allium-e770e2b7/Pho1-XYHfgCpfeG_/logo/light.svg?fit=max&auto=format&n=Pho1-XYHfgCpfeG_&q=85&s=1d06acf7cdf656da45ac99716ca34da4"/><link rel="preload" as="image" href="https://mintcdn.com/allium-e770e2b7/Pho1-XYHfgCpfeG_/logo/dark.svg?fit=max&auto=format&n=Pho1-XYHfgCpfeG_&q=85&s=d993d7534560ec93bcb6c79910a9f1c2"/><link rel="stylesheet" href="/mintlify-assets/_next/static/chunks/1ddb69276dca9f27.css?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX" data-precedence="next"/><link rel="stylesheet" href="/mintlify-assets/_next/static/chunks/2b0d21c764299abd.css?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX" data-precedence="next"/><style data-precedence="base-ui:low" data-href="base-ui-disable-scrollbar">.base-ui-disable-scrollbar{scrollbar-width:none}.base-ui-disable-scrollbar::-webkit-scrollbar{display:none}</style><link rel="preload" as="script" fetchPriority="low" href="/mintlify-assets/_next/static/chunks/3fcb76f539c93820.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX"/><script src="/mintlify-assets/_next/static/chunks/44795504c795ca32.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX" async=""></script><script src="/mintlify-assets/_next/static/chunks/ec2f9fba11ab1afd.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX" async=""></script><script src="/mintlify-assets/_next/static/chunks/896d8c6b2a391d2d.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX" async=""></script><script src="/mintlify-assets/_next/static/chunks/ba13c13687b0ab63.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX" async=""></script><script src="/mintlify-assets/_next/static/chunks/turbopack-46744d8c6619bf1f.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX" async=""></script><script src="/mintlify-assets/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX" async=""></script><script src="/mintlify-assets/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX" async=""></script><script src="/mintlify-assets/_next/static/chunks/27db858bb43d4f0e.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX" async=""></script><script src="/mintlify-assets/_next/static/chunks/d8fa9fbe6fc24e2c.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX" async=""></script><script src="/mintlify-assets/_next/static/chunks/52ee50517ed23d08.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX" async=""></script><script src="/mintlify-assets/_next/static/chunks/8d0901e40ed4b058.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX" async=""></script><script src="/mintlify-assets/_next/static/chunks/0345977612e8a8fc.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX" async=""></script><script src="/mintlify-assets/_next/static/chunks/41cd25f9f5103afc.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX" async=""></script><script src="/mintlify-assets/_next/static/chunks/d3a642b23f31e8e2.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX" async=""></script><script src="/mintlify-assets/_next/static/chunks/56889c9400f2bd44.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX" async=""></script><script src="/mintlify-assets/_next/static/chunks/b2483d01d47db298.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX" async=""></script><script src="/mintlify-assets/_next/static/chunks/3f8f2653ff1ad14e.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX" async=""></script><script src="/mintlify-assets/_next/static/chunks/b241678460c3859c.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX" async=""></script><script src="/mintlify-assets/_next/static/chunks/8a98aeb9285690d6.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX" async=""></script><script src="/mintlify-assets/_next/static/chunks/d8de9e3010c1c0a2.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX" async=""></script><script src="/mintlify-assets/_next/static/chunks/0e1fc6a92afa30b8.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX" async=""></script><script src="/mintlify-assets/_next/static/chunks/ac1d672f8544440f.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX" async=""></script><script src="/mintlify-assets/_next/static/chunks/ad7419efb0e48aa3.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX" async=""></script><script src="/mintlify-assets/_next/static/chunks/a15bd5af0388fce3.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX" async=""></script><script src="/mintlify-assets/_next/static/chunks/4f6f997a3b8dee89.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX" async=""></script><script src="/mintlify-assets/_next/static/chunks/c7d45773caa7629c.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX" async=""></script><script src="/mintlify-assets/_next/static/chunks/b8a669933ff9e7c6.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX" async=""></script><script src="/mintlify-assets/_next/static/chunks/f37c75cd3eae8e9c.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX" async=""></script><script src="/mintlify-assets/_next/static/chunks/7fb7515f83899170.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX" async=""></script><script src="/mintlify-assets/_next/static/chunks/28d3baae254fd8bc.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX" async=""></script><script src="/mintlify-assets/_next/static/chunks/c18b0a8de3827f70.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX" async=""></script><script src="/mintlify-assets/_next/static/chunks/2f482bcd3294a910.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX" async=""></script><script src="/mintlify-assets/_next/static/chunks/7e929edc119ce881.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX" async=""></script><script src="/mintlify-assets/_next/static/chunks/e7ab3f319130be21.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX" async=""></script><script src="/mintlify-assets/_next/static/chunks/67122d2cabb5f5fb.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX" async=""></script><script src="/mintlify-assets/_next/static/chunks/6dd0e37ab76ddb7e.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX" async=""></script><script src="/mintlify-assets/_next/static/chunks/f0b6f1ea823c8a43.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX" async=""></script><link rel="preload" href="https://www.googletagmanager.com/gtag/js?id=G-5SHKBP7BR1" as="script"/><link rel="preload" href="/mintlify-assets/_next/static/chunks/ed45ca9fc4fad2f8.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX" as="script" fetchPriority="low"/><link rel="preload" href="/mintlify-assets/_next/static/chunks/5917258e888b4dff.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX" as="script" fetchPriority="low"/><link rel="preload" href="/mintlify-assets/_next/static/chunks/c18d87551163d4f9.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX" as="script" fetchPriority="low"/><link rel="preload" href="/mintlify-assets/_next/static/media/katex/0.16.47/katex.min.css" as="style"/><title>Overview - Allium Documentation Hub</title><meta name="description" content="Query realtime blockchain data with fast response times and low latency across 13+ blockchains."/><meta name="application-name" content="Allium Documentation Hub"/><meta name="generator" content="Mintlify"/><meta name="msapplication-config" content="/mintlify-assets/_mintlify/favicons/allium-e770e2b7/F-YBneyl4L8wIFbs/_generated/favicon/browserconfig.xml"/><meta name="apple-mobile-web-app-title" content="Allium Documentation Hub"/><meta name="msapplication-TileColor" content="#be59c0"/><link rel="canonical" href="https://docs.allium.so/api/developer/overview"/><link rel="alternate" type="application/xml" href="/sitemap.xml"/><link rel="alternate" type="text/markdown" href="/api/developer/overview.md"/><meta property="og:title" content="Overview - Allium Documentation Hub"/><meta property="og:description" content="Query realtime blockchain data with fast response times and low latency across 13+ blockchains."/><meta property="og:url" content="https://docs.allium.so/api/developer/overview"/><meta property="og:site_name" content="Allium Documentation Hub"/><meta property="og:image" content="https://allium-e770e2b7.mintlify.io/_mintlify/api/og/v2?division=Realtime+API&title=Overview&description=Query+realtime+blockchain+data+with+fast+response+times+and+low+latency+across+13%2B+blockchains.&theme=0f341d5588624e3fa6bc8ae7&signature=4ec70a2cfd0fa4a0c5838d47d2cdde77aa7ee4f331e96a757fbd53a8ca5a714e"/><meta property="og:image:width" content="1200"/><meta property="og:image:height" content="630"/><meta property="og:type" content="website"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:title" content="Overview - Allium Documentation Hub"/><meta name="twitter:description" content="Query realtime blockchain data with fast response times and low latency across 13+ blockchains."/><meta name="twitter:image" content="https://allium-e770e2b7.mintlify.io/_mintlify/api/og/v2?division=Realtime+API&title=Overview&description=Query+realtime+blockchain+data+with+fast+response+times+and+low+latency+across+13%2B+blockchains.&theme=0f341d5588624e3fa6bc8ae7&signature=4ec70a2cfd0fa4a0c5838d47d2cdde77aa7ee4f331e96a757fbd53a8ca5a714e"/><meta name="twitter:image:width" content="1200"/><meta name="twitter:image:height" content="630"/><link rel="icon" href="/mintlify-assets/_mintlify/favicons/allium-e770e2b7/F-YBneyl4L8wIFbs/_generated/favicon/android-chrome-192x192.png" type="image/png" sizes="192x192" media="(prefers-color-scheme: light)"/><link rel="apple-touch-icon" href="/mintlify-assets/_mintlify/favicons/allium-e770e2b7/F-YBneyl4L8wIFbs/_generated/favicon/apple-touch-icon.png" type="image/png" sizes="180x180"/><link rel="icon" href="/mintlify-assets/_mintlify/favicons/allium-e770e2b7/F-YBneyl4L8wIFbs/_generated/favicon/favicon-16x16.png" type="image/png" sizes="16x16" media="(prefers-color-scheme: light)"/><link rel="icon" href="/mintlify-assets/_mintlify/favicons/allium-e770e2b7/F-YBneyl4L8wIFbs/_generated/favicon/favicon-32x32.png" type="image/png" sizes="32x32" media="(prefers-color-scheme: light)"/><link rel="shortcut icon" href="/mintlify-assets/_mintlify/favicons/allium-e770e2b7/F-YBneyl4L8wIFbs/_generated/favicon/favicon.ico" type="image/x-icon" media="(prefers-color-scheme: light)"/><link rel="icon" href="/mintlify-assets/_mintlify/favicons/allium-e770e2b7/F-YBneyl4L8wIFbs/_generated/favicon-dark/android-chrome-192x192.png" type="image/png" sizes="192x192" media="(prefers-color-scheme: dark)"/><link rel="icon" href="/mintlify-assets/_mintlify/favicons/allium-e770e2b7/F-YBneyl4L8wIFbs/_generated/favicon-dark/favicon-16x16.png" type="image/png" sizes="16x16" media="(prefers-color-scheme: dark)"/><link rel="icon" href="/mintlify-assets/_mintlify/favicons/allium-e770e2b7/F-YBneyl4L8wIFbs/_generated/favicon-dark/favicon-32x32.png" type="image/png" sizes="32x32" media="(prefers-color-scheme: dark)"/><link rel="shortcut icon" href="/mintlify-assets/_mintlify/favicons/allium-e770e2b7/F-YBneyl4L8wIFbs/_generated/favicon-dark/favicon.ico" type="image/x-icon" media="(prefers-color-scheme: dark)"/><script type="text/javascript">!function(){var b="";
function a(p){if(p==null)return"/";p=""+p;if(""===p)return"/";return"/"===p.charAt(0)?p:"/"+p}
function u(p){if(p==null)return p;p=""+p;if(!p||p.charAt(p.length-1)==="/")return p.slice(0,-1);return p}
function i(p){if(p==null)return p;p=""+p;if(6<=p.length&&p.substring(p.length-6)==="/index")return p.substring(0,p.length-6);if("index"===p)return"";return p}
var p=(location.pathname||"").split("?")[0].split("#")[0]||"";
if(b)if(p===b)p="";else if(0===p.indexOf(b+"/"))p=p.substring(b.length);
p=a(p);p=u(p);p=i(p);p=""===p||"index"===p?"/":a(p);
document.documentElement.setAttribute("data-current-path",p);
}();</script><script type="text/javascript">if((' '+document.cookie).indexOf(' mintlify_end_user_session_hint=1')!==-1)document.documentElement.setAttribute('data-auth-pending','nav user');</script><script type="text/javascript">(() => {
const isIOS =
/iP(hone|ad|od)/.test(navigator.userAgent) ||
(/Macintosh/.test(navigator.userAgent) && navigator.maxTouchPoints > 1);
if (!isIOS) return;
const apply = () => {
for (const meta of document.querySelectorAll('meta[name="viewport"]')) {
const content = meta.getAttribute('content') || '';
if (!content.includes('maximum-scale')) {
meta.setAttribute('content', content + ', maximum-scale=1');
}
}
};
apply();
new MutationObserver(apply).observe(document.head, {
childList: true,
subtree: true,
attributes: true,
attributeFilter: ['content'],
});
})();</script><script type="text/javascript">!function(){
function read(){try{
var e=performance.getEntriesByType?performance.getEntriesByType("navigation"):[];
var st=(e[0]&&e[0].serverTiming)||[];
var g={};
for(var i=0;i<st.length;i++){var n=st[i].name,d=st[i].description;if(!d)continue;try{d=decodeURIComponent(d)}catch(x){}
if(n==="country")g.country=d;else if(n==="region")g.region=d;else if(n==="continent")g.continent=d;}
var w=window;w.mintlify=w.mintlify||{};w.mintlify.geo=g;
}catch(x){}}
read();document.addEventListener("DOMContentLoaded",read);
}();</script><script type="text/javascript">!function(){try{
var w=window;w.mintlify=w.mintlify||{};
var q=w.mintlify.__apiPlaygroundInputsQueue;
if(!Array.isArray(q)){q=[];w.mintlify.__apiPlaygroundInputsQueue=q;}
w.mintlify.api=w.mintlify.api||{};
w.mintlify.api.playground=w.mintlify.api.playground||{};
if(typeof w.mintlify.api.playground.setServerVariables!=="function"){
w.mintlify.api.playground.setServerVariables=function(v){q.push({type:"set",variables:v});};
}
if(typeof w.mintlify.api.playground.clearServerVariables!=="function"){
w.mintlify.api.playground.clearServerVariables=function(){q.push({type:"clear"});};
}
}catch(e){}}();</script><script type="text/javascript">(function(){
if(typeof CSS==="undefined"||!("registerProperty" in CSS))return;
if(CSS.supports&&CSS.supports("-webkit-backdrop-filter:none"))return;
var n=["--scroll-area-overflow-x-start","--scroll-area-overflow-x-end","--scroll-area-overflow-y-start","--scroll-area-overflow-y-end"];
var d={"syntax":"<length>","inherits":false,"initialValue":"0px"};
for(var i=0;i<n.length;i++){try{CSS.registerProperty({name:n[i],syntax:d.syntax,inherits:d.inherits,initialValue:d.initialValue})}catch(e){}}
})();</script><script type="text/javascript">(function(a,b){try{let c=document.querySelector("div#banner")?.innerText;if(c){for(let d=0;d<localStorage.length;d++){let e=localStorage.key(d);if(e?.endsWith(a)&&localStorage.getItem(e)===c)return void document.documentElement.setAttribute(b,"hidden")}document.documentElement.setAttribute(b,"visible");return}for(let c=0;c<localStorage.length;c++){let d=localStorage.key(c);if(d?.endsWith(a)&&localStorage.getItem(d))return void document.documentElement.setAttribute(b,"hidden")}document.documentElement.setAttribute(b,"visible")}catch(a){document.documentElement.setAttribute(b,"hidden")}})(
"bannerDismissed",
"data-banner-state",
)</script><script src="/mintlify-assets/_next/static/chunks/a6dad97d9634a72d.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX" noModule=""></script></head><body class="antialiased"><div hidden=""><!--$--><!--/$--></div><scriptShowing the first 20,000 characters. Full output is available in raw details.
Recorded tool call
{
"type": "tool_call",
"seq": 40,
"ts": "2026-10-15T16:54:39.369Z",
"name": "bash",
"turn": 1,
"input": {
"command": "for p in api/developer/machine-payments realtime-apis app/organization-management/usage-and-billing; do echo \"######## $p\"; timeout 25 curl -sSL \"https://docs.allium.so/$p.md\" | head -120; done"
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-899e42e7ecbef56b",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 42,
"ts": "2026-10-15T16:54:42.680Z",
"turn": 1,
"output": {
"content": [
{
"text": "######## api/developer/machine-payments\n> ## Documentation Index\n> Fetch the complete documentation index at: https://docs.allium.so/llms.txt\n> Use this file to discover all available pages before exploring further.\n\n# Machine Payments\n\n> Pay-per-call blockchain data access with USDC — no API key, no registration, no subscription.\n\nMachine payments let AI agents and developers pay per API call with USDC to access Allium's blockchain data. No API key, no registration, no subscription — just a wallet and USDC.\n\n<CardGroup cols={2}>\n <Card title=\"No API Key\" icon=\"key\">\n No registration or key management. Your wallet is your identity.\n </Card>\n\n <Card title=\"Pay Per Call\" icon=\"credit-card\">\n Only pay for what you use. Prices start at \\$0.001 per request.\n </Card>\n\n <Card title=\"Agent-Native\" icon=\"robot\">\n Built for AI agents — autonomous payments with no human in the loop.\n </Card>\n\n <Card title=\"Gasless Payments\" icon=\"coins\">\n Allium handles onchain settlement. Users only need USDC, not ETH.\n </Card>\n</CardGroup>\n\n## How It Works\n\nBoth protocols use HTTP status code `402 Payment Required` to negotiate payments inline with API requests. The difference is how much your client handles automatically.\n\n<Steps>\n <Step title=\"Send request\">\n Make a normal API request to any payment-enabled endpoint.\n </Step>\n\n <Step title=\"Receive 402\">\n The server responds with `402 Payment Required` and payment options.\n </Step>\n\n <Step title=\"Sign and pay\">\n Your client signs a USDC payment authorization and retries the request.\n </Step>\n\n <Step title=\"Get data\">\n Payment confirmed — you receive your data with a `200` response.\n </Step>\n</Steps>\n\n## Tempo MPP\n\nTempo Machine Payment Protocol is the simplest way to make paid API calls. The `Client` wrapper handles the entire 402 negotiation, signing, and retry flow — you just make requests as normal.\n\n```python theme={null}\nfrom mpp.client import Client\r\nfrom mpp.methods.tempo import tempo, TempoAccount, ChargeIntent\r\nfrom mpp.methods.tempo._defaults import TESTNET_RPC_URL, TESTNET_CHAIN_ID\r\nimport os\r\n\r\naccount = TempoAccount.from_key(os.getenv(\"YOUR_PRIVATE_KEY\"))\r\n\r\nasync with Client(methods=[\r\n tempo(\r\n account=account,\r\n rpc_url=TESTNET_RPC_URL,\r\n intents={\"charge\": ChargeIntent()},\r\n )\r\n]) as client:\r\n response = await client.post(\r\n \"https://agents.allium.so/api/v1/developer/prices\",\r\n json=[{\"chain\": \"solana\", \"token_address\": \"So11111111111111111111111111111111111111112\"}],\r\n )\r\n print(response.json())\n```\n\n<Card title=\"Tempo MPP\" icon=\"bolt\" href=\"/ai/machine-payments/tempo-mpp\">\n Full setup guide, supported networks, and implementation details\n</Card>\n\n## x402\n\nx402 gives you full manual control over the payment flow. Your client receives the 402 response, constructs EIP-712 typed data, signs it via a wallet provider like [Privy](https://dashboard.privy.io), and retries with the payment signature attached.\n\n<Card title=\"x402\" icon=\"credit-card\" href=\"/ai/machine-payments/x402\">\n Full setup guide with Privy wallet integration, EIP-712 signing, and implementation\n</Card>\n\n## Agent Integration\n\nDon't want to write any payment code? Install pre-built agent skills and let your AI agent handle everything:\n\n```bash theme={null}\nnpx skills add allium-labs/skills --yes\n```\n\n<Card title=\"Agent Skills\" icon=\"wand-magic-sparkles\" href=\"/ai/machine-payments/agent-skills\">\n Set up machine payments with AI agents in one command\n</Card>\n\n## All Endpoints & Pricing\n\n<Card title=\"Endpoints & Pricing\" icon=\"code\" href=\"/ai/machine-payments/endpoints-pricing\">\n All payment-enabled endpoints, pricing, rate limits, and error codes\n</Card>\n######## realtime-apis\n<!DOCTYPE html><html lang=\"en\" class=\"inter_1d81deff-module__CYM0aG__variable papermono_89c757f2-module__6aS5zq__variable dark\" data-banner-state=\"visible\" data-assistant-state=\"closed\" data-page-mode=\"none\" data-current-path=\"/\"><head><script>\n (function(){\n var RE = /^https?:\\/\\/leaves\\.mintlify\\.com/i;\n var to = location.origin + \"/_leaves\";\n var of = window.fetch;\n window.fetch = function(input, init){\n try {\n if (typeof input === 'string' && RE.test(input)) input = input.replace(RE, to);\n else if (input && input.url && RE.test(input.url)) input = new Request(input.url.replace(RE, to), input);\n } catch(e){}\n return of.call(this, input, init);\n };\n var oo = XMLHttpRequest.prototype.open;\n XMLHttpRequest.prototype.open = function(m, u){\n try { if (typeof u === 'string' && RE.test(u)) u = u.replace(RE, to); } catch(e){}\n return oo.apply(this, [m, u].concat([].slice.call(arguments, 2)));\n };\n })();\n</script><meta charSet=\"utf-8\"/><meta name=\"viewport\" content=\"width=device-width, initial-scale=1, viewport-fit=cover\"/><link rel=\"preload\" href=\"/mintlify-assets/_next/static/media/83afe278b6a6bb3c.p.3a6ba036.woff2\" as=\"font\" crossorigin=\"\" type=\"font/woff2\"/><link rel=\"preload\" href=\"/mintlify-assets/_next/static/media/PaperMono_Variable.p.4fb029ee.woff2\" as=\"font\" crossorigin=\"\" type=\"font/woff2\"/><link rel=\"preload\" href=\"/mintlify-assets/_next/static/media/f67ad414ed34149c.p.84166d94.woff2\" as=\"font\" crossorigin=\"\" type=\"font/woff2\"/><link rel=\"preload\" as=\"image\" href=\"https://mintcdn.com/allium-e770e2b7/Pho1-XYHfgCpfeG_/logo/light.svg?fit=max&auto=format&n=Pho1-XYHfgCpfeG_&q=85&s=1d06acf7cdf656da45ac99716ca34da4\"/><link rel=\"preload\" as=\"image\" href=\"https://mintcdn.com/allium-e770e2b7/Pho1-XYHfgCpfeG_/logo/dark.svg?fit=max&auto=format&n=Pho1-XYHfgCpfeG_&q=85&s=d993d7534560ec93bcb6c79910a9f1c2\"/><link rel=\"stylesheet\" href=\"/mintlify-assets/_next/static/chunks/1ddb69276dca9f27.css?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX\" data-precedence=\"next\"/><link rel=\"stylesheet\" href=\"/mintlify-assets/_next/static/chunks/2b0d21c764299abd.css?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX\" data-precedence=\"next\"/><style data-precedence=\"base-ui:low\" data-href=\"base-ui-disable-scrollbar\">.base-ui-disable-scrollbar{scrollbar-width:none}.base-ui-disable-scrollbar::-webkit-scrollbar{display:none}</style><link rel=\"preload\" as=\"script\" fetchPriority=\"low\" href=\"/mintlify-assets/_next/static/chunks/3fcb76f539c93820.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX\"/><script src=\"/mintlify-assets/_next/static/chunks/44795504c795ca32.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/ec2f9fba11ab1afd.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/896d8c6b2a391d2d.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/ba13c13687b0ab63.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/turbopack-46744d8c6619bf1f.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/0ea0e179f06dc225.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/1e7a188add93a653.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/27db858bb43d4f0e.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/d8fa9fbe6fc24e2c.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/52ee50517ed23d08.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/8d0901e40ed4b058.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/0345977612e8a8fc.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/41cd25f9f5103afc.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/d3a642b23f31e8e2.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/56889c9400f2bd44.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/b2483d01d47db298.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/3f8f2653ff1ad14e.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/b241678460c3859c.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/8a98aeb9285690d6.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/d8de9e3010c1c0a2.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/0e1fc6a92afa30b8.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/ac1d672f8544440f.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/ad7419efb0e48aa3.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/a15bd5af0388fce3.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/4f6f997a3b8dee89.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/c7d45773caa7629c.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/b8a669933ff9e7c6.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/f37c75cd3eae8e9c.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/7fb7515f83899170.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/28d3baae254fd8bc.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/c18b0a8de3827f70.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/2f482bcd3294a910.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/7e929edc119ce881.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/e7ab3f319130be21.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/67122d2cabb5f5fb.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/6dd0e37ab76ddb7e.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX\" async=\"\"></script><script src=\"/mintlify-assets/_next/static/chunks/f0b6f1ea823c8a43.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX\" async=\"\"></script><link rel=\"preload\" href=\"https://www.googletagmanager.com/gtag/js?id=G-5SHKBP7BR1\" as=\"script\"/><link rel=\"preload\" href=\"/mintlify-assets/_next/static/chunks/ed45ca9fc4fad2f8.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX\" as=\"script\" fetchPriority=\"low\"/><link rel=\"preload\" href=\"/mintlify-assets/_next/static/chunks/5917258e888b4dff.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX\" as=\"script\" fetchPriority=\"low\"/><link rel=\"preload\" href=\"/mintlify-assets/_next/static/chunks/c18d87551163d4f9.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX\" as=\"script\" fetchPriority=\"low\"/><link rel=\"preload\" href=\"/mintlify-assets/_next/static/media/katex/0.16.47/katex.min.css\" as=\"style\"/><title>Overview - Allium Documentation Hub</title><meta name=\"description\" content=\"Query realtime blockchain data with fast response times and low latency across 13+ blockchains.\"/><meta name=\"application-name\" content=\"Allium Documentation Hub\"/><meta name=\"generator\" content=\"Mintlify\"/><meta name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/allium-e770e2b7/F-YBneyl4L8wIFbs/_generated/favicon/browserconfig.xml\"/><meta name=\"apple-mobile-web-app-title\" content=\"Allium Documentation Hub\"/><meta name=\"msapplication-TileColor\" content=\"#be59c0\"/><link rel=\"canonical\" href=\"https://docs.allium.so/api/developer/overview\"/><link rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\"/><link rel=\"alternate\" type=\"text/markdown\" href=\"/api/developer/overview.md\"/><meta property=\"og:title\" content=\"Overview - Allium Documentation Hub\"/><meta property=\"og:description\" content=\"Query realtime blockchain data with fast response times and low latency across 13+ blockchains.\"/><meta property=\"og:url\" content=\"https://docs.allium.so/api/developer/overview\"/><meta property=\"og:site_name\" content=\"Allium Documentation Hub\"/><meta property=\"og:image\" content=\"https://allium-e770e2b7.mintlify.io/_mintlify/api/og/v2?division=Realtime+API&title=Overview&description=Query+realtime+blockchain+data+with+fast+response+times+and+low+latency+across+13%2B+blockchains.&theme=0f341d5588624e3fa6bc8ae7&signature=4ec70a2cfd0fa4a0c5838d47d2cdde77aa7ee4f331e96a757fbd53a8ca5a714e\"/><meta property=\"og:image:width\" content=\"1200\"/><meta property=\"og:image:height\" content=\"630\"/><meta property=\"og:type\" content=\"website\"/><meta name=\"twitter:card\" content=\"summary_large_image\"/><meta name=\"twitter:title\" content=\"Overview - Allium Documentation Hub\"/><meta name=\"twitter:description\" content=\"Query realtime blockchain data with fast response times and low latency across 13+ blockchains.\"/><meta name=\"twitter:image\" content=\"https://allium-e770e2b7.mintlify.io/_mintlify/api/og/v2?division=Realtime+API&title=Overview&description=Query+realtime+blockchain+data+with+fast+response+times+and+low+latency+across+13%2B+blockchains.&theme=0f341d5588624e3fa6bc8ae7&signature=4ec70a2cfd0fa4a0c5838d47d2cdde77aa7ee4f331e96a757fbd53a8ca5a714e\"/><meta name=\"twitter:image:width\" content=\"1200\"/><meta name=\"twitter:image:height\" content=\"630\"/><link rel=\"icon\" href=\"/mintlify-assets/_mintlify/favicons/allium-e770e2b7/F-YBneyl4L8wIFbs/_generated/favicon/android-chrome-192x192.png\" type=\"image/png\" sizes=\"192x192\" media=\"(prefers-color-scheme: light)\"/><link rel=\"apple-touch-icon\" href=\"/mintlify-assets/_mintlify/favicons/allium-e770e2b7/F-YBneyl4L8wIFbs/_generated/favicon/apple-touch-icon.png\" type=\"image/png\" sizes=\"180x180\"/><link rel=\"icon\" href=\"/mintlify-assets/_mintlify/favicons/allium-e770e2b7/F-YBneyl4L8wIFbs/_generated/favicon/favicon-16x16.png\" type=\"image/png\" sizes=\"16x16\" media=\"(prefers-color-scheme: light)\"/><link rel=\"icon\" href=\"/mintlify-assets/_mintlify/favicons/allium-e770e2b7/F-YBneyl4L8wIFbs/_generated/favicon/favicon-32x32.png\" type=\"image/png\" sizes=\"32x32\" media=\"(prefers-color-scheme: light)\"/><link rel=\"shortcut icon\" href=\"/mintlify-assets/_mintlify/favicons/allium-e770e2b7/F-YBneyl4L8wIFbs/_generated/favicon/favicon.ico\" type=\"image/x-icon\" media=\"(prefers-color-scheme: light)\"/><link rel=\"icon\" href=\"/mintlify-assets/_mintlify/favicons/allium-e770e2b7/F-YBneyl4L8wIFbs/_generated/favicon-dark/android-chrome-192x192.png\" type=\"image/png\" sizes=\"192x192\" media=\"(prefers-color-scheme: dark)\"/><link rel=\"icon\" href=\"/mintlify-assets/_mintlify/favicons/allium-e770e2b7/F-YBneyl4L8wIFbs/_generated/favicon-dark/favicon-16x16.png\" type=\"image/png\" sizes=\"16x16\" media=\"(prefers-color-scheme: dark)\"/><link rel=\"icon\" href=\"/mintlify-assets/_mintlify/favicons/allium-e770e2b7/F-YBneyl4L8wIFbs/_generated/favicon-dark/favicon-32x32.png\" type=\"image/png\" sizes=\"32x32\" media=\"(prefers-color-scheme: dark)\"/><link rel=\"shortcut icon\" href=\"/mintlify-assets/_mintlify/favicons/allium-e770e2b7/F-YBneyl4L8wIFbs/_generated/favicon-dark/favicon.ico\" type=\"image/x-icon\" media=\"(prefers-color-scheme: dark)\"/><script type=\"text/javascript\">!function(){var b=\"\";\nfunction a(p){if(p==null)return\"/\";p=\"\"+p;if(\"\"===p)return\"/\";return\"/\"===p.charAt(0)?p:\"/\"+p}\nfunction u(p){if(p==null)return p;p=\"\"+p;if(!p||p.charAt(p.length-1)===\"/\")return p.slice(0,-1);return p}\nfunction i(p){if(p==null)return p;p=\"\"+p;if(6<=p.length&&p.substring(p.length-6)===\"/index\")return p.substring(0,p.length-6);if(\"index\"===p)return\"\";return p}\nvar p=(location.pathname||\"\").split(\"?\")[0].split(\"#\")[0]||\"\";\nif(b)if(p===b)p=\"\";else if(0===p.indexOf(b+\"/\"))p=p.substring(b.length);\np=a(p);p=u(p);p=i(p);p=\"\"===p||\"index\"===p?\"/\":a(p);\ndocument.documentElement.setAttribute(\"data-current-path\",p);\n}();</script><script type=\"text/javascript\">if((' '+document.cookie).indexOf(' mintlify_end_user_session_hint=1')!==-1)document.documentElement.setAttribute('data-auth-pending','nav user');</script><script type=\"text/javascript\">(() => {\n const isIOS =\n /iP(hone|ad|od)/.test(navigator.userAgent) ||\n (/Macintosh/.test(navigator.userAgent) && navigator.maxTouchPoints > 1);\n if (!isIOS) return;\n const apply = () => {\n for (const meta of document.querySelectorAll('meta[name=\"viewport\"]')) {\n const content = meta.getAttribute('content') || '';\n if (!content.includes('maximum-scale')) {\n meta.setAttribute('content', content + ', maximum-scale=1');\n }\n }\n };\n apply();\n new MutationObserver(apply).observe(document.head, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['content'],\n });\n})();</script><script type=\"text/javascript\">!function(){\nfunction read(){try{\nvar e=performance.getEntriesByType?performance.getEntriesByType(\"navigation\"):[];\nvar st=(e[0]&&e[0].serverTiming)||[];\nvar g={};\nfor(var i=0;i<st.length;i++){var n=st[i].name,d=st[i].description;if(!d)continue;try{d=decodeURIComponent(d)}catch(x){}\nif(n===\"country\")g.country=d;else if(n===\"region\")g.region=d;else if(n===\"continent\")g.continent=d;}\nvar w=window;w.mintlify=w.mintlify||{};w.mintlify.geo=g;\n}catch(x){}}\nread();document.addEventListener(\"DOMContentLoaded\",read);\n}();</script><script type=\"text/javascript\">!function(){try{\nvar w=window;w.mintlify=w.mintlify||{};\nvar q=w.mintlify.__apiPlaygroundInputsQueue;\nif(!Array.isArray(q)){q=[];w.mintlify.__apiPlaygroundInputsQueue=q;}\nw.mintlify.api=w.mintlify.api||{};\nw.mintlify.api.playground=w.mintlify.api.playground||{};\nif(typeof w.mintlify.api.playground.setServerVariables!==\"function\"){\nw.mintlify.api.playground.setServerVariables=function(v){q.push({type:\"set\",variables:v});};\n}\nif(typeof w.mintlify.api.playground.clearServerVariables!==\"function\"){\nw.mintlify.api.playground.clearServerVariables=function(){q.push({type:\"clear\"});};\n}\n}catch(e){}}();</script><script type=\"text/javascript\">(function(){\nif(typeof CSS===\"undefined\"||!(\"registerProperty\" in CSS))return;\nif(CSS.supports&&CSS.supports(\"-webkit-backdrop-filter:none\"))return;\nvar n=[\"--scroll-area-overflow-x-start\",\"--scroll-area-overflow-x-end\",\"--scroll-area-overflow-y-start\",\"--scroll-area-overflow-y-end\"];\nvar d={\"syntax\":\"<length>\",\"inherits\":false,\"initialValue\":\"0px\"};\nfor(var i=0;i<n.length;i++){try{CSS.registerProperty({name:n[i],syntax:d.syntax,inherits:d.inherits,initialValue:d.initialValue})}catch(e){}}\n})();</script><script type=\"text/javascript\">(function(a,b){try{let c=document.querySelector(\"div#banner\")?.innerText;if(c){for(let d=0;d<localStorage.length;d++){let e=localStorage.key(d);if(e?.endsWith(a)&&localStorage.getItem(e)===c)return void document.documentElement.setAttribute(b,\"hidden\")}document.documentElement.setAttribute(b,\"visible\");return}for(let c=0;c<localStorage.length;c++){let d=localStorage.key(c);if(d?.endsWith(a)&&localStorage.getItem(d))return void document.documentElement.setAttribute(b,\"hidden\")}document.documentElement.setAttribute(b,\"visible\")}catch(a){document.documentElement.setAttribute(b,\"hidden\")}})(\n \"bannerDismissed\",\n \"data-banner-state\",\n)</script><script src=\"/mintlify-assets/_next/static/chunks/a6dad97d9634a72d.js?dpl=dpl_DK9nDs6V3GpQvQFt81LdSBc8n1XX\" noModule=\"\"></script></head><body class=\"antialiased\"><div hidden=\"\"><!--$--><!--/$--></div><script>((a,b,c,d,e,f,g,h)=>{let i=document.documentElement,j=[\"light\",\"dark\"];function k(b){var c;(Array.isArray(a)?a:[a]).forEach(a=>{let c=\"class\"===a,d=c&&f?e.map(a=>f[a]||a):e;c?(i.classList.remove(...d),i.classList.add(f&&f[b]?f[b]:b)):i.setAttribute(a,b)}),c=b,h&&j.includes(c)&&(i.style.colorScheme=c)}if(d)k(d);else try{let a=localStorage.getItem(b)||c,d=g&&\"system\"===a?window.matchMedia(\"(prefers-color-scheme: dark)\").matches?\"dark\":\"light\":a;k(d)}catch(a){}})(\"class\",\"isDarkMode\",\"system\",null,[\"dark\",\"light\",\"true\",\"false\",\"system\"],{\"true\":\"dark\",\"false\":\"light\",\"dark\":\"dark\",\"light\":\"light\"},true,false)</script><script>(function(){try{var f=null;var v=f||localStorage.getItem(\"isDarkMode\");if(v==='true')v='dark';else if(v==='false')v='light';if(v!=='light'&&v!=='dark'&&v!=='system')v=\"system\";document.documentElement.setAttribute(\"data-theme-preference\",v)}catch(e){}})();</script><blockquote class=\"sr-only\" data-agent-docs-index=\"true\" aria-hidden=\"true\"><h2>Documentation Index</h2><p>Fetch the complete documentation index at:<!-- --> <a href=\"/llms.txt\" tabindex=\"-1\">/llms.txt</a></p><p>Use this file to discover all available pages before exploring further.</p></blockquote><style>:root{--banner-height:0px!important}</style><script id=\"_mintlify-banner-script\">(function i(a,b,c,d,e){try{let f,g,h=[];try{h=window.location.pathname.split(\"/\").filter(a=>\"\"!==a&&\"global\"!==a).slice(0,2)}catch{h=[]}let i=h.map(a=>c.find(b=>b.toLowerCase()===a.toLowerCase())).find(a=>void 0!==a),j=[];for(let c of(i?j.push(i):j.push(b),j.push(\"global\"),j)){if(!c)continue;let b=a[c];if(b?.content){f=b.content,g=c;break}}if(!f)return void document.documentElement.setAttribute(d,\"hidden\");let k=!0,l=0;for(;l<localStorage.length;){let a=localStorage.key(l);if(l++,!a?.endsWith(e))continue;let b=localStorage.getItem(a);if(b&&b===f){k=!1;break}g&&(a.startsWith(`lang:${g}_`)||!a.startsWith(\"lang:\"))&&(localStorage.removeItem(a),l--)}document.documentElement.setAttribute(d,k?\"visible\":\"hidden\")}catch(a){console.error(a),document.documentElement.setAttribute(d,\"hidden\")}})(\n {},\n \"en\",\n [],\n \"data-banner-state\",\n \"bannerDismissed\",\n)</script><style>:root {\n --primary: 190 89 192;\n --primary-light: 255 255 255;\n --primary-dark: 10 10 10;\n --tooltip-foreground: 255 255 255;\n --background-light: 255 255 255;\n --background-dark: 29 29 29;\n --gray-50: 248 245 248;\n --gray-100: 243 240 243;\n --gray-200: 228 225 228;\n --gray-300: 211 208 211;\n --gray-400: 164 161 164;\n --gray-500: 117 114 117;\n --gray-600: 85 82 85;\n --gray-700: 68 65 68;\n --gray-800: 43 40 43;\n --gray-900: 28 25 28;\n --gray-950: 16 12 16;\n }</style><script type=\"text/javascript\">\n (function() {\n function loadKatex() {\n const link = document.querySelector('link[href=\"/mintlify-assets/_next/static/media/katex/0.16.47/katex.min.css\"]');\n if (link) link.rel = 'stylesheet';\n }\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', loadKatex);\n } else {\n loadKatex();\n }\n })();\n </script><div class=\"relative antialiased text-gray-500 dark:text-gray-400\"><script id=\"_mintlify-navbar-transition-script\">(function(a){let b,c=(b=\"navbar-transition\",\"maple\"===a&&(b+=\"-maple\"),b);function d(){let a=!1;a=window.scrollY>50;let b=document.getElementById(c);b&&b.hasAttribute(\"data-is-opaque\")&&b.setAttribute(\"data-is-opaque\",`${!!a}`)}let e=function(){let a=document.createElement(\"style\"),b=`#${c}`;return a.appendChild(document.createTextNode(`${b},${b} *,${b} *::before,${b} *::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}`)),document.head.appendChild(a),function(){window.getComputedStyle(document.body),setTimeout(()=>{document.head.removeChild(a)},1)}}();function f(){window.removeEventListener(\"scroll\",d),document.removeEventListener(\"DOMContentLoaded\",d),d(),e()}window.addEventListener(\"scroll\",d,{passive:!0}),document.addEventListener(\"DOMContentLoaded\",d),(\"requestAnimationFrame\"in globalThis?requestAnimationFrame:setTimeout)(d),\"complete\"===document.readyState?f():window.addEventListener(\"load\",f,{once:!0})})(\"mint\")</script><script id=\"_mintlify-scroll-margin-script\">(function () {\n var measure = function(){let a=document.querySelectorAll(\"header#navbar, [data-top-chrome]\"),b=0;a.forEach(a=>{let c=a.getBoundingClientRect();c.height>0&&(b=Math.max(b,c.bottom))});let c=0,d=document.getElementById(\"content-container\");if(d){let{overflowY:a}=getComputedStyle(d);(\"auto\"===a||\"scroll\"===a)&&(c=Math.max(0,d.getBoundingClientRect().top))}let e=`${Math.round(Math.max(0,b-c))+40}px`,f=document.documentElement.style;f.getPropertyValue(\"--scroll-mt\")!==e&&f.setProperty(\"--scroll-mt\",e)};\n (function(a){let b=[],c=0,d=\"undefined\"==typeof ResizeObserver?null:new ResizeObserver(f);function e(){let c=Array.from(document.querySelectorAll(\"header#navbar, [data-top-chrome]\"));(c.length!==b.length||c.some((a,c)=>a!==b[c]))&&d&&(d.disconnect(),c.forEach(a=>d.observe(a))),b=c,a()}function f(){c||(c=requestAnimationFrame(()=>{c=0,e()}))}let g=\"header#navbar, [data-top-chrome]\";function h(a){let b=a.target;if(b instanceof Element&&b.closest(g))return!0;for(let b of a.addedNodes)if(b instanceof Element&&(b.matches(g)||b.querySelector(g)))return!0;for(let b of a.removedNodes)if(b instanceof Element&&(b.matches(g)||b.querySelector(g)))return!0;return!1}new MutationObserver(a=>{a.some(h)&&f()}).observe(document.documentElement,{childList:!0,subtree:!0}),window.addEventListener(\"resize\",f),\"loading\"===document.readyState&&document.addEventListener(\"DOMContentLoaded\",e),e()})(measure);\n (function(a){let b=window.location.hash.slice(1);if(!b)return;function c(){return\"smooth\"===getComputedStyle(document.documentElement).scrollBehavior}function d(c){let d=document.getElementById(b);return!!d&&(a(),d.scrollIntoView(c?{behavior:c}:void 0),!0)}if(\"complete\"===document.readyState)return void d();let e=new MutationObserver(()=>{!c()&&d(\"instant\")&&f()});function f(){e.disconnect(),window.removeEventListener(\"load\",g)}function g(){let a=c();f(),a&&requestAnimationFrame(()=>{d(),function(){let a=[\"wheel\",\"touchstart\",\"keydown\",\"pointerdown\"],c=0,e=window.scrollY,f=setInterval(()=>{c+=1;let a=document.getElementById(b);if(!a||c>=6)return g();let f=Math.abs(window.scrollY-e)>1;if(e=window.scrollY,f)return;let h=parseFloat(getComputedStyle(a).scrollMarginTop)||0;Math.abs(a.getBoundingClientRect().top-h)>4&&d()},350);function g(){clearInterval(f),a.forEach(a=>window.removeEventListener(a,g))}a.forEach(a=>window.addEventListener(a,g,{passive:!0}))}()})}window.addEventListener(\"load\",g),e.observe(document.documentElement,{childList:!0,subtree:!0}),!c()&&d(\"instant\")&&f()})(measure);\n})();</script><a href=\"#content-area\" class=\"sr-only focus:not-sr-only focus:fixed focus:top-2 focus:left-2 focus:z-50 focus:p-2 focus:text-sm focus:bg-background-light dark:focus:bg-background-dark focus:rounded-md focus:outline-primary dark:focus:outline-primary-light\">Skip to main content</a><script>(function e(a,b,c,d,e){try{let f=window.matchMedia(\"(max-width: 1024px)\").matches;if(e){document.documentElement.style.setProperty(c,\"0px\"),document.documentElement.setAttribute(\"data-assistant-state\",\"closed\");return}if(f||!d){document.documentElement.style.setProperty(c,\"0px\"),document.documentElement.setAttribute(\"data-assistant-state\",\"closed\"),d||localStorage.setItem(a,\"false\");return}let g=localStorage.getItem(a);if(null===g){document.documentElement.style.setProperty(c,\"0px\"),document.documentElement.setAttribute(\"data-assistant-state\",\"closed\");return}let h=JSON.parse(g),i=localStorage.getItem(b),j=null!==i?JSON.parse(i):368;document.documentElement.style.setProperty(c,h?j+\"px\":\"0px\"),document.documentElement.setAttribute(\"data-assistant-state\",h?\"open\":\"closed\")}catch(a){document.documentElement.style.setProperty(c,\"0px\"),document.documentElement.setAttribute(\"data-assistant-state\",\"closed\")}})(\n \"chat-assistant-sheet-open\",\n \"chat-assistant-sheet-width\",\ncurl: (23) Failure writing output to destination\n######## app/organization-management/usage-and-billing\n> ## Documentation Index\n> Fetch the complete documentation index at: https://docs.allium.so/llms.txt\n> Use this file to discover all available pages before exploring further.\n\n# Usage & Billing\n\n> Monitor usage, view invoices, and configure overage behavior.\n\n## Usage\n\nView consumption for Realtime APIs and Explorer queries at [**Settings → Usage**](https://app.allium.so/settings/usage). You can filter and group by various dimensions to analyze your organization's usage.\n\n<Frame>\n <img src=\"https://mintcdn.com/allium-e770e2b7/ADlyBDVPFX4-Zp0h/images/app/usage-developer.png?fit=max&auto=format&n=ADlyBDVPFX4-Zp0h&q=85&s=87552e35ba53ca5ccbb08b84586e160c\" alt=\"Settings → Usage — Realtime APIs\" width=\"2105\" height=\"2029\" data-path=\"images/app/usage-developer.png\" />\n</Frame>\n\n<Frame>\n <img src=\"https://mintcdn.com/allium-e770e2b7/ADlyBDVPFX4-Zp0h/images/app/usage-explorer.png?fit=max&auto=format&n=ADlyBDVPFX4-Zp0h&q=85&s=8d44ba076ada483bd0ef5b70717bcdfd\" alt=\"Settings → Usage — Explorer queries\" width=\"2105\" height=\"2133\" data-path=\"images/app/usage-explorer.png\" />\n</Frame>\n\n<Tip>\n Get usage data programmatically using the [Get organization usage\n API](/api/account/get-organization-usage).\n</Tip>\n\n## Billing\n\nView billing info at [**Settings → Billing**](https://app.allium.so/settings/billing). See your current plan, usage against your plan's allocation, invoice history, and overage settings.\n\n### Overage settings\n\n<Info>Only available to organizations on an **Allium Subscription** plan.</Info>\n\nOverage settings only applies to Explorer Units at the moment. Manage your access and costs by selecting your preferred option:\n\n| Setting | Behavior |\n| :- | :- |\n| **Allow overages, no cap** | Usage continues past your plan's included units, and is billed at overage rates. |\n| **Allow overages, with a cap (% of plan)** | Usage continues up to a cap, billed at overage rates, then is blocked. |\n| **Do not allow overages** | Usage is blocked once your plan's included units are exhausted. |\n",
"type": "text"
}
]
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-899e42e7ecbef56b",
"is_error": false,
"tool_kind": "shell"
}›Thinking…
Good. Now fetch pricing-relevant docs: endpoints-pricing.md, api/getting-started.md, api/developer/overview.md (as .md), billing-and-limits.md for MCP.
Also determine whether I can actually run an example without credentials. The machine payments path requires a private key with USDC on Base — I don't have funds. Can't do that.
Let me check if there's a free/no-auth endpoint. Let me test the API without a key to see the 402/401 response — that's a light, quick call (not a long-running service). That's fine.
Let me fetch key docs first.
for p in ai/machine-payments/endpoints-pricing api/getting-started api/overview; do echo "######## $p"; timeout 25 curl -sSL "https://docs.allium.so/$p.md" | head -150; echo; done
######## ai/machine-payments/endpoints-pricing
######## ai/machine-payments/endpoints-pricing
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.allium.so/llms.txt
> Use this file to discover all available pages before exploring further.
# Endpoints & Pricing
> All payment-enabled endpoints, pricing, rate limits, and error codes.
All endpoints below are accessible via machine payments at `https://agents.allium.so`. No API key needed — pay with USDC using [Tempo MPP](/ai/machine-payments/tempo-mpp) or [x402](/ai/machine-payments/x402). All calls are priced individually. No subscription, no minimum spend.
## Install allium-cli
CLI commands require **[allium-cli](https://github.com/Allium-Science/allium-cli)**:
```bash theme={null}
curl -sSL https://agents.allium.so/cli/install.sh | sh
```
## Supported Chains Discovery
Check which chains each endpoint supports. **This endpoint is free** — no payment required.
```bash theme={null}
curl "https://agents.allium.so/api/v1/supported-chains/realtime-apis/simple"
```
Returns a map of endpoint path to supported chain names. Call once per session and cache the result.
***
## Realtime API
### Prices
| CLI Command | Method | Endpoint | Cost | Description |
| - | - | - | - | - |
| `allium realtime prices latest` | POST | `/api/v1/developer/prices` | \$0.02 | Get latest token prices |
| `allium realtime prices at-timestamp` | POST | `/api/v1/developer/prices/at-timestamp` | \$0.02 | Get token prices at a specific time |
| `allium realtime prices history` | POST | `/api/v1/developer/prices/history` | \$0.02 | Get historical token price series |
| `allium realtime prices stats` | POST | `/api/v1/developer/prices/stats` | \$0.02 | Get token price statistics |
### Tokens
| CLI Command | Method | Endpoint | Cost | Description |
| - | - | - | - | - |
| `allium realtime tokens search` | GET | `/api/v1/developer/tokens/search` | \$0.03 | Search tokens by name or symbol |
| `allium realtime tokens chain-address` | POST | `/api/v1/developer/tokens/chain-address` | \$0.02 | Look up tokens by chain and address |
| `allium realtime tokens list` | GET | `/api/v1/developer/tokens` | \$0.03 | List all supported tokens |
### Wallets
| CLI Command | Method | Endpoint | Cost | Description |
| - | - | - | - | - |
| `allium realtime balances latest` | POST | `/api/v1/developer/wallet/balances` | \$0.03 | Get current wallet token balances |
| `allium realtime balances history` | POST | `/api/v1/developer/wallet/balances/history` | \$0.03 | Get historical wallet balances |
| `allium realtime transactions` | POST | `/api/v1/developer/wallet/transactions` | \$0.03 | Get wallet transaction history |
| `allium realtime pnl` | POST | `/api/v1/developer/wallet/pnl` | \$0.03 | Get wallet profit and loss |
***
## Explorer API
The Explorer API is also available via machine payments. The `run-sql` endpoint uses machine payments auth directly. The remaining Explorer endpoints (`run`, `status`, `results`) require API key authentication.
| CLI Command | Method | Endpoint | Cost | Auth | Description |
| - | - | - | - | - | - |
| `allium explorer run-sql` | POST | `/api/v1/explorer/queries/run-async` | \$0.01 | Machine payments | Submit raw SQL for async execution |
| `allium explorer run` | POST | `/api/v1/explorer/queries/{query_id}/run-async` | \$0.01 | API key | Run a saved query asynchronously |
| `allium explorer status` | GET | `/api/v1/explorer/query-runs/{run_id}/status` | \$0.01 | API key | Check status of a query run |
| `allium explorer results` | GET | `/api/v1/explorer/query-runs/{run_id}/results` | dynamic | API key | Fetch results of a completed query |
***
## Supported Networks
| Protocol | Network | USDC Address |
| - | - | - |
| **Tempo MPP** | Tempo (mainnet) | `0x20c000000000000000000000b9537d11c60e8b50` |
| **x402** | Base (mainnet) | `0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913` |
| **x402** | Polygon (mainnet) | `0x3c499c542cEF5E3811e1192ce70d8cc03d5c3359` |
| **x402** | Solana (mainnet) | `EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v` |
| **x402** | X Layer (mainnet) | `0x74b7f16337b8972027f6196a17a631ac6de26d22` |
## Rate Limits
Two independent rate limit buckets per wallet. You can max out both simultaneously.
| Bucket | Endpoints | Limit |
| - | - | - |
| **Data** | All `/developer/` endpoints | 3 requests/second |
| **Docs** | All `/docs/` endpoints | 5 requests/second |
Exceeding either limit returns HTTP `429`. Wait 1 second before retrying.
***
## Error Codes
| Status | Meaning | What to Do |
| - | - | - |
| 400 | Bad request | Check JSON syntax |
| 402 | Payment required | Sign the payment and retry (handled automatically by [Tempo MPP](/ai/machine-payments/tempo-mpp)) |
| 422 | Validation failed | Check request format |
| 429 | Rate limited | Back off for 1 second |
| 500 | Server error | Retry with exponential backoff |
######## api/getting-started
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.allium.so/llms.txt
> Use this file to discover all available pages before exploring further.
# Getting Started
## Create an API Key
<Steps>
<Step title="Request Access">
Create your account at [https://app.allium.so/join](https://app.allium.so/join)
</Step>
<Step title="Log In">
Once your account is created, log in to the Allium App at
[https://app.allium.so](https://app.allium.so)
</Step>
<Step title="Generate API Key">
1. Navigate to **Settings** > **API Keys**
2. Click **Generate** to create your API key
3. Copy and securely store your API key
<Warning>
**Note:** Only one API key can be generated per user. Keep it secure and do not share it publicly.
</Warning>
</Step>
<Step title="Start Building">
Use your API key to authenticate requests to Allium's APIs. Include it in your request headers:
```bash theme={null}
X-API-KEY: your-api-key-here
```
</Step>
</Steps>
## Jump In!
<CardGroup cols={3}>
<Card title="Allium Realtime" icon="code" href="/api/developer/overview">
Query realtime blockchain data with low-latency REST APIs
</Card>
<Card title="Datastream APIs" icon="arrow-progress" href="/api/datastreams/overview">
Manage filters and transformations on realtime data streams
</Card>
<Card title="Explorer APIs" icon="chart-line" href="/api/explorer/overview">
Run saved queries programmatically and retrieve results via API
</Card>
</CardGroup>
## Need Help?
For questions or enterprise support, reach out to us at [support@allium.so](mailto:support@allium.so) or [contact us](https://allium.so/contact).
######## api/overview
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.allium.so/llms.txt
> Use this file to discover all available pages before exploring further.
# API Overview
> Allium provides REST APIs for realtime and analytics use cases, each designed for different data access patterns.
## Realtime APIs
Realtime APIs for **engineers** to query raw and enriched blockchain data across **20+ blockchains** with realtime data freshness (3-4s).
Access token prices, wallet balances, holdings, transactions, and more through pull-based REST endpoints.
<Card title="Realtime APIs" icon="code" horizontal href="/api/developer/overview">
Query realtime blockchain data with low-latency REST APIs
</Card>
## Stream Transformation APIs
Stream management APIs for **engineers** to configure filters, transformations, and custom workflows on Allium's realtime Kafka streams across **80+ blockchains**.
Turn raw blockchain streams into actionable signals by applying transformations and routing data to your preferred destination (webhook, PubSub, Kafka).
<Card title="Stream Transformation API" icon="arrow-progress" horizontal href="/api/datastreams/overview">
Manage filters and transformations on realtime data streams
</Card>
<Info>
The Stream Transformation APIs are currently only available to enterprise
customers. Please reach out to [support@allium.so](mailto:support@allium.so) to learn more about
enterprise access.
</Info>
## Explorer APIs
Analytics-focused APIs for **analysts** and **data scientists** to programmatically run and fetch data from queries created in the Allium app.
Queries saved in the Explorer UI can be executed via API and results retrieved in your environment, enabling bulk data extraction and automated workflows.
<Card title="Explorer API" icon="chart-line" horizontal href="/api/explorer/overview">
Run saved queries programmatically and retrieve results via API
</Card>
<Info>
The Explorer APIs are currently only available to enterprise customers. Please
reach out to [support@allium.so](mailto:support@allium.so) to learn more about enterprise access.
</Info>
Recorded tool call
{
"type": "tool_call",
"seq": 45,
"ts": "2026-10-15T16:54:48.733Z",
"name": "bash",
"turn": 1,
"input": {
"command": "for p in ai/machine-payments/endpoints-pricing api/getting-started api/overview; do echo \"######## $p\"; timeout 25 curl -sSL \"https://docs.allium.so/$p.md\" | head -150; echo; done"
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-90a235a6959b230d",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 48,
"ts": "2026-10-15T16:54:51.749Z",
"turn": 1,
"output": {
"content": [
{
"text": "######## ai/machine-payments/endpoints-pricing\n> ## Documentation Index\n> Fetch the complete documentation index at: https://docs.allium.so/llms.txt\n> Use this file to discover all available pages before exploring further.\n\n# Endpoints & Pricing\n\n> All payment-enabled endpoints, pricing, rate limits, and error codes.\n\nAll endpoints below are accessible via machine payments at `https://agents.allium.so`. No API key needed — pay with USDC using [Tempo MPP](/ai/machine-payments/tempo-mpp) or [x402](/ai/machine-payments/x402). All calls are priced individually. No subscription, no minimum spend.\n\n## Install allium-cli\n\nCLI commands require **[allium-cli](https://github.com/Allium-Science/allium-cli)**:\n\n```bash theme={null}\ncurl -sSL https://agents.allium.so/cli/install.sh | sh\n```\n\n## Supported Chains Discovery\n\nCheck which chains each endpoint supports. **This endpoint is free** — no payment required.\n\n```bash theme={null}\ncurl \"https://agents.allium.so/api/v1/supported-chains/realtime-apis/simple\"\n```\n\nReturns a map of endpoint path to supported chain names. Call once per session and cache the result.\n\n***\n\n## Realtime API\n\n### Prices\n\n| CLI Command | Method | Endpoint | Cost | Description |\n| - | - | - | - | - |\n| `allium realtime prices latest` | POST | `/api/v1/developer/prices` | \\$0.02 | Get latest token prices |\n| `allium realtime prices at-timestamp` | POST | `/api/v1/developer/prices/at-timestamp` | \\$0.02 | Get token prices at a specific time |\n| `allium realtime prices history` | POST | `/api/v1/developer/prices/history` | \\$0.02 | Get historical token price series |\n| `allium realtime prices stats` | POST | `/api/v1/developer/prices/stats` | \\$0.02 | Get token price statistics |\n\n### Tokens\n\n| CLI Command | Method | Endpoint | Cost | Description |\n| - | - | - | - | - |\n| `allium realtime tokens search` | GET | `/api/v1/developer/tokens/search` | \\$0.03 | Search tokens by name or symbol |\n| `allium realtime tokens chain-address` | POST | `/api/v1/developer/tokens/chain-address` | \\$0.02 | Look up tokens by chain and address |\n| `allium realtime tokens list` | GET | `/api/v1/developer/tokens` | \\$0.03 | List all supported tokens |\n\n### Wallets\n\n| CLI Command | Method | Endpoint | Cost | Description |\n| - | - | - | - | - |\n| `allium realtime balances latest` | POST | `/api/v1/developer/wallet/balances` | \\$0.03 | Get current wallet token balances |\n| `allium realtime balances history` | POST | `/api/v1/developer/wallet/balances/history` | \\$0.03 | Get historical wallet balances |\n| `allium realtime transactions` | POST | `/api/v1/developer/wallet/transactions` | \\$0.03 | Get wallet transaction history |\n| `allium realtime pnl` | POST | `/api/v1/developer/wallet/pnl` | \\$0.03 | Get wallet profit and loss |\n\n***\n\n## Explorer API\n\nThe Explorer API is also available via machine payments. The `run-sql` endpoint uses machine payments auth directly. The remaining Explorer endpoints (`run`, `status`, `results`) require API key authentication.\n\n| CLI Command | Method | Endpoint | Cost | Auth | Description |\n| - | - | - | - | - | - |\n| `allium explorer run-sql` | POST | `/api/v1/explorer/queries/run-async` | \\$0.01 | Machine payments | Submit raw SQL for async execution |\n| `allium explorer run` | POST | `/api/v1/explorer/queries/{query_id}/run-async` | \\$0.01 | API key | Run a saved query asynchronously |\n| `allium explorer status` | GET | `/api/v1/explorer/query-runs/{run_id}/status` | \\$0.01 | API key | Check status of a query run |\n| `allium explorer results` | GET | `/api/v1/explorer/query-runs/{run_id}/results` | dynamic | API key | Fetch results of a completed query |\n\n***\n\n## Supported Networks\n\n| Protocol | Network | USDC Address |\n| - | - | - |\n| **Tempo MPP** | Tempo (mainnet) | `0x20c000000000000000000000b9537d11c60e8b50` |\n| **x402** | Base (mainnet) | `0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913` |\n| **x402** | Polygon (mainnet) | `0x3c499c542cEF5E3811e1192ce70d8cc03d5c3359` |\n| **x402** | Solana (mainnet) | `EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v` |\n| **x402** | X Layer (mainnet) | `0x74b7f16337b8972027f6196a17a631ac6de26d22` |\n\n## Rate Limits\n\nTwo independent rate limit buckets per wallet. You can max out both simultaneously.\n\n| Bucket | Endpoints | Limit |\n| - | - | - |\n| **Data** | All `/developer/` endpoints | 3 requests/second |\n| **Docs** | All `/docs/` endpoints | 5 requests/second |\n\nExceeding either limit returns HTTP `429`. Wait 1 second before retrying.\n\n***\n\n## Error Codes\n\n| Status | Meaning | What to Do |\n| - | - | - |\n| 400 | Bad request | Check JSON syntax |\n| 402 | Payment required | Sign the payment and retry (handled automatically by [Tempo MPP](/ai/machine-payments/tempo-mpp)) |\n| 422 | Validation failed | Check request format |\n| 429 | Rate limited | Back off for 1 second |\n| 500 | Server error | Retry with exponential backoff |\n\n######## api/getting-started\n> ## Documentation Index\n> Fetch the complete documentation index at: https://docs.allium.so/llms.txt\n> Use this file to discover all available pages before exploring further.\n\n# Getting Started\n\n## Create an API Key\n\n<Steps>\n <Step title=\"Request Access\">\n Create your account at [https://app.allium.so/join](https://app.allium.so/join)\n </Step>\n\n <Step title=\"Log In\">\n Once your account is created, log in to the Allium App at\n [https://app.allium.so](https://app.allium.so)\n </Step>\n\n <Step title=\"Generate API Key\">\n 1. Navigate to **Settings** > **API Keys**\n 2. Click **Generate** to create your API key\n 3. Copy and securely store your API key\n\n <Warning>\n **Note:** Only one API key can be generated per user. Keep it secure and do not share it publicly.\n </Warning>\n </Step>\n\n <Step title=\"Start Building\">\n Use your API key to authenticate requests to Allium's APIs. Include it in your request headers:\n\n ```bash theme={null}\n X-API-KEY: your-api-key-here\n ```\n </Step>\n</Steps>\n\n## Jump In!\n\n<CardGroup cols={3}>\n <Card title=\"Allium Realtime\" icon=\"code\" href=\"/api/developer/overview\">\n Query realtime blockchain data with low-latency REST APIs\n </Card>\n\n <Card title=\"Datastream APIs\" icon=\"arrow-progress\" href=\"/api/datastreams/overview\">\n Manage filters and transformations on realtime data streams\n </Card>\n\n <Card title=\"Explorer APIs\" icon=\"chart-line\" href=\"/api/explorer/overview\">\n Run saved queries programmatically and retrieve results via API\n </Card>\n</CardGroup>\n\n## Need Help?\n\nFor questions or enterprise support, reach out to us at [support@allium.so](mailto:support@allium.so) or [contact us](https://allium.so/contact).\n\n######## api/overview\n> ## Documentation Index\n> Fetch the complete documentation index at: https://docs.allium.so/llms.txt\n> Use this file to discover all available pages before exploring further.\n\n# API Overview\n\n> Allium provides REST APIs for realtime and analytics use cases, each designed for different data access patterns.\n\n## Realtime APIs\n\nRealtime APIs for **engineers** to query raw and enriched blockchain data across **20+ blockchains** with realtime data freshness (3-4s).\n\nAccess token prices, wallet balances, holdings, transactions, and more through pull-based REST endpoints.\n\n<Card title=\"Realtime APIs\" icon=\"code\" horizontal href=\"/api/developer/overview\">\n Query realtime blockchain data with low-latency REST APIs\n</Card>\n\n## Stream Transformation APIs\n\nStream management APIs for **engineers** to configure filters, transformations, and custom workflows on Allium's realtime Kafka streams across **80+ blockchains**.\n\nTurn raw blockchain streams into actionable signals by applying transformations and routing data to your preferred destination (webhook, PubSub, Kafka).\n\n<Card title=\"Stream Transformation API\" icon=\"arrow-progress\" horizontal href=\"/api/datastreams/overview\">\n Manage filters and transformations on realtime data streams\n</Card>\n\n<Info>\n The Stream Transformation APIs are currently only available to enterprise\n customers. Please reach out to [support@allium.so](mailto:support@allium.so) to learn more about\n enterprise access.\n</Info>\n\n## Explorer APIs\n\nAnalytics-focused APIs for **analysts** and **data scientists** to programmatically run and fetch data from queries created in the Allium app.\n\nQueries saved in the Explorer UI can be executed via API and results retrieved in your environment, enabling bulk data extraction and automated workflows.\n\n<Card title=\"Explorer API\" icon=\"chart-line\" horizontal href=\"/api/explorer/overview\">\n Run saved queries programmatically and retrieve results via API\n</Card>\n\n<Info>\n The Explorer APIs are currently only available to enterprise customers. Please\n reach out to [support@allium.so](mailto:support@allium.so) to learn more about enterprise access.\n</Info>\n\n",
"type": "text"
}
]
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-90a235a6959b230d",
"is_error": false,
"tool_kind": "shell"
}echo "== no-auth POST prices =="; timeout 25 curl -sS -i -X POST "https://agents.allium.so/api/v1/developer/prices" -H 'Content-Type: application/json' -d '[{"chain":"solana","token_address":"So11111111111111111111111111111111111111112"}]' | head -40; echo; echo "== realtime api host? =="; timeout 25 curl -sS -o /dev/null -w "%{http_code}\n" https://api.allium.so/v1/developer/prices== no-auth POST prices ==
== no-auth POST prices ==
HTTP/2 402
date: Thu, 15 Oct 2026 16:54:49 GMT
content-type: application/json
server: cloudflare
www-authenticate: Payment id="CXDChm_mBo1cmhHKBpPQI2uZfhSV7zF4QQ3ouxTQfNg", realm="agents.allium.so", method="tempo", intent="charge", request="eyJhbW91bnQiOiIyMDAwMCIsImN1cnJlbmN5IjoiMHgyMGMwMDAwMDAwMDAwMDAwMDAwMDAwMDBiOTUzN2QxMWM2MGU4YjUwIiwiZXhwaXJlcyI6IjIwMjYtMTAtMTVUMTY6NTk6NDkuODU4MjkzKzAwOjAwIiwiZXh0cmEiOnsic3RyaXBlX21vZGUiOiJjdXN0b2R5Iiwic3RyaXBlX3BheW1lbnRfaW50ZW50X2lkIjoicGlfM1VRcnZaSWZwVmU1N0JOVTFaY0drQllsIn0sIm1ldGhvZERldGFpbHMiOnsiY2hhaW5JZCI6NDIxN30sInJlY2lwaWVudCI6IjB4NDMzZGI2OTUwOGIwOWMxYTI4MDY3ODA2MWQ3OWQwN2I0NDYwMmU2OCJ9"
payment-required: eyJ4NDAyVmVyc2lvbiI6IDIsICJlcnJvciI6ICJQYXltZW50IFJlcXVpcmVkISIsICJhY2NlcHRzIjogW3sic2NoZW1lIjogImV4YWN0IiwgIm5ldHdvcmsiOiAiZWlwMTU1Ojg0NTMiLCAiYW1vdW50IjogIjIwMDAwIiwgInBheVRvIjogIjB4ZmU1MmVhM2IxMjg5NjhiZmU2N2FhNGZmNjUyNjgwYzU5NzZkODkzNSIsICJtYXhUaW1lb3V0U2Vjb25kcyI6IDE3OTIwODMzNDksICJhc3NldCI6ICIweDgzMzU4OWZDRDZlRGI2RTA4ZjRjN0MzMkQ0ZjcxYjU0YmRBMDI5MTMiLCAiZXh0cmEiOiB7InN0cmlwZV9wYXltZW50X2ludGVudF9pZCI6ICJwaV8zVVFydlpJZnBWZTU3Qk5VMVpjR2tCWWwiLCAic3RyaXBlX21vZGUiOiAiY3VzdG9keSIsICJuYW1lIjogIlVTRCBDb2luIiwgInZlcnNpb24iOiAiMiJ9fSwgeyJzY2hlbWUiOiAiZXhhY3QiLCAibmV0d29yayI6ICJzb2xhbmE6NWV5a3Q0VXNGdjhQOE5KZFRSRXBZMXZ6cUtxWkt2ZHAiLCAiYW1vdW50IjogIjIwMDAwIiwgInBheVRvIjogIjNoUWd1Q2FXNDY5ZFg0Vm54WERNVkJ4WjFiUHZKQVUxMkp5ZXVidGpZTDVGIiwgIm1heFRpbWVvdXRTZWNvbmRzIjogMTc5MjA4MzM0OSwgImFzc2V0IjogIkVQakZXZGQ1QXVmcVNTcWVNMnFOMXh6eWJhcEM4RzR3RUdHa1p3eVREdDF2IiwgImV4dHJhIjogeyJzdHJpcGVfcGF5bWVudF9pbnRlbnRfaWQiOiAicGlfM1VRcnZaSWZwVmU1N0JOVTFaY0drQllsIiwgInN0cmlwZV9tb2RlIjogImN1c3RvZHkiLCAibmFtZSI6ICJVU0RDIiwgInZlcnNpb24iOiAiMiIsICJmZWVQYXllciI6ICJIYzNzZEVBc0NHUWNwZ2Zpdnl3b2c5dXd0azhnVUJVWmdzeGRNRTFFSnk4OCJ9fSwgeyJzY2hlbWUiOiAiZXhhY3QiLCAibmV0d29yayI6ICJlaXAxNTU6MTk2IiwgImFtb3VudCI6ICIyMDAwMCIsICJwYXlUbyI6ICIweDYxRmRiZTY2YzFBRWFGNDkxYjhlMTIxQzgzMDcwYWE3NTBERENhZGEiLCAibWF4VGltZW91dFNlY29uZHMiOiAxNzkyMDgzMzQ5LCAiYXNzZXQiOiAiMHg3NGI3ZjE2MzM3Yjg5NzIwMjdmNjE5NmExN2E2MzFhYzZkZTI2ZDIyIiwgImV4dHJhIjogeyJuYW1lIjogIlVTRCBDb2luIiwgInZlcnNpb24iOiAiMiJ9fSwgeyJzY2hlbWUiOiAiZXhhY3QiLCAibmV0d29yayI6ICJlaXAxNTU6MTM3IiwgImFtb3VudCI6ICIyMDAwMCIsICJwYXlUbyI6ICIweEY1QjU5YUE0RDIzNjIxQjM4MkFjNTY0NjVlMmE3ODQzMkNFNzY4Q0EiLCAibWF4VGltZW91dFNlY29uZHMiOiAxNzkyMDgzMzQ5LCAiYXNzZXQiOiAiMHgzYzQ5OWM1NDJjRUY1RTM4MTFlMTE5MmNlNzBkOGNjMDNkNWMzMzU5IiwgImV4dHJhIjogeyJuYW1lIjogIlVTRCBDb2luIiwgInZlcnNpb24iOiAiMiJ9fV0sICJyZXNvdXJjZSI6IHsidXJsIjogImh0dHBzOi8vYWdlbnRzLmFsbGl1bS5zby9hcGkvdjEvZGV2ZWxvcGVyL3ByaWNlcyIsICJkZXNjcmlwdGlvbiI6ICJBUEkgcmVxdWVzdDogL2FwaS92MS9kZXZlbG9wZXIvcHJpY2VzIiwgIm1pbWVUeXBlIjogImFwcGxpY2F0aW9uL2pzb24ifSwgImV4dGVuc2lvbnMiOiB7ImJhemFhciI6IHsiaW5mbyI6IHsiaW5wdXQiOiB7InR5cGUiOiAiaHR0cCIsICJtZXRob2QiOiAiUE9TVCIsICJib2R5VHlwZSI6ICJqc29uIiwgImJvZHkiOiBbeyJ0b2tlbl9hZGRyZXNzIjogIjB4QzAyYWFBMzliMjIzRkU4RDBBMGU1QzRGMjdlQUQ5MDgzQzc1NkNjMiIsICJjaGFpbiI6ICJldGhlcmV1bSJ9LCB7InRva2VuX2FkZHJlc3MiOiAiU28xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMiIsICJjaGFpbiI6ICJzb2xhbmEifV19LCAib3V0cHV0IjogeyJ0eXBlIjogImpzb24iLCAiZXhhbXBsZSI6IHsiaXRlbXMiOiBbeyJ0aW1lc3RhbXAiOiAiMjAyNS0wNi0xN1QxODowMDowMFoiLCAiY2hhaW4iOiAiZXRoZXJldW0iLCAiYWRkcmVzcyI6ICIweEMwMmFhQTM5YjIyM0ZFOEQwQTBlNUM0RjI3ZUFEOTA4M0M3NTZDYzIiLCAiZGVjaW1hbHMiOiAxOCwgInByaWNlIjogMjUwMC41LCAib3BlbiI6IDI0OTUuMCwgImhpZ2giOiAyNTEwLjAsICJjbG9zZSI6IDI1MDAuNSwgImxvdyI6IDI0OTAuMH1dfX19LCAic2NoZW1hIjogeyIkc2NoZW1hIjogImh0dHBzOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LzIwMjAtMTIvc2NoZW1hIiwgInR5cGUiOiAib2JqZWN0IiwgInByb3BlcnRpZXMiOiB7ImlucHV0IjogeyJ0eXBlIjogIm9iamVjdCIsICJwcm9wZXJ0aWVzIjogeyJ0eXBlIjogeyJ0eXBlIjogInN0cmluZyIsICJjb25zdCI6ICJodHRwIn0sICJtZXRob2QiOiB7InR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbIlBPU1QiXX0sICJib2R5VHlwZSI6IHsidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsianNvbiJdfSwgImJvZHkiOiB7InR5cGUiOiAib2JqZWN0IiwgInByb3BlcnRpZXMiOiB7InRva2VuX2FkZHJlc3MiOiB7InR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIlRva2VuIGNvbnRyYWN0IGFkZHJlc3MifSwgImNoYWluIjogeyJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJCbG9ja2NoYWluIG5ldHdvcmsgKGUuZy4gZXRoZXJldW0sIHNvbGFuYSwgYmFzZSkifX0sICJyZXF1aXJlZCI6IFsidG9rZW5fYWRkcmVzcyIsICJjaGFpbiJdfX0sICJyZXF1aXJlZCI6IFsidHlwZSIsICJib2R5VHlwZSIsICJib2R5IiwgIm1ldGhvZCJdLCAiYWRkaXRpb25hbFByb3BlcnRpZXMiOiBmYWxzZX0sICJvdXRwdXQiOiB7InR5cGUiOiAib2JqZWN0IiwgInByb3BlcnRpZXMiOiB7InR5cGUiOiB7InR5cGUiOiAic3RyaW5nIn0sICJleGFtcGxlIjogeyJ0eXBlIjogIm9iamVjdCJ9fX19LCAicmVxdWlyZWQiOiBbImlucHV0Il19fX19
vary: Accept-Encoding
x-content-type-options: nosniff
via: 1.1 google
cf-cache-status: DYNAMIC
strict-transport-security: max-age=31536000; includeSubDomains
cf-ray: a4b0590b9bc1c746-IAD
{"x402Version":2,"error":"Payment Required!","accepts":[{"scheme":"exact","network":"eip155:8453","amount":"20000","payTo":"0xfe52ea3b128968bfe67aa4ff652680c5976d8935","maxTimeoutSeconds":1792083349,"asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","extra":{"stripe_payment_intent_id":"pi_3UQrvZIfpVe57BNU1ZcGkBYl","stripe_mode":"custody","name":"USD Coin","version":"2"}},{"scheme":"exact","network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","amount":"20000","payTo":"3hQguCaW469dX4VnxXDMVBxZ1bPvJAU12JyeubtjYL5F","maxTimeoutSeconds":1792083349,"asset":"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v","extra":{"stripe_payment_intent_id":"pi_3UQrvZIfpVe57BNU1ZcGkBYl","stripe_mode":"custody","name":"USDC","version":"2","feePayer":"Hc3sdEAsCGQcpgfivywog9uwtk8gUBUZgsxdME1EJy88"}},{"scheme":"exact","network":"eip155:196","amount":"20000","payTo":"0x61Fdbe66c1AEaF491b8e121C83070aa750DDCada","maxTimeoutSeconds":1792083349,"asset":"0x74b7f16337b8972027f6196a17a631ac6de26d22","extra":{"name":"USD Coin","version":"2"}},{"scheme":"exact","network":"eip155:137","amount":"20000","payTo":"0xF5B59aA4D23621B382Ac56465e2a78432CE768CA","maxTimeoutSeconds":1792083349,"asset":"0x3c499c542cEF5E3811e1192ce70d8cc03d5c3359","extra":{"name":"USD Coin","version":"2"}}],"resource":{"url":"https://agents.allium.so/api/v1/developer/prices","description":"API request: /api/v1/developer/prices","mimeType":"application/json"},"extensions":{"bazaar":{"info":{"input":{"type":"http","method":"POST","bodyType":"json","body":[{"token_address":"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2","chain":"ethereum"},{"token_address":"So11111111111111111111111111111111111111112","chain":"solana"}]},"output":{"type":"json","example":{"items":[{"timestamp":"2025-06-17T18:00:00Z","chain":"ethereum","address":"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2","decimals":18,"price":2500.5,"open":2495.0,"high":2510.0,"close":2500.5,"low":2490.0}]}}},"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"input":{"type":"object","properties":{"type":{"type":"string","const":"http"},"method":{"type":"string","enum":["POST"]},"bodyType":{"type":"string","enum":["json"]},"body":{"type":"object","properties":{"token_address":{"type":"string","description":"Token contract address"},"chain":{"type":"string","description":"Blockchain network (e.g. ethereum, solana, base)"}},"required":["token_address","chain"]}},"required":["type","bodyType","body","method"],"additionalProperties":false},"output":{"type":"object","properties":{"type":{"type":"string"},"example":{"type":"object"}}}},"required":["input"]}}}}
== realtime api host? ==
403
Recorded tool call
{
"type": "tool_call",
"seq": 46,
"ts": "2026-10-15T16:54:48.733Z",
"name": "bash",
"turn": 1,
"input": {
"command": "echo \"== no-auth POST prices ==\"; timeout 25 curl -sS -i -X POST \"https://agents.allium.so/api/v1/developer/prices\" -H 'Content-Type: application/json' -d '[{\"chain\":\"solana\",\"token_address\":\"So11111111111111111111111111111111111111112\"}]' | head -40; echo; echo \"== realtime api host? ==\"; timeout 25 curl -sS -o /dev/null -w \"%{http_code}\\n\" https://api.allium.so/v1/developer/prices"
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-be3844a6623164bf",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 47,
"ts": "2026-10-15T16:54:50.529Z",
"turn": 1,
"output": {
"content": [
{
"text": "== no-auth POST prices ==\nHTTP/2 402 \r\ndate: Thu, 15 Oct 2026 16:54:49 GMT\r\ncontent-type: application/json\r\nserver: cloudflare\r\nwww-authenticate: Payment id=\"CXDChm_mBo1cmhHKBpPQI2uZfhSV7zF4QQ3ouxTQfNg\", realm=\"agents.allium.so\", method=\"tempo\", intent=\"charge\", request=\"eyJhbW91bnQiOiIyMDAwMCIsImN1cnJlbmN5IjoiMHgyMGMwMDAwMDAwMDAwMDAwMDAwMDAwMDBiOTUzN2QxMWM2MGU4YjUwIiwiZXhwaXJlcyI6IjIwMjYtMTAtMTVUMTY6NTk6NDkuODU4MjkzKzAwOjAwIiwiZXh0cmEiOnsic3RyaXBlX21vZGUiOiJjdXN0b2R5Iiwic3RyaXBlX3BheW1lbnRfaW50ZW50X2lkIjoicGlfM1VRcnZaSWZwVmU1N0JOVTFaY0drQllsIn0sIm1ldGhvZERldGFpbHMiOnsiY2hhaW5JZCI6NDIxN30sInJlY2lwaWVudCI6IjB4NDMzZGI2OTUwOGIwOWMxYTI4MDY3ODA2MWQ3OWQwN2I0NDYwMmU2OCJ9\"\r\npayment-required: eyJ4NDAyVmVyc2lvbiI6IDIsICJlcnJvciI6ICJQYXltZW50IFJlcXVpcmVkISIsICJhY2NlcHRzIjogW3sic2NoZW1lIjogImV4YWN0IiwgIm5ldHdvcmsiOiAiZWlwMTU1Ojg0NTMiLCAiYW1vdW50IjogIjIwMDAwIiwgInBheVRvIjogIjB4ZmU1MmVhM2IxMjg5NjhiZmU2N2FhNGZmNjUyNjgwYzU5NzZkODkzNSIsICJtYXhUaW1lb3V0U2Vjb25kcyI6IDE3OTIwODMzNDksICJhc3NldCI6ICIweDgzMzU4OWZDRDZlRGI2RTA4ZjRjN0MzMkQ0ZjcxYjU0YmRBMDI5MTMiLCAiZXh0cmEiOiB7InN0cmlwZV9wYXltZW50X2ludGVudF9pZCI6ICJwaV8zVVFydlpJZnBWZTU3Qk5VMVpjR2tCWWwiLCAic3RyaXBlX21vZGUiOiAiY3VzdG9keSIsICJuYW1lIjogIlVTRCBDb2luIiwgInZlcnNpb24iOiAiMiJ9fSwgeyJzY2hlbWUiOiAiZXhhY3QiLCAibmV0d29yayI6ICJzb2xhbmE6NWV5a3Q0VXNGdjhQOE5KZFRSRXBZMXZ6cUtxWkt2ZHAiLCAiYW1vdW50IjogIjIwMDAwIiwgInBheVRvIjogIjNoUWd1Q2FXNDY5ZFg0Vm54WERNVkJ4WjFiUHZKQVUxMkp5ZXVidGpZTDVGIiwgIm1heFRpbWVvdXRTZWNvbmRzIjogMTc5MjA4MzM0OSwgImFzc2V0IjogIkVQakZXZGQ1QXVmcVNTcWVNMnFOMXh6eWJhcEM4RzR3RUdHa1p3eVREdDF2IiwgImV4dHJhIjogeyJzdHJpcGVfcGF5bWVudF9pbnRlbnRfaWQiOiAicGlfM1VRcnZaSWZwVmU1N0JOVTFaY0drQllsIiwgInN0cmlwZV9tb2RlIjogImN1c3RvZHkiLCAibmFtZSI6ICJVU0RDIiwgInZlcnNpb24iOiAiMiIsICJmZWVQYXllciI6ICJIYzNzZEVBc0NHUWNwZ2Zpdnl3b2c5dXd0azhnVUJVWmdzeGRNRTFFSnk4OCJ9fSwgeyJzY2hlbWUiOiAiZXhhY3QiLCAibmV0d29yayI6ICJlaXAxNTU6MTk2IiwgImFtb3VudCI6ICIyMDAwMCIsICJwYXlUbyI6ICIweDYxRmRiZTY2YzFBRWFGNDkxYjhlMTIxQzgzMDcwYWE3NTBERENhZGEiLCAibWF4VGltZW91dFNlY29uZHMiOiAxNzkyMDgzMzQ5LCAiYXNzZXQiOiAiMHg3NGI3ZjE2MzM3Yjg5NzIwMjdmNjE5NmExN2E2MzFhYzZkZTI2ZDIyIiwgImV4dHJhIjogeyJuYW1lIjogIlVTRCBDb2luIiwgInZlcnNpb24iOiAiMiJ9fSwgeyJzY2hlbWUiOiAiZXhhY3QiLCAibmV0d29yayI6ICJlaXAxNTU6MTM3IiwgImFtb3VudCI6ICIyMDAwMCIsICJwYXlUbyI6ICIweEY1QjU5YUE0RDIzNjIxQjM4MkFjNTY0NjVlMmE3ODQzMkNFNzY4Q0EiLCAibWF4VGltZW91dFNlY29uZHMiOiAxNzkyMDgzMzQ5LCAiYXNzZXQiOiAiMHgzYzQ5OWM1NDJjRUY1RTM4MTFlMTE5MmNlNzBkOGNjMDNkNWMzMzU5IiwgImV4dHJhIjogeyJuYW1lIjogIlVTRCBDb2luIiwgInZlcnNpb24iOiAiMiJ9fV0sICJyZXNvdXJjZSI6IHsidXJsIjogImh0dHBzOi8vYWdlbnRzLmFsbGl1bS5zby9hcGkvdjEvZGV2ZWxvcGVyL3ByaWNlcyIsICJkZXNjcmlwdGlvbiI6ICJBUEkgcmVxdWVzdDogL2FwaS92MS9kZXZlbG9wZXIvcHJpY2VzIiwgIm1pbWVUeXBlIjogImFwcGxpY2F0aW9uL2pzb24ifSwgImV4dGVuc2lvbnMiOiB7ImJhemFhciI6IHsiaW5mbyI6IHsiaW5wdXQiOiB7InR5cGUiOiAiaHR0cCIsICJtZXRob2QiOiAiUE9TVCIsICJib2R5VHlwZSI6ICJqc29uIiwgImJvZHkiOiBbeyJ0b2tlbl9hZGRyZXNzIjogIjB4QzAyYWFBMzliMjIzRkU4RDBBMGU1QzRGMjdlQUQ5MDgzQzc1NkNjMiIsICJjaGFpbiI6ICJldGhlcmV1bSJ9LCB7InRva2VuX2FkZHJlc3MiOiAiU28xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMiIsICJjaGFpbiI6ICJzb2xhbmEifV19LCAib3V0cHV0IjogeyJ0eXBlIjogImpzb24iLCAiZXhhbXBsZSI6IHsiaXRlbXMiOiBbeyJ0aW1lc3RhbXAiOiAiMjAyNS0wNi0xN1QxODowMDowMFoiLCAiY2hhaW4iOiAiZXRoZXJldW0iLCAiYWRkcmVzcyI6ICIweEMwMmFhQTM5YjIyM0ZFOEQwQTBlNUM0RjI3ZUFEOTA4M0M3NTZDYzIiLCAiZGVjaW1hbHMiOiAxOCwgInByaWNlIjogMjUwMC41LCAib3BlbiI6IDI0OTUuMCwgImhpZ2giOiAyNTEwLjAsICJjbG9zZSI6IDI1MDAuNSwgImxvdyI6IDI0OTAuMH1dfX19LCAic2NoZW1hIjogeyIkc2NoZW1hIjogImh0dHBzOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LzIwMjAtMTIvc2NoZW1hIiwgInR5cGUiOiAib2JqZWN0IiwgInByb3BlcnRpZXMiOiB7ImlucHV0IjogeyJ0eXBlIjogIm9iamVjdCIsICJwcm9wZXJ0aWVzIjogeyJ0eXBlIjogeyJ0eXBlIjogInN0cmluZyIsICJjb25zdCI6ICJodHRwIn0sICJtZXRob2QiOiB7InR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbIlBPU1QiXX0sICJib2R5VHlwZSI6IHsidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsianNvbiJdfSwgImJvZHkiOiB7InR5cGUiOiAib2JqZWN0IiwgInByb3BlcnRpZXMiOiB7InRva2VuX2FkZHJlc3MiOiB7InR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIlRva2VuIGNvbnRyYWN0IGFkZHJlc3MifSwgImNoYWluIjogeyJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJCbG9ja2NoYWluIG5ldHdvcmsgKGUuZy4gZXRoZXJldW0sIHNvbGFuYSwgYmFzZSkifX0sICJyZXF1aXJlZCI6IFsidG9rZW5fYWRkcmVzcyIsICJjaGFpbiJdfX0sICJyZXF1aXJlZCI6IFsidHlwZSIsICJib2R5VHlwZSIsICJib2R5IiwgIm1ldGhvZCJdLCAiYWRkaXRpb25hbFByb3BlcnRpZXMiOiBmYWxzZX0sICJvdXRwdXQiOiB7InR5cGUiOiAib2JqZWN0IiwgInByb3BlcnRpZXMiOiB7InR5cGUiOiB7InR5cGUiOiAic3RyaW5nIn0sICJleGFtcGxlIjogeyJ0eXBlIjogIm9iamVjdCJ9fX19LCAicmVxdWlyZWQiOiBbImlucHV0Il19fX19\r\nvary: Accept-Encoding\r\nx-content-type-options: nosniff\r\nvia: 1.1 google\r\ncf-cache-status: DYNAMIC\r\nstrict-transport-security: max-age=31536000; includeSubDomains\r\ncf-ray: a4b0590b9bc1c746-IAD\r\n\r\n{\"x402Version\":2,\"error\":\"Payment Required!\",\"accepts\":[{\"scheme\":\"exact\",\"network\":\"eip155:8453\",\"amount\":\"20000\",\"payTo\":\"0xfe52ea3b128968bfe67aa4ff652680c5976d8935\",\"maxTimeoutSeconds\":1792083349,\"asset\":\"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\"extra\":{\"stripe_payment_intent_id\":\"pi_3UQrvZIfpVe57BNU1ZcGkBYl\",\"stripe_mode\":\"custody\",\"name\":\"USD Coin\",\"version\":\"2\"}},{\"scheme\":\"exact\",\"network\":\"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp\",\"amount\":\"20000\",\"payTo\":\"3hQguCaW469dX4VnxXDMVBxZ1bPvJAU12JyeubtjYL5F\",\"maxTimeoutSeconds\":1792083349,\"asset\":\"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\",\"extra\":{\"stripe_payment_intent_id\":\"pi_3UQrvZIfpVe57BNU1ZcGkBYl\",\"stripe_mode\":\"custody\",\"name\":\"USDC\",\"version\":\"2\",\"feePayer\":\"Hc3sdEAsCGQcpgfivywog9uwtk8gUBUZgsxdME1EJy88\"}},{\"scheme\":\"exact\",\"network\":\"eip155:196\",\"amount\":\"20000\",\"payTo\":\"0x61Fdbe66c1AEaF491b8e121C83070aa750DDCada\",\"maxTimeoutSeconds\":1792083349,\"asset\":\"0x74b7f16337b8972027f6196a17a631ac6de26d22\",\"extra\":{\"name\":\"USD Coin\",\"version\":\"2\"}},{\"scheme\":\"exact\",\"network\":\"eip155:137\",\"amount\":\"20000\",\"payTo\":\"0xF5B59aA4D23621B382Ac56465e2a78432CE768CA\",\"maxTimeoutSeconds\":1792083349,\"asset\":\"0x3c499c542cEF5E3811e1192ce70d8cc03d5c3359\",\"extra\":{\"name\":\"USD Coin\",\"version\":\"2\"}}],\"resource\":{\"url\":\"https://agents.allium.so/api/v1/developer/prices\",\"description\":\"API request: /api/v1/developer/prices\",\"mimeType\":\"application/json\"},\"extensions\":{\"bazaar\":{\"info\":{\"input\":{\"type\":\"http\",\"method\":\"POST\",\"bodyType\":\"json\",\"body\":[{\"token_address\":\"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\",\"chain\":\"ethereum\"},{\"token_address\":\"So11111111111111111111111111111111111111112\",\"chain\":\"solana\"}]},\"output\":{\"type\":\"json\",\"example\":{\"items\":[{\"timestamp\":\"2025-06-17T18:00:00Z\",\"chain\":\"ethereum\",\"address\":\"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\",\"decimals\":18,\"price\":2500.5,\"open\":2495.0,\"high\":2510.0,\"close\":2500.5,\"low\":2490.0}]}}},\"schema\":{\"$schema\":\"https://json-schema.org/draft/2020-12/schema\",\"type\":\"object\",\"properties\":{\"input\":{\"type\":\"object\",\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"http\"},\"method\":{\"type\":\"string\",\"enum\":[\"POST\"]},\"bodyType\":{\"type\":\"string\",\"enum\":[\"json\"]},\"body\":{\"type\":\"object\",\"properties\":{\"token_address\":{\"type\":\"string\",\"description\":\"Token contract address\"},\"chain\":{\"type\":\"string\",\"description\":\"Blockchain network (e.g. ethereum, solana, base)\"}},\"required\":[\"token_address\",\"chain\"]}},\"required\":[\"type\",\"bodyType\",\"body\",\"method\"],\"additionalProperties\":false},\"output\":{\"type\":\"object\",\"properties\":{\"type\":{\"type\":\"string\"},\"example\":{\"type\":\"object\"}}}},\"required\":[\"input\"]}}}}\n== realtime api host? ==\n403\n",
"type": "text"
}
]
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-be3844a6623164bf",
"is_error": false,
"tool_kind": "shell"
}›Thinking…
So the API works, and there IS a free endpoint: /api/v1/supported-chains/realtime-apis/simple — "This endpoint is free — no payment required." Also /docs/ endpoints might be free (rate-limited docs bucket). Let me test the free endpoint to build a runnable example.
Also check if the docs endpoints are free. Let's test.
Plan: Build a small example that works without credentials:
- A Python (or Node) script that calls the free supported-chains endpoint and pretty-prints which chains support each realtime endpoint.
- Optionally, an x402/Tempo MPP-paid call scaffolded but gated behind env var (private key) — documented, not executed.
That's "light": hosted product via API, no local stacks.
Let me test the free endpoints and docs endpoints.
echo "== supported-chains (free) =="; timeout 25 curl -sS -o /tmp/chains.json -w "%{http_code}\n" "https://agents.allium.so/api/v1/supported-chains/realtime-apis/simple"; head -c 600 /tmp/chains.json; echo; echo "== docs endpoints =="; timeout 25 curl -sS -o /tmp/d.json -w "%{http_code}\n" "https://agents.allium.so/api/v1/docs/search?query=token%20transfers"; head -c 400 /tmp/d.json== supported-chains (free) ==
== supported-chains (free) ==
200
{"/api/v1/developer/wallet/balances/history":["arbitrum","avalanche","bsc","base","bitcoin","celo","ethereum","near","optimism","polygon","robinhood","solana","stellar","unichain","x_layer"],"/api/v1/developer/wallet/balances":["arbitrum","arc","avalanche","bsc","base","bitcoin","celo","ethereum","hyperevm","monad","near","optimism","polygon","robinhood","solana","stellar","unichain","x_layer","xdc_network"],"/api/v1/developer/wallet/transactions":["arbitrum","arc","avalanche","bsc","base","bitcoin","celo","ethereum","hyperevm","monad","near","optimism","polygon","robinhood","solana","stellar"
== docs endpoints ==
404
{"detail":"Not Found"}Recorded tool call
{
"type": "tool_call",
"seq": 51,
"ts": "2026-10-15T16:54:57.682Z",
"name": "bash",
"turn": 1,
"input": {
"command": "echo \"== supported-chains (free) ==\"; timeout 25 curl -sS -o /tmp/chains.json -w \"%{http_code}\\n\" \"https://agents.allium.so/api/v1/supported-chains/realtime-apis/simple\"; head -c 600 /tmp/chains.json; echo; echo \"== docs endpoints ==\"; timeout 25 curl -sS -o /tmp/d.json -w \"%{http_code}\\n\" \"https://agents.allium.so/api/v1/docs/search?query=token%20transfers\"; head -c 400 /tmp/d.json"
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-abd1ca98493f6375",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 54,
"ts": "2026-10-15T16:54:58.933Z",
"turn": 1,
"output": {
"content": [
{
"text": "== supported-chains (free) ==\n200\n{\"/api/v1/developer/wallet/balances/history\":[\"arbitrum\",\"avalanche\",\"bsc\",\"base\",\"bitcoin\",\"celo\",\"ethereum\",\"near\",\"optimism\",\"polygon\",\"robinhood\",\"solana\",\"stellar\",\"unichain\",\"x_layer\"],\"/api/v1/developer/wallet/balances\":[\"arbitrum\",\"arc\",\"avalanche\",\"bsc\",\"base\",\"bitcoin\",\"celo\",\"ethereum\",\"hyperevm\",\"monad\",\"near\",\"optimism\",\"polygon\",\"robinhood\",\"solana\",\"stellar\",\"unichain\",\"x_layer\",\"xdc_network\"],\"/api/v1/developer/wallet/transactions\":[\"arbitrum\",\"arc\",\"avalanche\",\"bsc\",\"base\",\"bitcoin\",\"celo\",\"ethereum\",\"hyperevm\",\"monad\",\"near\",\"optimism\",\"polygon\",\"robinhood\",\"solana\",\"stellar\"\n== docs endpoints ==\n404\n{\"detail\":\"Not Found\"}",
"type": "text"
}
]
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-abd1ca98493f6375",
"is_error": false,
"tool_kind": "shell"
}timeout 25 curl -sSL https://docs.allium.so/ai/machine-payments/overview.md | head -80; echo "########## tempo-mpp"; timeout 25 curl -sSL https://docs.allium.so/ai/machine-payments/tempo-mpp.md | head -120
> ## Documentation Index
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.allium.so/llms.txt
> Use this file to discover all available pages before exploring further.
# Overview
> Machine payment protocols for AI agents and developers to access Allium's blockchain data with USDC.
Machine payments enable AI agents and developers to pay for blockchain data per request using USDC — no API key, no subscription, no human in the loop.
Allium supports two machine payment protocols:
| | **Tempo MPP** | **x402** |
| - | - | - |
| **Complexity** | One function call | Manual 402 flow |
| **Best for** | Quick integration, agents | Full control, custom signing |
| **Setup** | Install SDK + private key | Privy wallet + signing logic |
## Protocols
<CardGroup cols={2}>
<Card title="Tempo MPP" icon="bolt" href="/ai/machine-payments/tempo-mpp">
The simplest path — one function call handles the entire payment flow
</Card>
<Card title="x402" icon="credit-card" href="/ai/machine-payments/x402">
Full manual control over 402 negotiation, EIP-712 signing, and payment
</Card>
</CardGroup>
## Agent Skills
Don't want to manage payment code? Install pre-built agent skills and let your AI agent query blockchain data with automatic payment.
<Card title="Agent Skills" icon="wand-magic-sparkles" href="/ai/machine-payments/agent-skills">
Set up machine payments with AI agents in one command
</Card>
## Endpoints & Pricing
<Card title="Endpoints & Pricing" icon="code" href="/ai/machine-payments/endpoints-pricing">
All payment-enabled endpoints, pricing, rate limits, and error codes
</Card>
########## tempo-mpp
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.allium.so/llms.txt
> Use this file to discover all available pages before exploring further.
# Tempo MPP
> The simplest way to make paid API calls — one function call handles the entire 402 payment flow.
Tempo Machine Payment Protocol (Tempo MPP) is the simplest way to make paid API calls to Allium. The `Client` wrapper handles the entire 402 negotiation, signing, and retry flow — you just make requests as normal.
## Quickstart with Agent
The fastest way to get started — let your AI agent handle setup and payments for you.
<Steps>
<Step title="Install allium-cli">
```bash theme={null}
curl -sSL https://agents.allium.so/cli/install.sh | sh
```
<Warning>
[allium-cli](https://github.com/Allium-Science/allium-cli) is still in early beta.
</Warning>
</Step>
<Step title="Install agent skills">
```bash theme={null}
npx skills add allium-labs/skills --yes
```
</Step>
<Step title="Open your agent">
Start Claude Code, Codex, or any compatible AI agent.
</Step>
<Step title="Ask a question">
```
Set up Allium and fetch the latest balances for vitalik.eth
```
</Step>
</Steps>
## How It Works
<Steps>
<Step title="Send request">
Make an API request using the Tempo `Client`.
</Step>
<Step title="Client handles 402">
The client automatically receives the `402 Payment Required` response, signs a USDC payment authorization, and retries the request.
</Step>
<Step title="Get data">
You receive your data with a `200` response. The payment flow is invisible to your code.
</Step>
</Steps>
## Supported Tokens & Networks
Tempo MPP payments use **USDC** on the Tempo network:
| Network | USDC Contract Address |
| - | - |
| **Tempo** (mainnet) | `0x20c000000000000000000000b9537d11c60e8b50` |
## Implementation
### Install
```bash theme={null}
pip install "pympp[tempo]"
```
### Set Up Your Account
Create a `TempoAccount` from your private key. This account will sign payments on your behalf.
```bash theme={null}
export YOUR_PRIVATE_KEY="your-eth-private-key"
```
### Make a Paid API Call
```python theme={null}
from mpp.client import Client
from mpp.methods.tempo import tempo, TempoAccount, ChargeIntent
from mpp.methods.tempo._defaults import TESTNET_RPC_URL, TESTNET_CHAIN_ID
import os
account = TempoAccount.from_key(os.getenv("YOUR_PRIVATE_KEY"))
async with Client(methods=[
tempo(
account=account,
rpc_url=TESTNET_RPC_URL,
intents={"charge": ChargeIntent()},
)
]) as client:
response = await client.post(
"https://agents.allium.so/api/v1/developer/prices",
json=[{"chain": "solana", "token_address": "So11111111111111111111111111111111111111112"}],
)
print(response.json())
```
The `Client` intercepts the `402` response, constructs and signs the payment using your `TempoAccount`, and retries the request automatically. You just see the final `200` response with your data.
Recorded tool call
{
"type": "tool_call",
"seq": 52,
"ts": "2026-10-15T16:54:57.682Z",
"name": "bash",
"turn": 1,
"input": {
"command": "timeout 25 curl -sSL https://docs.allium.so/ai/machine-payments/overview.md | head -80; echo \"########## tempo-mpp\"; timeout 25 curl -sSL https://docs.allium.so/ai/machine-payments/tempo-mpp.md | head -120"
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-9d93282263987500",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 53,
"ts": "2026-10-15T16:54:58.471Z",
"turn": 1,
"output": {
"content": [
{
"text": "> ## Documentation Index\n> Fetch the complete documentation index at: https://docs.allium.so/llms.txt\n> Use this file to discover all available pages before exploring further.\n\n# Overview\n\n> Machine payment protocols for AI agents and developers to access Allium's blockchain data with USDC.\n\nMachine payments enable AI agents and developers to pay for blockchain data per request using USDC — no API key, no subscription, no human in the loop.\n\nAllium supports two machine payment protocols:\n\n| | **Tempo MPP** | **x402** |\n| - | - | - |\n| **Complexity** | One function call | Manual 402 flow |\n| **Best for** | Quick integration, agents | Full control, custom signing |\n| **Setup** | Install SDK + private key | Privy wallet + signing logic |\n\n## Protocols\n\n<CardGroup cols={2}>\n <Card title=\"Tempo MPP\" icon=\"bolt\" href=\"/ai/machine-payments/tempo-mpp\">\n The simplest path — one function call handles the entire payment flow\n </Card>\n\n <Card title=\"x402\" icon=\"credit-card\" href=\"/ai/machine-payments/x402\">\n Full manual control over 402 negotiation, EIP-712 signing, and payment\n </Card>\n</CardGroup>\n\n## Agent Skills\n\nDon't want to manage payment code? Install pre-built agent skills and let your AI agent query blockchain data with automatic payment.\n\n<Card title=\"Agent Skills\" icon=\"wand-magic-sparkles\" href=\"/ai/machine-payments/agent-skills\">\n Set up machine payments with AI agents in one command\n</Card>\n\n## Endpoints & Pricing\n\n<Card title=\"Endpoints & Pricing\" icon=\"code\" href=\"/ai/machine-payments/endpoints-pricing\">\n All payment-enabled endpoints, pricing, rate limits, and error codes\n</Card>\n########## tempo-mpp\n> ## Documentation Index\n> Fetch the complete documentation index at: https://docs.allium.so/llms.txt\n> Use this file to discover all available pages before exploring further.\n\n# Tempo MPP\n\n> The simplest way to make paid API calls — one function call handles the entire 402 payment flow.\n\nTempo Machine Payment Protocol (Tempo MPP) is the simplest way to make paid API calls to Allium. The `Client` wrapper handles the entire 402 negotiation, signing, and retry flow — you just make requests as normal.\n\n## Quickstart with Agent\n\nThe fastest way to get started — let your AI agent handle setup and payments for you.\n\n<Steps>\n <Step title=\"Install allium-cli\">\n ```bash theme={null}\n curl -sSL https://agents.allium.so/cli/install.sh | sh\n ```\n\n <Warning>\n [allium-cli](https://github.com/Allium-Science/allium-cli) is still in early beta.\n </Warning>\n </Step>\n\n <Step title=\"Install agent skills\">\n ```bash theme={null}\n npx skills add allium-labs/skills --yes\n ```\n </Step>\n\n <Step title=\"Open your agent\">\n Start Claude Code, Codex, or any compatible AI agent.\n </Step>\n\n <Step title=\"Ask a question\">\n ```\n Set up Allium and fetch the latest balances for vitalik.eth\n ```\n </Step>\n</Steps>\n\n## How It Works\n\n<Steps>\n <Step title=\"Send request\">\n Make an API request using the Tempo `Client`.\n </Step>\n\n <Step title=\"Client handles 402\">\n The client automatically receives the `402 Payment Required` response, signs a USDC payment authorization, and retries the request.\n </Step>\n\n <Step title=\"Get data\">\n You receive your data with a `200` response. The payment flow is invisible to your code.\n </Step>\n</Steps>\n\n## Supported Tokens & Networks\n\nTempo MPP payments use **USDC** on the Tempo network:\n\n| Network | USDC Contract Address |\n| - | - |\n| **Tempo** (mainnet) | `0x20c000000000000000000000b9537d11c60e8b50` |\n\n## Implementation\n\n### Install\n\n```bash theme={null}\npip install \"pympp[tempo]\"\n```\n\n### Set Up Your Account\n\nCreate a `TempoAccount` from your private key. This account will sign payments on your behalf.\n\n```bash theme={null}\nexport YOUR_PRIVATE_KEY=\"your-eth-private-key\"\n```\n\n### Make a Paid API Call\n\n```python theme={null}\nfrom mpp.client import Client\r\nfrom mpp.methods.tempo import tempo, TempoAccount, ChargeIntent\r\nfrom mpp.methods.tempo._defaults import TESTNET_RPC_URL, TESTNET_CHAIN_ID\r\nimport os\r\n\r\naccount = TempoAccount.from_key(os.getenv(\"YOUR_PRIVATE_KEY\"))\r\n\r\nasync with Client(methods=[\r\n tempo(\r\n account=account,\r\n rpc_url=TESTNET_RPC_URL,\r\n intents={\"charge\": ChargeIntent()},\r\n )\r\n]) as client:\r\n response = await client.post(\r\n \"https://agents.allium.so/api/v1/developer/prices\",\r\n json=[{\"chain\": \"solana\", \"token_address\": \"So11111111111111111111111111111111111111112\"}],\r\n )\r\n print(response.json())\n```\n\nThe `Client` intercepts the `402` response, constructs and signs the payment using your `TempoAccount`, and retries the request automatically. You just see the final `200` response with your data.\n",
"type": "text"
}
]
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-9d93282263987500",
"is_error": false,
"tool_kind": "shell"
}›Thinking…
Now I have enough. There is a free endpoint I can actually call: /api/v1/supported-chains/realtime-apis/simple. Paid data endpoints need either an API key (requires human signup at app.allium.so/join) or USDC-funded wallet (machine payments).
Let me also check the docs MCP "billing-and-limits" for MCP credits pricing, and see if there is documented plan pricing (Explorer Units). Let me quickly grab billing-and-limits.md and check MCP free tier limits.
Then build the example. Plan for the example repo:
allium-example/directory with:README.md— pricing summary, setup, what works without credentialschains.py(orallium_example.py) — zero-dependency Python script using urllib: (1) fetch free supported-chains map, (2) show coverage per endpoint, (3) attempt a paid prices call using eitherALLIUM_API_KEY(X-API-KEY against api.allium.so? need correct host) or machine payments.
Hmm — what host do API-key requests go to? Let me check the realtime API docs for the base URL. api.allium.so returned 403 at root. Let me fetch /api/developer/prices/token-latest-price.md for the base URL and auth header.
Also check the x402 approach: with ALLIUM_PRIVATE_KEY, could use x402 via the x402 python package... that's extra deps. Better: keep the paid path in a separate script using pympp (optional dependency, documented but not installed/run). Keep the zero-dep free script as the thing I actually run.
Let me fetch token-latest-price.md.
timeout 25 curl -sSL https://docs.allium.so/api/developer/prices/token-latest-price.md | head -100; echo "##### billing-and-limits"; timeout 25 curl -sSL https://docs.allium.so/ai/mcp/tools-reference/billing-and-limits.md | head -70
> ## Documentation Index
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.allium.so/llms.txt
> Use this file to discover all available pages before exploring further.
# Fetch latest token price
> Get the latest price for the given token addresses and chains.
export const SupportedChainsList = props => {
const [data, setData] = useState(null);
const [isLoading, setIsLoading] = useState(true);
useEffect(() => {
const fetchData = async () => {
try {
const response = await fetch("https://api.allium.so/api/v1/supported-chains/realtime-apis", {
method: "GET"
});
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const responseData = await response.json();
const filteredData = responseData.filter(entry => {
const product = entry.endpoints[props.product_name];
return product !== null;
});
setData(filteredData);
setIsLoading(false);
} catch (error) {
setIsLoading(false);
}
};
fetchData();
}, []);
if (isLoading) {
return <div>Loading chain information...</div>;
}
if (!data) {
return <div>No data available</div>;
}
const isCustomSQL = props.product_name === "custom_sql";
return <div>
{data.length > 0 && <table className="w-full">
<thead>
<tr>
<th>Chain</th>
<th>Chain ID</th>
<th>Status</th>
{isCustomSQL && <th>Tables</th>}
</tr>
</thead>
<tbody>
{data.map(chain => {
const endpoint = chain.endpoints[props.product_name];
return <tr key={chain.id}>
<td style={{
padding: '12px'
}}>{chain.label}</td>
<td style={{
padding: '12px'
}}><code>{chain.id}</code></td>
<td style={{
padding: '12px'
}}>{endpoint ? endpoint.availability === "beta" ? "🌱 Beta" : "✅ Supported" : "❌ Not Supported"}</td>
{isCustomSQL && <td style={{
padding: '12px'
}}>
{endpoint && endpoint.tables ? endpoint.tables.map(t => t.name).join(", ") : "-"}
</td>}
</tr>;
})}
</tbody>
</table>}
</div>;
};
This endpoint returns the latest price and OHLC values for a list of tokens. Prices and OHLC values are aggregated from trades in the most recent completed minute interval. If no trades occurred in the last minute, the endpoint returns the most recent available data.
For inactive tokens, the last known price is derived from the most recent on-chain trade. If no trade has occurred within the past 7 days, the endpoint will return no data for that token. We recommend checking the timestamp included in the response, which corresponds to the last trade time.
<Note>
The request body must be an array, even for a single token:
```json theme={null}
[
{
"token_address": "48H5FxoWAZxRoqv5Gav9W78p36nQc4Kk6qGGdQdepump",
"chain": "solana"
}
]
```
</Note>
## Pagination
This endpoint returns prices for up to 200 tokens in a single request.
## Supported Chains
<SupportedChainsList product_name="token_latest_price" />
##### billing-and-limits
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.allium.so/llms.txt
> Use this file to discover all available pages before exploring further.
# Billing & limits
> Which MCP tools consume credits, how much data comes back, and why your tool list may be shorter than the docs.
MCP tool calls bill against the same Explorer Unit and Developer Unit pools as the rest of Allium.
## What costs credits
| Tool group | Cost |
| :- | :- |
| `run_sql_query`, `create_explorer_query`, `run_explorer_query` | **Explorer Units**, based on the warehouse and how long the query runs |
| Realtime and Hyperliquid tools | **Developer Units**, a fixed cost per endpoint |
| `update_explorer_query`, `delete_explorer_query` | Metered as tool calls; no query compute |
| Everything else | Free |
**Free tools:** `search_schemas`, `search_docs`, `browse_docs`, `search_terminal`, `get_terminal_results`, `list_skills`, `get_skill`, `list_compute_profiles`, `get_query_run_results`, `get_explorer_query`, `list_explorer_queries`, `get_realtime_supported_chains`, all dashboard, visual, and sharing tools.
<Info>
`get_query_run_results` is free: the Explorer Units were charged when the run was queued. Poll as long as you need.
</Info>
<Note>
**Two different meters.** Realtime and Hyperliquid tools charge Developer Units per endpoint. Every metered MCP tool call is also checked against your **Explorer Unit** allowance before it runs, so a realtime call can be refused when that allowance is exhausted. Check both balances if you hit an unexpected limit error.
</Note>
### Explorer Units
Query cost scales with the compute profile and how long the query runs. `get_query_run_results` returns the run's exact Explorer Unit cost.
<Warning>
Running SQL with `run_sql_query` and then saving the same SQL with `create_explorer_query` bills the compute twice. If the result might be reused, use `create_explorer_query(run_on_creation=true)` from the start.
</Warning>
### Developer Units
Realtime tools call Allium's [Realtime APIs](/api/developer/overview), so they consume between 20 and 60 Developer Units per call depending on the endpoint. Batched calls multiply that by the number of inputs: a `get_realtime_token_latest_price` call with 10 payloads costs 10x the single-call rate.
See [API Credits](/api/developer/compute-units) for the full per-endpoint table, and [Realtime data](/ai/mcp/tools-reference/realtime#every-tool-names-its-own-docs) for the tool-to-endpoint mapping.
### When you run out
If your organization is over its credit cap or overage limit, billed tools fail with an error explaining the limit. Free tools keep working. Contact [support@allium.so](mailto:support@allium.so) to raise a limit.
## Row limits
SQL results pass two caps: one on the query run, one on what the tool hands back.
| Cap | Value | Applies to |
| :- | :- | :- |
| Query result rows | **1,000** | A `run_sql_query` run |
| Query result rows | **10,000** by default, configurable per organization | A saved-query run (`create_explorer_query` / `run_explorer_query`) |
| Tool response rows | **50** by default | What `get_query_run_results` hands your agent |
Raise the last one with `row_limit`, or pass `null` or `0` for no tool-side truncation. The default is small so a wide result doesn't fill your agent's context window.
<Tip>
If you need more than 1,000 rows, aggregate in SQL. A `GROUP BY` on a large blockchain table is cheaper than moving rows into your agent. When you need the rows themselves, save the query with `create_explorer_query`, which has the higher cap.
</Tip>
Other limits:
| Limit | Value |
| :- | :- |
| `get_query_run_results` poll window | 180 seconds max per call |
| `search_schemas` / `search_terminal` hits | 20 max, 5 by default |
| `get_terminal_results` rows | Set by `max_rows` |
Recorded tool call
{
"type": "tool_call",
"seq": 57,
"ts": "2026-10-15T16:55:08.539Z",
"name": "bash",
"turn": 1,
"input": {
"command": "timeout 25 curl -sSL https://docs.allium.so/api/developer/prices/token-latest-price.md | head -100; echo \"##### billing-and-limits\"; timeout 25 curl -sSL https://docs.allium.so/ai/mcp/tools-reference/billing-and-limits.md | head -70"
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-b74042af57db1766",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 60,
"ts": "2026-10-15T16:55:12.384Z",
"turn": 1,
"output": {
"content": [
{
"text": "> ## Documentation Index\n> Fetch the complete documentation index at: https://docs.allium.so/llms.txt\n> Use this file to discover all available pages before exploring further.\n\n# Fetch latest token price\n\n> Get the latest price for the given token addresses and chains.\n\nexport const SupportedChainsList = props => {\n const [data, setData] = useState(null);\n const [isLoading, setIsLoading] = useState(true);\n useEffect(() => {\n const fetchData = async () => {\n try {\n const response = await fetch(\"https://api.allium.so/api/v1/supported-chains/realtime-apis\", {\n method: \"GET\"\n });\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n const responseData = await response.json();\n const filteredData = responseData.filter(entry => {\n const product = entry.endpoints[props.product_name];\n return product !== null;\n });\n setData(filteredData);\n setIsLoading(false);\n } catch (error) {\n setIsLoading(false);\n }\n };\n fetchData();\n }, []);\n if (isLoading) {\n return <div>Loading chain information...</div>;\n }\n if (!data) {\n return <div>No data available</div>;\n }\n const isCustomSQL = props.product_name === \"custom_sql\";\n return <div>\n {data.length > 0 && <table className=\"w-full\">\n <thead>\n <tr>\n <th>Chain</th>\n <th>Chain ID</th>\n <th>Status</th>\n {isCustomSQL && <th>Tables</th>}\n </tr>\n </thead>\n <tbody>\n {data.map(chain => {\n const endpoint = chain.endpoints[props.product_name];\n return <tr key={chain.id}>\n <td style={{\n padding: '12px'\n }}>{chain.label}</td>\n <td style={{\n padding: '12px'\n }}><code>{chain.id}</code></td>\n <td style={{\n padding: '12px'\n }}>{endpoint ? endpoint.availability === \"beta\" ? \"🌱 Beta\" : \"✅ Supported\" : \"❌ Not Supported\"}</td>\n {isCustomSQL && <td style={{\n padding: '12px'\n }}>\n {endpoint && endpoint.tables ? endpoint.tables.map(t => t.name).join(\", \") : \"-\"}\n </td>}\n </tr>;\n })}\n </tbody>\n </table>}\n </div>;\n};\n\nThis endpoint returns the latest price and OHLC values for a list of tokens. Prices and OHLC values are aggregated from trades in the most recent completed minute interval. If no trades occurred in the last minute, the endpoint returns the most recent available data.\n\nFor inactive tokens, the last known price is derived from the most recent on-chain trade. If no trade has occurred within the past 7 days, the endpoint will return no data for that token. We recommend checking the timestamp included in the response, which corresponds to the last trade time.\n\n<Note>\n The request body must be an array, even for a single token:\n\n ```json theme={null}\n [\n {\n \"token_address\": \"48H5FxoWAZxRoqv5Gav9W78p36nQc4Kk6qGGdQdepump\",\n \"chain\": \"solana\"\n }\n ]\n ```\n</Note>\n\n## Pagination\n\nThis endpoint returns prices for up to 200 tokens in a single request.\n\n## Supported Chains\n\n<SupportedChainsList product_name=\"token_latest_price\" />\n\n##### billing-and-limits\n> ## Documentation Index\n> Fetch the complete documentation index at: https://docs.allium.so/llms.txt\n> Use this file to discover all available pages before exploring further.\n\n# Billing & limits\n\n> Which MCP tools consume credits, how much data comes back, and why your tool list may be shorter than the docs.\n\nMCP tool calls bill against the same Explorer Unit and Developer Unit pools as the rest of Allium.\n\n## What costs credits\n\n| Tool group | Cost |\n| :- | :- |\n| `run_sql_query`, `create_explorer_query`, `run_explorer_query` | **Explorer Units**, based on the warehouse and how long the query runs |\n| Realtime and Hyperliquid tools | **Developer Units**, a fixed cost per endpoint |\n| `update_explorer_query`, `delete_explorer_query` | Metered as tool calls; no query compute |\n| Everything else | Free |\n\n**Free tools:** `search_schemas`, `search_docs`, `browse_docs`, `search_terminal`, `get_terminal_results`, `list_skills`, `get_skill`, `list_compute_profiles`, `get_query_run_results`, `get_explorer_query`, `list_explorer_queries`, `get_realtime_supported_chains`, all dashboard, visual, and sharing tools.\n\n<Info>\n `get_query_run_results` is free: the Explorer Units were charged when the run was queued. Poll as long as you need.\n</Info>\n\n<Note>\n **Two different meters.** Realtime and Hyperliquid tools charge Developer Units per endpoint. Every metered MCP tool call is also checked against your **Explorer Unit** allowance before it runs, so a realtime call can be refused when that allowance is exhausted. Check both balances if you hit an unexpected limit error.\n</Note>\n\n### Explorer Units\n\nQuery cost scales with the compute profile and how long the query runs. `get_query_run_results` returns the run's exact Explorer Unit cost.\n\n<Warning>\n Running SQL with `run_sql_query` and then saving the same SQL with `create_explorer_query` bills the compute twice. If the result might be reused, use `create_explorer_query(run_on_creation=true)` from the start.\n</Warning>\n\n### Developer Units\n\nRealtime tools call Allium's [Realtime APIs](/api/developer/overview), so they consume between 20 and 60 Developer Units per call depending on the endpoint. Batched calls multiply that by the number of inputs: a `get_realtime_token_latest_price` call with 10 payloads costs 10x the single-call rate.\n\nSee [API Credits](/api/developer/compute-units) for the full per-endpoint table, and [Realtime data](/ai/mcp/tools-reference/realtime#every-tool-names-its-own-docs) for the tool-to-endpoint mapping.\n\n### When you run out\n\nIf your organization is over its credit cap or overage limit, billed tools fail with an error explaining the limit. Free tools keep working. Contact [support@allium.so](mailto:support@allium.so) to raise a limit.\n\n## Row limits\n\nSQL results pass two caps: one on the query run, one on what the tool hands back.\n\n| Cap | Value | Applies to |\n| :- | :- | :- |\n| Query result rows | **1,000** | A `run_sql_query` run |\n| Query result rows | **10,000** by default, configurable per organization | A saved-query run (`create_explorer_query` / `run_explorer_query`) |\n| Tool response rows | **50** by default | What `get_query_run_results` hands your agent |\n\nRaise the last one with `row_limit`, or pass `null` or `0` for no tool-side truncation. The default is small so a wide result doesn't fill your agent's context window.\n\n<Tip>\n If you need more than 1,000 rows, aggregate in SQL. A `GROUP BY` on a large blockchain table is cheaper than moving rows into your agent. When you need the rows themselves, save the query with `create_explorer_query`, which has the higher cap.\n</Tip>\n\nOther limits:\n\n| Limit | Value |\n| :- | :- |\n| `get_query_run_results` poll window | 180 seconds max per call |\n| `search_schemas` / `search_terminal` hits | 20 max, 5 by default |\n| `get_terminal_results` rows | Set by `max_rows` |\n",
"type": "text"
}
]
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-b74042af57db1766",
"is_error": false,
"tool_kind": "shell"
}python3 -c "import json;d=json.load(open('/tmp/chains.json'));print(len(d));[print(k,len(v)) for k,v in d.items()]"; python3 -V; pip list 2>/dev/null | head -2023
23 /api/v1/developer/wallet/balances/history 15 /api/v1/developer/wallet/balances 19 /api/v1/developer/wallet/transactions 19 /api/v1/developer/wallet/pnl 16 /api/v1/developer/wallet/pnl/history 16 /api/v1/developer/wallet/pnl-by-token 16 /api/v1/developer/wallet/pnl-by-token/history 16 /api/v1/developer/wallet/holdings/history 14 /api/v1/developer/prices/history 13 /api/v1/developer/prices 13 /api/v1/developer/prices/stats 13 /api/v1/developer/prices/at-timestamp 13 /api/v1/developer/tokens/chain-address 12 /api/v1/developer/tokens/transfers 18 /api/v1/developer/tokens 12 /api/v1/developer/tokens/search 12 /api/v1/developer/assets 6 /api/v1/developer/assets/batch 6 /api/v1/developer/trading/hyperliquid/info/fills 1 /api/v1/developer/trading/hyperliquid/info/order/history 1 /api/v1/developer/trading/hyperliquid/info/order/status 1 /api/v1/developer/trading/hyperliquid/info 1 /api/v1/developer/wallet/positions 14 Python 3.12.3 Package Version -------------------------------------------- ----------- aiofile 3.12.3 aiofiles 25.1.0 aiohappyeyeballs 2.7.1 aiohttp 3.14.3 aiohttp-retry 2.9.1 aiosignal 1.4.0 aiosqlite 0.22.1 annotated-doc 0.0.5 annotated-types 0.8.0 anthropic 0.122.0 anyio 4.14.2 argcomplete 3.7.2 asgiref 3.12.1 attrs 26.1.0 Authlib 1.8.0 banks 2.5.0 beartype 0.22.9 beautifulsoup4 4.15.0
Recorded tool call
{
"type": "tool_call",
"seq": 58,
"ts": "2026-10-15T16:55:08.539Z",
"name": "bash",
"turn": 1,
"input": {
"command": "python3 -c \"import json;d=json.load(open('/tmp/chains.json'));print(len(d));[print(k,len(v)) for k,v in d.items()]\"; python3 -V; pip list 2>/dev/null | head -20"
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-a2e5e4fa3906579b",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 59,
"ts": "2026-10-15T16:55:09.377Z",
"turn": 1,
"output": {
"content": [
{
"text": "23\n/api/v1/developer/wallet/balances/history 15\n/api/v1/developer/wallet/balances 19\n/api/v1/developer/wallet/transactions 19\n/api/v1/developer/wallet/pnl 16\n/api/v1/developer/wallet/pnl/history 16\n/api/v1/developer/wallet/pnl-by-token 16\n/api/v1/developer/wallet/pnl-by-token/history 16\n/api/v1/developer/wallet/holdings/history 14\n/api/v1/developer/prices/history 13\n/api/v1/developer/prices 13\n/api/v1/developer/prices/stats 13\n/api/v1/developer/prices/at-timestamp 13\n/api/v1/developer/tokens/chain-address 12\n/api/v1/developer/tokens/transfers 18\n/api/v1/developer/tokens 12\n/api/v1/developer/tokens/search 12\n/api/v1/developer/assets 6\n/api/v1/developer/assets/batch 6\n/api/v1/developer/trading/hyperliquid/info/fills 1\n/api/v1/developer/trading/hyperliquid/info/order/history 1\n/api/v1/developer/trading/hyperliquid/info/order/status 1\n/api/v1/developer/trading/hyperliquid/info 1\n/api/v1/developer/wallet/positions 14\nPython 3.12.3\nPackage Version\n-------------------------------------------- -----------\naiofile 3.12.3\naiofiles 25.1.0\naiohappyeyeballs 2.7.1\naiohttp 3.14.3\naiohttp-retry 2.9.1\naiosignal 1.4.0\naiosqlite 0.22.1\nannotated-doc 0.0.5\nannotated-types 0.8.0\nanthropic 0.122.0\nanyio 4.14.2\nargcomplete 3.7.2\nasgiref 3.12.1\nattrs 26.1.0\nAuthlib 1.8.0\nbanks 2.5.0\nbeartype 0.22.9\nbeautifulsoup4 4.15.0\n",
"type": "text"
}
]
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-a2e5e4fa3906579b",
"is_error": false,
"tool_kind": "shell"
}›Thinking…
Also grab /api/developer/compute-units.md for Developer Unit pricing per endpoint — useful for the pricing explanation.
And check the api host for API key auth: docs say X-API-KEY header. Base URL likely https://api.allium.so/api/v1/... Let me check the OpenAPI spec / playground server URL. Let me look for openapi.json in docs.
Let me fetch compute-units.md and check openapi.
timeout 25 curl -sSL https://docs.allium.so/api/developer/compute-units.md | head -120
> ## Documentation Index
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.allium.so/llms.txt
> Use this file to discover all available pages before exploring further.
# API Credits
> Understand how Developer Units (DUs) are consumed across different API endpoints.
Allium's Developer API credits are measured in **Developer Units (DU)**. Each API endpoint consumes a specific number of DUs per call based on the computational resources required.
## How Developer Units Work
Every API request you make to Allium's Developer API consumes a certain number of Developer Units. The consumption varies by endpoint complexity, data volume, and processing requirements.
<Info>
Need more Developer Units? [Contact us](https://allium.so/contact) to discuss your usage requirements and pricing options.
</Info>
## Developer Units by Endpoint
Below is a comprehensive breakdown of DU costs for all available endpoints:
<Info>
For API calls to endpoints that support batched inputs, the Developer Unit cost is multiplied by the number of inputs.
</Info>
### Wallets
| Endpoint | Developer Units |
| :- | -: |
| `/api/v1/developer/wallet/transactions` | 30 DU |
| `/api/v1/developer/wallet/balances` | 30 DU |
| `/api/v1/developer/wallet/balances/history` | 30 DU |
| `/api/v1/developer/wallet/holdings/history` | 30 DU |
| `/api/v1/developer/wallet/pnl` | 30 DU |
| `/api/v1/developer/wallet/pnl-by-token` | 30 DU |
| `/api/v1/developer/wallet/pnl/history` | 30 DU |
| `/api/v1/developer/wallet/pnl-by-token/history` | 30 DU |
### Prices
| Endpoint | Developer Units |
| :- | -: |
| `/api/v1/developer/prices` | 20 DU |
| `/api/v1/developer/prices/history` | 20 DU |
| `/api/v1/developer/prices/stats` | 20 DU |
| `/api/v1/developer/prices/at-timestamp` | 20 DU |
### Hyperliquid
| Endpoint | Developer Units |
| :- | -: |
| `/api/v1/developer/trading/hyperliquid/info` | 40 DU |
| `/api/v1/developer/trading/hyperliquid/info/fills` | 40 DU |
| `/api/v1/developer/trading/hyperliquid/info/order/history` | 60 DU |
| `/api/v1/developer/trading/hyperliquid/info/order/status` | 40 DU |
| `/api/v1/developer/trading/hyperliquid/orderbook/snapshot` | 60 DU |
| `/api/v1/developer/trading/hyperliquid/candleSnapshot` | 20 DU |
| `/api/v1/developer/trading/hyperliquid/metaAndAssetCtxs` | 20 DU |
### Tokens
| Endpoint | Developer Units |
| :- | -: |
| `/api/v1/developer/tokens/chain-address` | 20 DU |
| `/api/v1/developer/tokens` | 30 DU |
| `/api/v1/developer/tokens/search` | 30 DU |
### Assets
| Endpoint | Developer Units |
| :- | -: |
| `/api/v1/developer/assets` | 30 DU |
| `/api/v1/developer/assets/batch` | 20 DU |
## Related Resources
<CardGroup cols={2}>
<Card title="Getting Started" icon="rocket" href="/api/getting-started">
Learn how to authenticate and make your first API request
</Card>
<Card title="API Reference" icon="book" href="/api/developer/overview">
Explore all available endpoints and their documentation
</Card>
</CardGroup>
Recorded tool call
{
"type": "tool_call",
"seq": 63,
"ts": "2026-10-15T16:55:16.446Z",
"name": "bash",
"turn": 1,
"input": {
"command": "timeout 25 curl -sSL https://docs.allium.so/api/developer/compute-units.md | head -120"
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-a0b1d29b8fb804b3",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 65,
"ts": "2026-10-15T16:55:17.823Z",
"turn": 1,
"output": {
"content": [
{
"text": "> ## Documentation Index\n> Fetch the complete documentation index at: https://docs.allium.so/llms.txt\n> Use this file to discover all available pages before exploring further.\n\n# API Credits\n\n> Understand how Developer Units (DUs) are consumed across different API endpoints.\n\nAllium's Developer API credits are measured in **Developer Units (DU)**. Each API endpoint consumes a specific number of DUs per call based on the computational resources required.\n\n## How Developer Units Work\n\nEvery API request you make to Allium's Developer API consumes a certain number of Developer Units. The consumption varies by endpoint complexity, data volume, and processing requirements.\n\n<Info>\n Need more Developer Units? [Contact us](https://allium.so/contact) to discuss your usage requirements and pricing options.\n</Info>\n\n## Developer Units by Endpoint\n\nBelow is a comprehensive breakdown of DU costs for all available endpoints:\n\n<Info>\n For API calls to endpoints that support batched inputs, the Developer Unit cost is multiplied by the number of inputs.\n</Info>\n\n### Wallets\n\n| Endpoint | Developer Units |\n| :- | -: |\n| `/api/v1/developer/wallet/transactions` | 30 DU |\n| `/api/v1/developer/wallet/balances` | 30 DU |\n| `/api/v1/developer/wallet/balances/history` | 30 DU |\n| `/api/v1/developer/wallet/holdings/history` | 30 DU |\n| `/api/v1/developer/wallet/pnl` | 30 DU |\n| `/api/v1/developer/wallet/pnl-by-token` | 30 DU |\n| `/api/v1/developer/wallet/pnl/history` | 30 DU |\n| `/api/v1/developer/wallet/pnl-by-token/history` | 30 DU |\n\n### Prices\n\n| Endpoint | Developer Units |\n| :- | -: |\n| `/api/v1/developer/prices` | 20 DU |\n| `/api/v1/developer/prices/history` | 20 DU |\n| `/api/v1/developer/prices/stats` | 20 DU |\n| `/api/v1/developer/prices/at-timestamp` | 20 DU |\n\n### Hyperliquid\n\n| Endpoint | Developer Units |\n| :- | -: |\n| `/api/v1/developer/trading/hyperliquid/info` | 40 DU |\n| `/api/v1/developer/trading/hyperliquid/info/fills` | 40 DU |\n| `/api/v1/developer/trading/hyperliquid/info/order/history` | 60 DU |\n| `/api/v1/developer/trading/hyperliquid/info/order/status` | 40 DU |\n| `/api/v1/developer/trading/hyperliquid/orderbook/snapshot` | 60 DU |\n| `/api/v1/developer/trading/hyperliquid/candleSnapshot` | 20 DU |\n| `/api/v1/developer/trading/hyperliquid/metaAndAssetCtxs` | 20 DU |\n\n### Tokens\n\n| Endpoint | Developer Units |\n| :- | -: |\n| `/api/v1/developer/tokens/chain-address` | 20 DU |\n| `/api/v1/developer/tokens` | 30 DU |\n| `/api/v1/developer/tokens/search` | 30 DU |\n\n### Assets\n\n| Endpoint | Developer Units |\n| :- | -: |\n| `/api/v1/developer/assets` | 30 DU |\n| `/api/v1/developer/assets/batch` | 20 DU |\n\n## Related Resources\n\n<CardGroup cols={2}>\n <Card title=\"Getting Started\" icon=\"rocket\" href=\"/api/getting-started\">\n Learn how to authenticate and make your first API request\n </Card>\n\n <Card title=\"API Reference\" icon=\"book\" href=\"/api/developer/overview\">\n Explore all available endpoints and their documentation\n </Card>\n</CardGroup>\n",
"type": "text"
}
]
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-a0b1d29b8fb804b3",
"is_error": false,
"tool_kind": "shell"
}for u in https://docs.allium.so/openapi.json https://api.allium.so/openapi.json https://docs.allium.so/api/openapi.json; do printf "%s -> " "$u"; timeout 15 curl -sS -o /tmp/o.json -w "%{http_code} " "$u"; head -c 200 /tmp/o.json; echo; donehttps://docs.allium.so/openapi.json -> 307 Redirecting...
https://docs.allium.so/openapi.json -> 307 Redirecting...
https://api.allium.so/openapi.json -> 403 {"detail":"Not authenticated"}
https://docs.allium.so/api/openapi.json -> 307 Redirecting...
Recorded tool call
{
"type": "tool_call",
"seq": 64,
"ts": "2026-10-15T16:55:16.446Z",
"name": "bash",
"turn": 1,
"input": {
"command": "for u in https://docs.allium.so/openapi.json https://api.allium.so/openapi.json https://docs.allium.so/api/openapi.json; do printf \"%s -> \" \"$u\"; timeout 15 curl -sS -o /tmp/o.json -w \"%{http_code} \" \"$u\"; head -c 200 /tmp/o.json; echo; done"
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-b5667841ece70ca7",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 66,
"ts": "2026-10-15T16:55:18.183Z",
"turn": 1,
"output": {
"content": [
{
"text": "https://docs.allium.so/openapi.json -> 307 Redirecting...\n\nhttps://api.allium.so/openapi.json -> 403 {\"detail\":\"Not authenticated\"}\nhttps://docs.allium.so/api/openapi.json -> 307 Redirecting...\n\n",
"type": "text"
}
]
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-b5667841ece70ca7",
"is_error": false,
"tool_kind": "shell"
}›Thinking…
api.allium.so returns 403 {"detail":"Not authenticated"} — confirming that's the API-key host (X-API-KEY header). Good: so API key path → https://api.allium.so/api/v1/... with X-API-KEY.
Now build the example. Files:
/sandbox/repo/allium-example/
README.md — what it does, pricing, how to run, credentials, blockers
allium_client.py — tiny zero-dependency client (stdlib urllib)
example_coverage.py — free: supported chains coverage report (runs with no creds)
example_prices.py — paid: latest prices via API key OR machine payments (skipped if no creds)
requirements.txt — optional deps for machine payments (pympp[tempo])
Keep it simple. Maybe just two scripts + README + a single module. Let me write it.
Design of allium_client.py:
AGENT_HOST = https://agents.allium.so(machine payments + free supported-chains)API_HOST = https://api.allium.so(API key)get_supported_chains()freelatest_prices(pairs)→ chooses auth: if ALLIUM_API_KEY set → api.allium.so with X-API-KEY; elif ALLIUM_PRIVATE_KEY set → instruct machine payments (raise NotImplemented pointing to example_machine_payments.py) ... simpler: example_prices.py handles API key path; example_machine_payments.py handles paid path with pympp.
Let me implement:
allium_client.py:
"""Minimal zero-dependency client for Allium's hosted APIs."""
from __future__ import annotations
import json, os, urllib.error, urllib.request
AGENTS_BASE = "https://agents.allium.so"
API_BASE = "https://api.allium.so"
FREE_SUPPORTED_CHAINS = "/api/v1/supported-chains/realtime-apis/simple"
LATEST_PRICES = "/api/v1/developer/prices"
class AlliumError(RuntimeError): ...
def _request(url, *, method="GET", payload=None, headers=None, timeout=30):
data = json.dumps(payload).encode() if payload is not None else None
req = urllib.request.Request(url, data=data, method=method)
req.add_header("Accept", "application/json")
if data: req.add_header("Content-Type", "application/json")
for k, v in (headers or {}).items(): req.add_header(k, v)
try:
with urllib.request.urlopen(req, timeout=timeout) as resp:
return json.loads(resp.read().decode())
except urllib.error.HTTPError as e:
body = e.read().decode(errors="replace")
if e.code == 402: raise AlliumError("402 Payment Required — ...")
if e.code == 401/403: ...
raise AlliumError(f"HTTP {e.code} from {url}: {body[:400]}") from None
def supported_chains() -> dict[str, list[str]]: free call
def latest_prices(pairs, api_key=None) -> dict: api key call
example_coverage.py — prints a coverage table and per-chain endpoint counts. Runs with zero credentials.
example_prices.py — reads ALLIUM_API_KEY; if missing, prints instructions and exits 2 (blocked, not failed silently). Otherwise calls prices for SOL + WETH.
example_machine_payments.py — pympp Tempo flow, guarded import, exits with instructions if ALLIUM_PRIVATE_KEY / pympp missing.
README.md with pricing.
Then run example_coverage.py to prove it works.
Let me write files.
Found it — Allium (allium.so) does have a real developer surface: hosted REST APIs, an MCP server, and machine-payment endpoints. Let me build the example.
File edits
1 file
Writtenallium-example/allium_client.pyView changes
/sandbox/repo/allium-example/allium_client.py
Written content · previous contents were not recorded
"""Minimal, zero-dependency client for Allium's hosted blockchain-data APIs.Two hosts, two auth models:* https://agents.allium.so -- machine payments (HTTP 402 + USDC), no API key.Also serves a *free* chain-coverage endpoint.* https://api.allium.so -- classic `X-API-KEY` auth (key fromhttps://app.allium.so/settings/api-keys).Only the Python standard library is used, so this file runs anywhere.Docs index: https://docs.allium.so/llms.txt"""from __future__ import annotationsimport jsonimport urllib.errorimport urllib.requestAGENTS_BASE = "https://agents.allium.so"API_BASE = "https://api.allium.so"#: Free: no API key, no payment. Maps endpoint path -> supported chain slugs.SUPPORTED_CHAINS_PATH = "/api/v1/supported-chains/realtime-apis/simple"#: Paid: 20 Developer Units per token via API key, or $0.02 per call via USDC.LATEST_PRICES_PATH = "/api/v1/developer/prices"#: Paid: 30 Developer Units / $0.03 per call.WALLET_BALANCES_PATH = "/api/v1/developer/wallet/balances"TIMEOUT_SECONDS = 30class AlliumError(RuntimeError):"""Any non-2xx response from Allium, with enough detail to act on it."""class AlliumAuthError(AlliumError):"""The call needs credentials this process does not have."""def _request(url: str,*,method: str = "GET",payload: object | None = None,headers: dict[str, str] | None = None,timeout: int = TIMEOUT_SECONDS,) -> object:body = None if payload is None else json.dumps(payload).encode("utf-8")req = urllib.request.Request(url, data=body, method=method)req.add_header("Accept", "application/json")if body is not None:req.add_header("Content-Type", "application/json")for key, value in (headers or {}).items():req.add_header(key, value)try:with urllib.request.urlopen(req, timeout=timeout) as resp:return json.loads(resp.read().decode("utf-8"))except urllib.error.HTTPError as exc: # noqa: PERF203 - one except is fine heredetail = exc.read().decode("utf-8", errors="replace")[:500]if exc.code == 402:raise AlliumAuthError(f"402 Payment Required from {url}. This endpoint is pay-per-call in ""USDC (x402 / Tempo MPP). Use example_machine_payments.py with a funded ""wallet, or an X-API-KEY against https://api.allium.so instead.") from Noneif exc.code in (401, 403):raise AlliumAuthError(f"HTTP {exc.code} from {url}: {detail}\n""Set ALLIUM_API_KEY (create one at https://app.allium.so/settings/api-keys).") from Noneraise AlliumError(f"HTTP {exc.code} from {url}: {detail}") from Noneexcept urllib.error.URLError as exc:raise AlliumError(f"Could not reach {url}: {exc.reason}") from Nonedef supported_chains() -> dict[str, list[str]]:"""Free endpoint: {endpoint_path: [chain_slug, ...]} for the Realtime APIs."""data = _request(AGENTS_BASE + SUPPORTED_CHAINS_PATH)if not isinstance(data, dict):raise AlliumError(f"Unexpected payload from {SUPPORTED_CHAINS_PATH}: {type(data)}")return datadef latest_prices(pairs: list[dict[str, str]], api_key: str) -> object:"""Latest price + OHLC for up to 200 {chain, token_address} pairs.Requires an Allium API key (20 Developer Units per pair in the payload)."""if not api_key:raise AlliumAuthError("latest_prices() needs an Allium API key.")return _request(API_BASE + LATEST_PRICES_PATH,method="POST",payload=pairs,headers={"X-API-KEY": api_key},)def latest_balances(chain: str, addresses: list[str], api_key: str) -> object:"""Latest fungible-token balances for one chain (30 Developer Units)."""if not api_key:raise AlliumAuthError("latest_balances() needs an Allium API key.")return _request(API_BASE + WALLET_BALANCES_PATH,method="POST",payload={"chain": chain, "addresses": addresses},headers={"X-API-KEY": api_key},)
Source: write · chatcmpl-tool-a7e7c079889e33da
Recorded tool call
{
"type": "tool_call",
"seq": 70,
"ts": "2026-10-15T16:55:49.461Z",
"name": "write",
"turn": 1,
"input": {
"path": "/sandbox/repo/allium-example/allium_client.py",
"content": "\"\"\"Minimal, zero-dependency client for Allium's hosted blockchain-data APIs.\n\nTwo hosts, two auth models:\n\n* https://agents.allium.so -- machine payments (HTTP 402 + USDC), no API key.\n Also serves a *free* chain-coverage endpoint.\n* https://api.allium.so -- classic `X-API-KEY` auth (key from\n https://app.allium.so/settings/api-keys).\n\nOnly the Python standard library is used, so this file runs anywhere.\nDocs index: https://docs.allium.so/llms.txt\n\"\"\"\n\nfrom __future__ import annotations\n\nimport json\nimport urllib.error\nimport urllib.request\n\nAGENTS_BASE = \"https://agents.allium.so\"\nAPI_BASE = \"https://api.allium.so\"\n\n#: Free: no API key, no payment. Maps endpoint path -> supported chain slugs.\nSUPPORTED_CHAINS_PATH = \"/api/v1/supported-chains/realtime-apis/simple\"\n\n#: Paid: 20 Developer Units per token via API key, or $0.02 per call via USDC.\nLATEST_PRICES_PATH = \"/api/v1/developer/prices\"\n\n#: Paid: 30 Developer Units / $0.03 per call.\nWALLET_BALANCES_PATH = \"/api/v1/developer/wallet/balances\"\n\nTIMEOUT_SECONDS = 30\n\n\nclass AlliumError(RuntimeError):\n \"\"\"Any non-2xx response from Allium, with enough detail to act on it.\"\"\"\n\n\nclass AlliumAuthError(AlliumError):\n \"\"\"The call needs credentials this process does not have.\"\"\"\n\n\ndef _request(\n url: str,\n *,\n method: str = \"GET\",\n payload: object | None = None,\n headers: dict[str, str] | None = None,\n timeout: int = TIMEOUT_SECONDS,\n) -> object:\n body = None if payload is None else json.dumps(payload).encode(\"utf-8\")\n req = urllib.request.Request(url, data=body, method=method)\n req.add_header(\"Accept\", \"application/json\")\n if body is not None:\n req.add_header(\"Content-Type\", \"application/json\")\n for key, value in (headers or {}).items():\n req.add_header(key, value)\n\n try:\n with urllib.request.urlopen(req, timeout=timeout) as resp:\n return json.loads(resp.read().decode(\"utf-8\"))\n except urllib.error.HTTPError as exc: # noqa: PERF203 - one except is fine here\n detail = exc.read().decode(\"utf-8\", errors=\"replace\")[:500]\n if exc.code == 402:\n raise AlliumAuthError(\n f\"402 Payment Required from {url}. This endpoint is pay-per-call in \"\n \"USDC (x402 / Tempo MPP). Use example_machine_payments.py with a funded \"\n \"wallet, or an X-API-KEY against https://api.allium.so instead.\"\n ) from None\n if exc.code in (401, 403):\n raise AlliumAuthError(\n f\"HTTP {exc.code} from {url}: {detail}\\n\"\n \"Set ALLIUM_API_KEY (create one at https://app.allium.so/settings/api-keys).\"\n ) from None\n raise AlliumError(f\"HTTP {exc.code} from {url}: {detail}\") from None\n except urllib.error.URLError as exc:\n raise AlliumError(f\"Could not reach {url}: {exc.reason}\") from None\n\n\ndef supported_chains() -> dict[str, list[str]]:\n \"\"\"Free endpoint: {endpoint_path: [chain_slug, ...]} for the Realtime APIs.\"\"\"\n data = _request(AGENTS_BASE + SUPPORTED_CHAINS_PATH)\n if not isinstance(data, dict):\n raise AlliumError(f\"Unexpected payload from {SUPPORTED_CHAINS_PATH}: {type(data)}\")\n return data\n\n\ndef latest_prices(pairs: list[dict[str, str]], api_key: str) -> object:\n \"\"\"Latest price + OHLC for up to 200 {chain, token_address} pairs.\n\n Requires an Allium API key (20 Developer Units per pair in the payload).\n \"\"\"\n if not api_key:\n raise AlliumAuthError(\"latest_prices() needs an Allium API key.\")\n return _request(\n API_BASE + LATEST_PRICES_PATH,\n method=\"POST\",\n payload=pairs,\n headers={\"X-API-KEY\": api_key},\n )\n\n\ndef latest_balances(\n chain: str, addresses: list[str], api_key: str\n) -> object:\n \"\"\"Latest fungible-token balances for one chain (30 Developer Units).\"\"\"\n if not api_key:\n raise AlliumAuthError(\"latest_balances() needs an Allium API key.\")\n return _request(\n API_BASE + WALLET_BALANCES_PATH,\n method=\"POST\",\n payload={\"chain\": chain, \"addresses\": addresses},\n headers={\"X-API-KEY\": api_key},\n )\n"
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-a7e7c079889e33da",
"tool_kind": "file_edit"
}Recorded tool result
{
"type": "tool_result",
"seq": 72,
"ts": "2026-10-15T16:55:49.461Z",
"turn": 1,
"output": {
"content": [
{
"text": "Successfully wrote 4187 bytes to /sandbox/repo/allium-example/allium_client.py",
"type": "text"
}
]
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-a7e7c079889e33da",
"is_error": false,
"tool_kind": "file_edit"
}File edits
1 file
Writtenallium-example/example_coverage.pyView changes
/sandbox/repo/allium-example/example_coverage.py
Written content · previous contents were not recorded
#!/usr/bin/env python3"""Example 1 -- chain coverage report. Runs with NO credentials and NO payment.Allium's `/api/v1/supported-chains/realtime-apis/simple` endpoint is explicitlyfree, so it is the right first call when evaluating the platform: it tells youwhich Realtime API endpoints exist and which chains back each one.python3 example_coverage.py # full tablepython3 example_coverage.py prices # only endpoints matching "prices""""from __future__ import annotationsimport sysfrom allium_client import AlliumError, supported_chainsdef main(argv: list[str]) -> int:needle = argv[1].lower() if len(argv) > 1 else ""try:coverage = supported_chains()except AlliumError as exc:print(f"error: {exc}", file=sys.stderr)return 1rows = {path: chainsfor path, chains in coverage.items()if needle in path.lower()}if not rows:print(f"no endpoints matched {needle!r}", file=sys.stderr)return 1all_chains = sorted({chain for chains in rows.values() for chain in chains})print(f"Free endpoint, no auth: {len(rows)} realtime endpoints, "f"{len(all_chains)} distinct chains\n")width = max(len(path) for path in rows)for path in sorted(rows, key=lambda p: (-len(rows[p]), p)):chains = rows[path]print(f"{path:<{width}} {len(chains):>2} chains {', '.join(sorted(chains))}")print(f"\nchains: {', '.join(all_chains)}")print("\nnext step (paid): ALLIUM_API_KEY=... python3 example_prices.py")return 0if __name__ == "__main__":raise SystemExit(main(sys.argv))
Source: write · chatcmpl-tool-9b721da0b7e14244
Recorded tool call
{
"type": "tool_call",
"seq": 71,
"ts": "2026-10-15T16:55:49.461Z",
"name": "write",
"turn": 1,
"input": {
"path": "/sandbox/repo/allium-example/example_coverage.py",
"content": "#!/usr/bin/env python3\n\"\"\"Example 1 -- chain coverage report. Runs with NO credentials and NO payment.\n\nAllium's `/api/v1/supported-chains/realtime-apis/simple` endpoint is explicitly\nfree, so it is the right first call when evaluating the platform: it tells you\nwhich Realtime API endpoints exist and which chains back each one.\n\n python3 example_coverage.py # full table\n python3 example_coverage.py prices # only endpoints matching \"prices\"\n\"\"\"\n\nfrom __future__ import annotations\n\nimport sys\n\nfrom allium_client import AlliumError, supported_chains\n\n\ndef main(argv: list[str]) -> int:\n needle = argv[1].lower() if len(argv) > 1 else \"\"\n\n try:\n coverage = supported_chains()\n except AlliumError as exc:\n print(f\"error: {exc}\", file=sys.stderr)\n return 1\n\n rows = {\n path: chains\n for path, chains in coverage.items()\n if needle in path.lower()\n }\n if not rows:\n print(f\"no endpoints matched {needle!r}\", file=sys.stderr)\n return 1\n\n all_chains = sorted({chain for chains in rows.values() for chain in chains})\n\n print(f\"Free endpoint, no auth: {len(rows)} realtime endpoints, \"\n f\"{len(all_chains)} distinct chains\\n\")\n\n width = max(len(path) for path in rows)\n for path in sorted(rows, key=lambda p: (-len(rows[p]), p)):\n chains = rows[path]\n print(f\"{path:<{width}} {len(chains):>2} chains {', '.join(sorted(chains))}\")\n\n print(f\"\\nchains: {', '.join(all_chains)}\")\n print(\"\\nnext step (paid): ALLIUM_API_KEY=... python3 example_prices.py\")\n return 0\n\n\nif __name__ == \"__main__\":\n raise SystemExit(main(sys.argv))\n"
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-9b721da0b7e14244",
"tool_kind": "file_edit"
}Recorded tool result
{
"type": "tool_result",
"seq": 73,
"ts": "2026-10-15T16:55:49.461Z",
"turn": 1,
"output": {
"content": [
{
"text": "Successfully wrote 1663 bytes to /sandbox/repo/allium-example/example_coverage.py",
"type": "text"
}
]
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-9b721da0b7e14244",
"is_error": false,
"tool_kind": "file_edit"
}›Thinking…
Now the paid examples: example_prices.py (API key) and example_machine_payments.py (USDC via pympp). Also README.md.
File edits
1 file
Writtenallium-example/example_prices.pyView changes
/sandbox/repo/allium-example/example_prices.py
Written content · previous contents were not recorded
#!/usr/bin/env python3"""Example 2 -- latest token prices with an API key (20 Developer Units/pair).export ALLIUM_API_KEY=... # https://app.allium.so/settings/api-keyspython3 example_prices.pyFails loudly (exit 2) instead of silently doing nothing when the key is absent."""from __future__ import annotationsimport jsonimport osimport sysfrom allium_client import AlliumAuthError, AlliumError, latest_prices# Well-known native/wrapped assets, so the example needs no lookup step.TOKENS = [{"chain": "solana", "token_address": "So11111111111111111111111111111111111111112"}, # SOL{"chain": "ethereum", "token_address": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"}, # WETH{"chain": "base", "token_address": "0x4200000000000000000000000000000000000006"}, # WETH on Base]def main() -> int:api_key = os.environ.get("ALLIUM_API_KEY", "").strip()if not api_key:print("blocked: ALLIUM_API_KEY is not set.\n"" 1. create an account at https://app.allium.so/join\n"" 2. Settings -> API Keys -> Generate\n"" 3. export ALLIUM_API_KEY=...\n""Or skip signup entirely and pay per call in USDC:\n"" export ALLIUM_PRIVATE_KEY=... && python3 example_machine_payments.py",file=sys.stderr,)return 2try:result = latest_prices(TOKENS, api_key)except AlliumAuthError as exc:print(f"blocked: {exc}", file=sys.stderr)return 2except AlliumError as exc:print(f"error: {exc}", file=sys.stderr)return 1print(json.dumps(result, indent=2))return 0if __name__ == "__main__":raise SystemExit(main())
Source: write · chatcmpl-tool-a6f8b52b5ae18d6a
Recorded tool call
{
"type": "tool_call",
"seq": 76,
"ts": "2026-10-15T16:56:03.318Z",
"name": "write",
"turn": 1,
"input": {
"path": "/sandbox/repo/allium-example/example_prices.py",
"content": "#!/usr/bin/env python3\n\"\"\"Example 2 -- latest token prices with an API key (20 Developer Units/pair).\n\n export ALLIUM_API_KEY=... # https://app.allium.so/settings/api-keys\n python3 example_prices.py\n\nFails loudly (exit 2) instead of silently doing nothing when the key is absent.\n\"\"\"\n\nfrom __future__ import annotations\n\nimport json\nimport os\nimport sys\n\nfrom allium_client import AlliumAuthError, AlliumError, latest_prices\n\n# Well-known native/wrapped assets, so the example needs no lookup step.\nTOKENS = [\n {\"chain\": \"solana\", \"token_address\": \"So11111111111111111111111111111111111111112\"}, # SOL\n {\"chain\": \"ethereum\", \"token_address\": \"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\"}, # WETH\n {\"chain\": \"base\", \"token_address\": \"0x4200000000000000000000000000000000000006\"}, # WETH on Base\n]\n\n\ndef main() -> int:\n api_key = os.environ.get(\"ALLIUM_API_KEY\", \"\").strip()\n if not api_key:\n print(\n \"blocked: ALLIUM_API_KEY is not set.\\n\"\n \" 1. create an account at https://app.allium.so/join\\n\"\n \" 2. Settings -> API Keys -> Generate\\n\"\n \" 3. export ALLIUM_API_KEY=...\\n\"\n \"Or skip signup entirely and pay per call in USDC:\\n\"\n \" export ALLIUM_PRIVATE_KEY=... && python3 example_machine_payments.py\",\n file=sys.stderr,\n )\n return 2\n\n try:\n result = latest_prices(TOKENS, api_key)\n except AlliumAuthError as exc:\n print(f\"blocked: {exc}\", file=sys.stderr)\n return 2\n except AlliumError as exc:\n print(f\"error: {exc}\", file=sys.stderr)\n return 1\n\n print(json.dumps(result, indent=2))\n return 0\n\n\nif __name__ == \"__main__\":\n raise SystemExit(main())\n"
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-a6f8b52b5ae18d6a",
"tool_kind": "file_edit"
}Recorded tool result
{
"type": "tool_result",
"seq": 78,
"ts": "2026-10-15T16:56:03.721Z",
"turn": 1,
"output": {
"content": [
{
"text": "Successfully wrote 1734 bytes to /sandbox/repo/allium-example/example_prices.py",
"type": "text"
}
]
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-a6f8b52b5ae18d6a",
"is_error": false,
"tool_kind": "file_edit"
}File edits
1 file
Writtenallium-example/example_machine_payments.pyView changes
/sandbox/repo/allium-example/example_machine_payments.py
Written content · previous contents were not recorded
#!/usr/bin/env python3"""Example 3 -- pay-per-call with USDC, no account and no API key.Allium's agents host answers data requests with `402 Payment Required`; theTempo MPP client signs a USDC authorization and retries, so the payment flow isinvisible to your code. Costs $0.02 for /developer/prices.pip install "pympp[tempo]"export ALLIUM_PRIVATE_KEY=0x... # wallet holding USDC; spend-only key!python3 example_machine_payments.pyUses REAL FUNDS on mainnet. Point ALLIUM_MPP_RPC_URL / ALLIUM_MPP_CHAIN_ID at atestnet first if you only want to exercise the flow."""from __future__ import annotationsimport asyncioimport osimport sysasync def fetch_prices() -> object:from mpp.client import Clientfrom mpp.methods.tempo import ChargeIntent, TempoAccount, tempoaccount = TempoAccount.from_key(os.environ["ALLIUM_PRIVATE_KEY"])rpc_url = os.environ.get("ALLIUM_MPP_RPC_URL")chain_id = os.environ.get("ALLIUM_MPP_CHAIN_ID")kwargs: dict[str, object] = {"intents": {"charge": ChargeIntent()}}if rpc_url:kwargs["rpc_url"] = rpc_urlif chain_id:kwargs["chain_id"] = int(chain_id)async with Client(methods=[tempo(account=account, **kwargs)]) as client:response = await client.post("https://agents.allium.so/api/v1/developer/prices",json=[{"chain": "solana","token_address": "So11111111111111111111111111111111111111112",}],)return response.json()def main() -> int:if not os.environ.get("ALLIUM_PRIVATE_KEY"):print("blocked: ALLIUM_PRIVATE_KEY is not set (needs a wallet with USDC).\n""Free-of-charge alternative: python3 example_coverage.py",file=sys.stderr,)return 2try:import mpp # noqa: F401except ImportError:print('blocked: pip install "pympp[tempo]" first.', file=sys.stderr)return 2print(asyncio.run(fetch_prices()))return 0if __name__ == "__main__":raise SystemExit(main())
Source: write · chatcmpl-tool-bc849822df33a3f7
Recorded tool call
{
"type": "tool_call",
"seq": 77,
"ts": "2026-10-15T16:56:03.318Z",
"name": "write",
"turn": 1,
"input": {
"path": "/sandbox/repo/allium-example/example_machine_payments.py",
"content": "#!/usr/bin/env python3\n\"\"\"Example 3 -- pay-per-call with USDC, no account and no API key.\n\nAllium's agents host answers data requests with `402 Payment Required`; the\nTempo MPP client signs a USDC authorization and retries, so the payment flow is\ninvisible to your code. Costs $0.02 for /developer/prices.\n\n pip install \"pympp[tempo]\"\n export ALLIUM_PRIVATE_KEY=0x... # wallet holding USDC; spend-only key!\n python3 example_machine_payments.py\n\nUses REAL FUNDS on mainnet. Point ALLIUM_MPP_RPC_URL / ALLIUM_MPP_CHAIN_ID at a\ntestnet first if you only want to exercise the flow.\n\"\"\"\n\nfrom __future__ import annotations\n\nimport asyncio\nimport os\nimport sys\n\n\nasync def fetch_prices() -> object:\n from mpp.client import Client\n from mpp.methods.tempo import ChargeIntent, TempoAccount, tempo\n\n account = TempoAccount.from_key(os.environ[\"ALLIUM_PRIVATE_KEY\"])\n\n rpc_url = os.environ.get(\"ALLIUM_MPP_RPC_URL\")\n chain_id = os.environ.get(\"ALLIUM_MPP_CHAIN_ID\")\n kwargs: dict[str, object] = {\"intents\": {\"charge\": ChargeIntent()}}\n if rpc_url:\n kwargs[\"rpc_url\"] = rpc_url\n if chain_id:\n kwargs[\"chain_id\"] = int(chain_id)\n\n async with Client(methods=[tempo(account=account, **kwargs)]) as client:\n response = await client.post(\n \"https://agents.allium.so/api/v1/developer/prices\",\n json=[\n {\n \"chain\": \"solana\",\n \"token_address\": \"So11111111111111111111111111111111111111112\",\n }\n ],\n )\n return response.json()\n\n\ndef main() -> int:\n if not os.environ.get(\"ALLIUM_PRIVATE_KEY\"):\n print(\n \"blocked: ALLIUM_PRIVATE_KEY is not set (needs a wallet with USDC).\\n\"\n \"Free-of-charge alternative: python3 example_coverage.py\",\n file=sys.stderr,\n )\n return 2\n\n try:\n import mpp # noqa: F401\n except ImportError:\n print('blocked: pip install \"pympp[tempo]\" first.', file=sys.stderr)\n return 2\n\n print(asyncio.run(fetch_prices()))\n return 0\n\n\nif __name__ == \"__main__\":\n raise SystemExit(main())\n"
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-bc849822df33a3f7",
"tool_kind": "file_edit"
}Recorded tool result
{
"type": "tool_result",
"seq": 79,
"ts": "2026-10-15T16:56:03.721Z",
"turn": 1,
"output": {
"content": [
{
"text": "Successfully wrote 2147 bytes to /sandbox/repo/allium-example/example_machine_payments.py",
"type": "text"
}
]
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-bc849822df33a3f7",
"is_error": false,
"tool_kind": "file_edit"
}›Thinking…
Wait — in example_machine_payments.py, the doc's quickstart uses rpc_url=TESTNET_RPC_URL, intents={"charge": ChargeIntent()} from mpp.methods.tempo._defaults. My kwargs approach passes chain_id which may not be a valid kwarg for tempo(). I'm not able to verify without installing pympp. Should I install pympp to verify? That's a pip install — light, not a service stack. But it needs a private key + USDC to actually run. I could at least verify the import and the signature of tempo() to make the example correct. Let's try installing pympp[tempo] quickly (short timeout) and introspect the signature. If install fails/takes long, I'll simplify to match docs exactly.
Let me also run the free coverage example now.
cd /sandbox/repo/allium-example && timeout 60 python3 example_coverage.py prices; echo "exit=$?"
error: HTTP 403 from https://agents.allium.so/api/v1/supported-chains/realtime-apis/simple: {"type":"https://developers.cloudflare.com/support/troubleshooting/h
error: HTTP 403 from https://agents.allium.so/api/v1/supported-chains/realtime-apis/simple: {"type":"https://developers.cloudflare.com/support/troubleshooting/http-status-codes/cloudflare-1xxx-errors/error-1010/","title":"Error 1010: Access denied","status":403,"detail":"The site owner has blocked access based on your browser's signature.","instance":"a4b05b039fb5b2b6","error_code":1010,"error_name":"browser_signature_banned","error_category":"access_denied","ray_id":"a4b05b039fb5b2b6","timestamp":"2026-10-15T16:56:09Z","zone":"agents.allium.so","cloudflare_error":true,"retryable":fals
Set ALLIUM_API_KEY (create one at https://app.allium.so/settings/api-keys).
exit=1
Recorded tool call
{
"type": "tool_call",
"seq": 82,
"ts": "2026-10-15T16:56:09.296Z",
"name": "bash",
"turn": 1,
"input": {
"command": "cd /sandbox/repo/allium-example && timeout 60 python3 example_coverage.py prices; echo \"exit=$?\""
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-895a400a6446ca78",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 84,
"ts": "2026-10-15T16:56:10.712Z",
"turn": 1,
"output": {
"content": [
{
"text": "error: HTTP 403 from https://agents.allium.so/api/v1/supported-chains/realtime-apis/simple: {\"type\":\"https://developers.cloudflare.com/support/troubleshooting/http-status-codes/cloudflare-1xxx-errors/error-1010/\",\"title\":\"Error 1010: Access denied\",\"status\":403,\"detail\":\"The site owner has blocked access based on your browser's signature.\",\"instance\":\"a4b05b039fb5b2b6\",\"error_code\":1010,\"error_name\":\"browser_signature_banned\",\"error_category\":\"access_denied\",\"ray_id\":\"a4b05b039fb5b2b6\",\"timestamp\":\"2026-10-15T16:56:09Z\",\"zone\":\"agents.allium.so\",\"cloudflare_error\":true,\"retryable\":fals\nSet ALLIUM_API_KEY (create one at https://app.allium.so/settings/api-keys).\nexit=1\n",
"type": "text"
}
]
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-895a400a6446ca78",
"is_error": false,
"tool_kind": "shell"
}cd /tmp && timeout 120 pip install --quiet "pympp[tempo]" 2>&1 | tail -5; python3 -c "
import inspect
from mpp.methods.tempo import tempo, TempoAccount, ChargeIntent
print('tempo sig:', inspect.signature(tempo))
from mpp.methods.tempo import _defaults as d
print([x for x in dir(d) if not x.startswith('__')])
" 2>&1 | tail -10tempo sig: (intents: 'Mapping[str, Intent | VerifiableIntent]', account: 'TempoAccount | None' = None, fee_payer: 'TempoAccount | None' = None, chain_id: 'int |
tempo sig: (intents: 'Mapping[str, Intent | VerifiableIntent]', account: 'TempoAccount | None' = None, fee_payer: 'TempoAccount | None' = None, chain_id: 'int | None | object' = <object object at 0x7f26d2578ab0>, rpc_url: 'str | None' = None, root_account: 'str | None' = None, currency: 'str | None' = None, recipient: 'str | None' = None, decimals: 'int' = 6, client_id: 'str | None' = None, relay: 'Relay | None' = None, can_offer: 'CanOfferFn | None' = None, on_payment_success: 'PaymentSuccessHandler | None' = None, currencies: 'Sequence[str] | None' = None, fee_token: 'str | None' = None, allowed_fee_tokens: 'Sequence[str] | None' = None) -> 'TempoMethod' ['CHAIN_ID', 'CHAIN_RPC_URLS', 'DEFAULT_ACCEPTED_CURRENCIES', 'DEFAULT_CURRENCIES', 'ESCROW_CONTRACTS', 'FEE_TOKENS', 'MACH', 'MappingProxyType', 'OUSD', 'PATH_USD', 'PATH_USD_DECIMALS', 'RPC_URL', 'TESTNET_CHAIN_ID', 'TESTNET_RPC_URL', 'USDC', 'default_currencies_for_chain', 'default_currency_for_chain', 'escrow_contract_for_chain', 'fee_tokens_for_chain', 'rpc_url_for_chain']
Recorded tool call
{
"type": "tool_call",
"seq": 83,
"ts": "2026-10-15T16:56:09.296Z",
"name": "bash",
"turn": 1,
"input": {
"command": "cd /tmp && timeout 120 pip install --quiet \"pympp[tempo]\" 2>&1 | tail -5; python3 -c \"\nimport inspect\nfrom mpp.methods.tempo import tempo, TempoAccount, ChargeIntent\nprint('tempo sig:', inspect.signature(tempo))\nfrom mpp.methods.tempo import _defaults as d\nprint([x for x in dir(d) if not x.startswith('__')])\n\" 2>&1 | tail -10"
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-abcb379728d78a2f",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 85,
"ts": "2026-10-15T16:56:37.079Z",
"turn": 1,
"output": {
"content": [
{
"text": "tempo sig: (intents: 'Mapping[str, Intent | VerifiableIntent]', account: 'TempoAccount | None' = None, fee_payer: 'TempoAccount | None' = None, chain_id: 'int | None | object' = <object object at 0x7f26d2578ab0>, rpc_url: 'str | None' = None, root_account: 'str | None' = None, currency: 'str | None' = None, recipient: 'str | None' = None, decimals: 'int' = 6, client_id: 'str | None' = None, relay: 'Relay | None' = None, can_offer: 'CanOfferFn | None' = None, on_payment_success: 'PaymentSuccessHandler | None' = None, currencies: 'Sequence[str] | None' = None, fee_token: 'str | None' = None, allowed_fee_tokens: 'Sequence[str] | None' = None) -> 'TempoMethod'\n['CHAIN_ID', 'CHAIN_RPC_URLS', 'DEFAULT_ACCEPTED_CURRENCIES', 'DEFAULT_CURRENCIES', 'ESCROW_CONTRACTS', 'FEE_TOKENS', 'MACH', 'MappingProxyType', 'OUSD', 'PATH_USD', 'PATH_USD_DECIMALS', 'RPC_URL', 'TESTNET_CHAIN_ID', 'TESTNET_RPC_URL', 'USDC', 'default_currencies_for_chain', 'default_currency_for_chain', 'escrow_contract_for_chain', 'fee_tokens_for_chain', 'rpc_url_for_chain']\n",
"type": "text"
}
]
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-abcb379728d78a2f",
"is_error": false,
"tool_kind": "shell"
}›Thinking…
Two findings:
-
Cloudflare blocks Python's default urllib User-Agent on agents.allium.so (Error 1010 browser_signature_banned) — curl worked earlier. Fix: set a normal User-Agent header in
_request. Let me fix and re-run. -
tempo()acceptschain_idandrpc_url— my kwargs approach is valid. Good. Also noteintentsis first positional. Fine.
Let me add a User-Agent and retry. Also the error message for 403 shouldn't say "Set ALLIUM_API_KEY" when it's a Cloudflare block; refine: distinguish cloudflare_error in the body.
File edits
1 file
Modifiedallium-example/allium_client.py+9−0View changes
/sandbox/repo/allium-example/allium_client.py
Replacement excerpt
TIMEOUT_SECONDS = 30++# agents.allium.so sits behind Cloudflare, which rejects urllib's default+# "Python-urllib/3.x" agent with Error 1010 (browser_signature_banned).+USER_AGENT = "allium-example/1.0 (+https://docs.allium.so)"
Replacement excerpt
req.add_header("Accept", "application/json")+ req.add_header("User-Agent", USER_AGENT)if body is not None:
Replacement excerpt
+ if exc.code == 403 and "cloudflare_error" in detail:+ raise AlliumError(+ f"HTTP 403 from {url}: edge/WAF block, not an auth problem.\n{detail}"+ ) from Noneif exc.code in (401, 403):raise AlliumAuthError(
Source: edit · chatcmpl-tool-989f003d06b958bf
Recorded tool call
{
"type": "tool_call",
"seq": 88,
"ts": "2026-10-15T16:56:45.809Z",
"name": "edit",
"turn": 1,
"input": {
"path": "/sandbox/repo/allium-example/allium_client.py",
"edits": [
{
"newText": "TIMEOUT_SECONDS = 30\n\n# agents.allium.so sits behind Cloudflare, which rejects urllib's default\n# \"Python-urllib/3.x\" agent with Error 1010 (browser_signature_banned).\nUSER_AGENT = \"allium-example/1.0 (+https://docs.allium.so)\"",
"oldText": "TIMEOUT_SECONDS = 30"
},
{
"newText": " req.add_header(\"Accept\", \"application/json\")\n req.add_header(\"User-Agent\", USER_AGENT)\n if body is not None:",
"oldText": " req.add_header(\"Accept\", \"application/json\")\n if body is not None:"
},
{
"newText": " if exc.code == 403 and \"cloudflare_error\" in detail:\n raise AlliumError(\n f\"HTTP 403 from {url}: edge/WAF block, not an auth problem.\\n{detail}\"\n ) from None\n if exc.code in (401, 403):\n raise AlliumAuthError(",
"oldText": " if exc.code in (401, 403):\n raise AlliumAuthError("
}
]
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-989f003d06b958bf",
"tool_kind": "file_edit"
}Recorded tool result
{
"type": "tool_result",
"seq": 89,
"ts": "2026-10-15T16:56:45.809Z",
"turn": 1,
"output": {
"content": [
{
"text": "Successfully replaced 3 block(s) in /sandbox/repo/allium-example/allium_client.py.",
"type": "text"
}
],
"details": {
"diff": " ...\n 30 WALLET_BALANCES_PATH = \"/api/v1/developer/wallet/balances\"\n 31 \n 32 TIMEOUT_SECONDS = 30\n 33 \n+ 34 # agents.allium.so sits behind Cloudflare, which rejects urllib's default\n+ 35 # \"Python-urllib/3.x\" agent with Error 1010 (browser_signature_banned).\n+ 36 USER_AGENT = \"allium-example/1.0 (+https://docs.allium.so)\"\n 34 \n+ 38 \n 35 class AlliumError(RuntimeError):\n 36 \"\"\"Any non-2xx response from Allium, with enough detail to act on it.\"\"\"\n 37 \n 38 \n ...\n 50 ) -> object:\n 51 body = None if payload is None else json.dumps(payload).encode(\"utf-8\")\n 52 req = urllib.request.Request(url, data=body, method=method)\n 53 req.add_header(\"Accept\", \"application/json\")\n+ 58 req.add_header(\"User-Agent\", USER_AGENT)\n 54 if body is not None:\n 55 req.add_header(\"Content-Type\", \"application/json\")\n 56 for key, value in (headers or {}).items():\n 57 req.add_header(key, value)\n ...\n 66 f\"402 Payment Required from {url}. This endpoint is pay-per-call in \"\n 67 \"USDC (x402 / Tempo MPP). Use example_machine_payments.py with a funded \"\n 68 \"wallet, or an X-API-KEY against https://api.allium.so instead.\"\n 69 ) from None\n+ 75 if exc.code == 403 and \"cloudflare_error\" in detail:\n+ 76 raise AlliumError(\n+ 77 f\"HTTP 403 from {url}: edge/WAF block, not an auth problem.\\n{detail}\"\n+ 78 ) from None\n 70 if exc.code in (401, 403):\n 71 raise AlliumAuthError(\n 72 f\"HTTP {exc.code} from {url}: {detail}\\n\"\n 73 \"Set ALLIUM_API_KEY (create one at https://app.allium.so/settings/api-keys).\"\n ...",
"patch": "--- /sandbox/repo/allium-example/allium_client.py\n+++ /sandbox/repo/allium-example/allium_client.py\n@@ -30,9 +30,13 @@\n WALLET_BALANCES_PATH = \"/api/v1/developer/wallet/balances\"\n \n TIMEOUT_SECONDS = 30\n \n+# agents.allium.so sits behind Cloudflare, which rejects urllib's default\n+# \"Python-urllib/3.x\" agent with Error 1010 (browser_signature_banned).\n+USER_AGENT = \"allium-example/1.0 (+https://docs.allium.so)\"\n \n+\n class AlliumError(RuntimeError):\n \"\"\"Any non-2xx response from Allium, with enough detail to act on it.\"\"\"\n \n \n@@ -50,8 +54,9 @@\n ) -> object:\n body = None if payload is None else json.dumps(payload).encode(\"utf-8\")\n req = urllib.request.Request(url, data=body, method=method)\n req.add_header(\"Accept\", \"application/json\")\n+ req.add_header(\"User-Agent\", USER_AGENT)\n if body is not None:\n req.add_header(\"Content-Type\", \"application/json\")\n for key, value in (headers or {}).items():\n req.add_header(key, value)\n@@ -66,8 +71,12 @@\n f\"402 Payment Required from {url}. This endpoint is pay-per-call in \"\n \"USDC (x402 / Tempo MPP). Use example_machine_payments.py with a funded \"\n \"wallet, or an X-API-KEY against https://api.allium.so instead.\"\n ) from None\n+ if exc.code == 403 and \"cloudflare_error\" in detail:\n+ raise AlliumError(\n+ f\"HTTP 403 from {url}: edge/WAF block, not an auth problem.\\n{detail}\"\n+ ) from None\n if exc.code in (401, 403):\n raise AlliumAuthError(\n f\"HTTP {exc.code} from {url}: {detail}\\n\"\n \"Set ALLIUM_API_KEY (create one at https://app.allium.so/settings/api-keys).\"\n",
"firstChangedLine": 34
}
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-989f003d06b958bf",
"is_error": false,
"tool_kind": "file_edit"
}›Thinking…
Wait, req.add_header capitalizes keys: add_header("User-Agent", ...) is fine. Also urllib.request.Request has add_unredirected_header. Fine.
Re-run.
cd /sandbox/repo/allium-example && timeout 60 python3 example_coverage.py prices; echo "exit=$?"; echo "=== full ==="; timeout 60 python3 example_coverage.py | head -8; echo "=== no-creds paid path ==="; timeout 30 python3 example_prices.py; echo "exit=$?"; timeout 30 python3 example_machine_payments.py; echo "exit=$?"
Free endpoint, no auth: 4 realtime endpoints, 13 distinct chains
Free endpoint, no auth: 4 realtime endpoints, 13 distinct chains /api/v1/developer/prices 13 chains arbitrum, avalanche, base, bsc, celo, ethereum, hyperevm, optimism, polygon, robinhood, solana, unichain, zksync /api/v1/developer/prices/at-timestamp 13 chains arbitrum, avalanche, base, bsc, celo, ethereum, hyperevm, optimism, polygon, robinhood, solana, unichain, zksync /api/v1/developer/prices/history 13 chains arbitrum, avalanche, base, bsc, celo, ethereum, hyperevm, optimism, polygon, robinhood, solana, unichain, zksync /api/v1/developer/prices/stats 13 chains arbitrum, avalanche, base, bsc, celo, ethereum, hyperevm, optimism, polygon, robinhood, solana, unichain, zksync chains: arbitrum, avalanche, base, bsc, celo, ethereum, hyperevm, optimism, polygon, robinhood, solana, unichain, zksync next step (paid): ALLIUM_API_KEY=... python3 example_prices.py exit=0 === full === Free endpoint, no auth: 23 realtime endpoints, 22 distinct chains /api/v1/developer/wallet/balances 19 chains arbitrum, arc, avalanche, base, bitcoin, bsc, celo, ethereum, hyperevm, monad, near, optimism, polygon, robinhood, solana, stellar, unichain, x_layer, xdc_network /api/v1/developer/wallet/transactions 19 chains arbitrum, arc, avalanche, base, bitcoin, bsc, celo, ethereum, hyperevm, monad, near, optimism, polygon, robinhood, solana, stellar, unichain, x_layer, xdc_network /api/v1/developer/tokens/transfers 18 chains arbitrum, arc, avalanche, base, bsc, celo, ethereum, hyperevm, monad, optimism, polygon, robinhood, solana, stellar, unichain, x_layer, xdc_network, zksync /api/v1/developer/wallet/pnl 16 chains arbitrum, avalanche, base, bitcoin, bsc, celo, ethereum, hyperevm, monad, optimism, polygon, robinhood, solana, unichain, x_layer, zksync /api/v1/developer/wallet/pnl-by-token 16 chains arbitrum, avalanche, base, bitcoin, bsc, celo, ethereum, hyperevm, monad, optimism, polygon, robinhood, solana, unichain, x_layer, zksync /api/v1/developer/wallet/pnl-by-token/history 16 chains arbitrum, avalanche, base, bitcoin, bsc, celo, ethereum, hyperevm, monad, optimism, polygon, robinhood, solana, unichain, x_layer, zksync === no-creds paid path === blocked: ALLIUM_API_KEY is not set. 1. create an account at https://app.allium.so/join 2. Settings -> API Keys -> Generate 3. export ALLIUM_API_KEY=... Or skip signup entirely and pay per call in USDC: export ALLIUM_PRIVATE_KEY=... && python3 example_machine_payments.py exit=2 blocked: ALLIUM_PRIVATE_KEY is not set (needs a wallet with USDC). Free-of-charge alternative: python3 example_coverage.py exit=2
Recorded tool call
{
"type": "tool_call",
"seq": 92,
"ts": "2026-10-15T16:56:49.410Z",
"name": "bash",
"turn": 1,
"input": {
"command": "cd /sandbox/repo/allium-example && timeout 60 python3 example_coverage.py prices; echo \"exit=$?\"; echo \"=== full ===\"; timeout 60 python3 example_coverage.py | head -8; echo \"=== no-creds paid path ===\"; timeout 30 python3 example_prices.py; echo \"exit=$?\"; timeout 30 python3 example_machine_payments.py; echo \"exit=$?\""
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-80baede2d6c6bec8",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 93,
"ts": "2026-10-15T16:56:50.641Z",
"turn": 1,
"output": {
"content": [
{
"text": "Free endpoint, no auth: 4 realtime endpoints, 13 distinct chains\n\n/api/v1/developer/prices 13 chains arbitrum, avalanche, base, bsc, celo, ethereum, hyperevm, optimism, polygon, robinhood, solana, unichain, zksync\n/api/v1/developer/prices/at-timestamp 13 chains arbitrum, avalanche, base, bsc, celo, ethereum, hyperevm, optimism, polygon, robinhood, solana, unichain, zksync\n/api/v1/developer/prices/history 13 chains arbitrum, avalanche, base, bsc, celo, ethereum, hyperevm, optimism, polygon, robinhood, solana, unichain, zksync\n/api/v1/developer/prices/stats 13 chains arbitrum, avalanche, base, bsc, celo, ethereum, hyperevm, optimism, polygon, robinhood, solana, unichain, zksync\n\nchains: arbitrum, avalanche, base, bsc, celo, ethereum, hyperevm, optimism, polygon, robinhood, solana, unichain, zksync\n\nnext step (paid): ALLIUM_API_KEY=... python3 example_prices.py\nexit=0\n=== full ===\nFree endpoint, no auth: 23 realtime endpoints, 22 distinct chains\n\n/api/v1/developer/wallet/balances 19 chains arbitrum, arc, avalanche, base, bitcoin, bsc, celo, ethereum, hyperevm, monad, near, optimism, polygon, robinhood, solana, stellar, unichain, x_layer, xdc_network\n/api/v1/developer/wallet/transactions 19 chains arbitrum, arc, avalanche, base, bitcoin, bsc, celo, ethereum, hyperevm, monad, near, optimism, polygon, robinhood, solana, stellar, unichain, x_layer, xdc_network\n/api/v1/developer/tokens/transfers 18 chains arbitrum, arc, avalanche, base, bsc, celo, ethereum, hyperevm, monad, optimism, polygon, robinhood, solana, stellar, unichain, x_layer, xdc_network, zksync\n/api/v1/developer/wallet/pnl 16 chains arbitrum, avalanche, base, bitcoin, bsc, celo, ethereum, hyperevm, monad, optimism, polygon, robinhood, solana, unichain, x_layer, zksync\n/api/v1/developer/wallet/pnl-by-token 16 chains arbitrum, avalanche, base, bitcoin, bsc, celo, ethereum, hyperevm, monad, optimism, polygon, robinhood, solana, unichain, x_layer, zksync\n/api/v1/developer/wallet/pnl-by-token/history 16 chains arbitrum, avalanche, base, bitcoin, bsc, celo, ethereum, hyperevm, monad, optimism, polygon, robinhood, solana, unichain, x_layer, zksync\n=== no-creds paid path ===\nblocked: ALLIUM_API_KEY is not set.\n 1. create an account at https://app.allium.so/join\n 2. Settings -> API Keys -> Generate\n 3. export ALLIUM_API_KEY=...\nOr skip signup entirely and pay per call in USDC:\n export ALLIUM_PRIVATE_KEY=... && python3 example_machine_payments.py\nexit=2\nblocked: ALLIUM_PRIVATE_KEY is not set (needs a wallet with USDC).\nFree-of-charge alternative: python3 example_coverage.py\nexit=2\n",
"type": "text"
}
]
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-80baede2d6c6bec8",
"is_error": false,
"tool_kind": "shell"
}›Thinking…
Everything works as designed. Now write the README with pricing details and the "is it easy for you to manage" assessment. Also add a requirements.txt (optional) and maybe a .env.example. Keep it light.
Let me also verify a 402 detection path — already verified via curl. Could also verify the client raises AlliumAuthError on 402 by calling latest_prices without key... that raises before HTTP. Let me test the 402 branch by calling _request directly on agents host without auth to confirm the message. Quick check.
cd /sandbox/repo/allium-example && timeout 40 python3 -c "
import allium_client as a
try:
a._request(a.AGENTS_BASE + a.LATEST_PRICES_PATH, method='POST', payload=[{'chain':'solana','token_address':'So11111111111111111111111111111111111111112'}])
except a.AlliumAuthError as e:
print('OK 402 handled ->', str(e)[:120])
"OK 402 handled -> 402 Payment Required from https://agents.allium.so/api/v1/developer/prices. This endpoint is pay-per-call in USDC (x402
OK 402 handled -> 402 Payment Required from https://agents.allium.so/api/v1/developer/prices. This endpoint is pay-per-call in USDC (x402
Recorded tool call
{
"type": "tool_call",
"seq": 96,
"ts": "2026-10-15T16:56:55.955Z",
"name": "bash",
"turn": 1,
"input": {
"command": "cd /sandbox/repo/allium-example && timeout 40 python3 -c \"\nimport allium_client as a\ntry:\n a._request(a.AGENTS_BASE + a.LATEST_PRICES_PATH, method='POST', payload=[{'chain':'solana','token_address':'So11111111111111111111111111111111111111112'}])\nexcept a.AlliumAuthError as e:\n print('OK 402 handled ->', str(e)[:120])\n\""
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-a7c7c8256e7e43bc",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 99,
"ts": "2026-10-15T16:56:57.705Z",
"turn": 1,
"output": {
"content": [
{
"text": "OK 402 handled -> 402 Payment Required from https://agents.allium.so/api/v1/developer/prices. This endpoint is pay-per-call in USDC (x402 \n",
"type": "text"
}
]
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-a7c7c8256e7e43bc",
"is_error": false,
"tool_kind": "shell"
}File edits
1 file
Writtenallium-example/requirements.txtView changes
/sandbox/repo/allium-example/requirements.txt
Written content · previous contents were not recorded
# Optional: only needed for example_machine_payments.py (USDC pay-per-call).# The API-key and free-coverage examples use the standard library only.pympp[tempo]
Source: write · chatcmpl-tool-90b0050d4048a03e
Recorded tool call
{
"type": "tool_call",
"seq": 97,
"ts": "2026-10-15T16:56:55.955Z",
"name": "write",
"turn": 1,
"input": {
"path": "/sandbox/repo/allium-example/requirements.txt",
"content": "# Optional: only needed for example_machine_payments.py (USDC pay-per-call).\n# The API-key and free-coverage examples use the standard library only.\npympp[tempo]\n"
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-90b0050d4048a03e",
"tool_kind": "file_edit"
}Recorded tool result
{
"type": "tool_result",
"seq": 98,
"ts": "2026-10-15T16:56:55.955Z",
"turn": 1,
"output": {
"content": [
{
"text": "Successfully wrote 162 bytes to /sandbox/repo/allium-example/requirements.txt",
"type": "text"
}
]
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-90b0050d4048a03e",
"is_error": false,
"tool_kind": "file_edit"
}›Thinking…
I need to write the README.md file for the allium-example directory.
File edits
1 file
Writtenallium-example/README.mdView changes
/sandbox/repo/allium-example/README.md
Written content · previous contents were not recorded
# Allium — minimal hosted-API example[Allium](https://allium.so) is an enterprise blockchain-data platform: normalizedon-chain data for 150+ chains, delivered as SQL (Explorer), lake shares(Snowflake/Databricks/BigQuery), streams (Kafka/PubSub/SNS), and pull-based**Realtime REST APIs**. This example uses only the hosted HTTP surface — no localservices, no Docker, nothing long-running.Docs index for agents: <https://docs.allium.so/llms.txt>## Files| File | What it does | Needs || - | - | - || `allium_client.py` | Tiny stdlib-only client for both hosts + typed errors | nothing || `example_coverage.py` | Chain-coverage report from the **free** endpoint | nothing — runs as-is || `example_prices.py` | Latest SOL / WETH prices | `ALLIUM_API_KEY` || `example_machine_payments.py` | Same data, paid per call in USDC, no account | `ALLIUM_PRIVATE_KEY` + `pip install "pympp[tempo]"` + real funds |Two hosts, two auth models:* `https://api.allium.so` — `X-API-KEY: <key>` header, billed in **Developer Units**against your plan.* `https://agents.allium.so` — no key; the server answers `402 Payment Required`with x402/Tempo payment options and you settle each call in **USDC**.## Run it```bashpython3 example_coverage.py # 23 endpoints x 22 chains, zero credentialspython3 example_coverage.py prices # filter to the four price endpointsexport ALLIUM_API_KEY=... # app.allium.so -> Settings -> API Keyspython3 example_prices.py````example_coverage.py` output (verified live):```/api/v1/developer/prices 13 chains arbitrum, avalanche, base, bsc, celo, ethereum, hyperevm, optimism, polygon, robinhood, solana, unichain, zksync/api/v1/developer/wallet/balances 19 chains ... bitcoin, near, stellar, x_layer, xdc_network ...```## How pricing worksThere is no public price list — `allium.so/pricing` redirects to a contact form.What the docs do publish:**1. Free tier / free calls.** Signing up at `app.allium.so/join` gets a free APIkey with limited daily usage, enough to evaluate. A handful of calls are freeregardless: `/api/v1/supported-chains/...`, all docs/schema search, dashboard andsharing tools, and `get_query_run_results` (compute was already charged at queuetime).**2. Developer Units (DU) — the Realtime APIs.** Fixed cost per endpoint, per*input* in a batch:| Endpoint | DU || - | -: || `/developer/prices*` (4 endpoints) | 20 DU || `/developer/tokens/chain-address`, `/developer/assets/batch`, Hyperliquid candles | 20 DU || `/developer/wallet/*` (transactions, balances, pnl, holdings), `/developer/tokens`, `/developer/assets` | 30 DU || `/developer/trading/hyperliquid/info` | 40 DU || Hyperliquid order history / orderbook snapshot | 60 DU |A `prices` call with 10 token payloads costs 10x the single-call rate. USD valueof a DU is not published; you buy units as part of a plan.**3. Explorer Units — SQL/analytics.** Cost scales with the compute profile youpick and how long the query runs. The exact unit cost comes back on the query runresult. Plans can allow overages uncapped, allow them up to a cap, or block at theplan limit. Watch the double-billing trap: `run_sql_query` then`create_explorer_query` on the same SQL charges compute twice.**4. Machine payments — pay per call, no account.** Verified live: `POSThttps://agents.allium.so/api/v1/developer/prices` returns `402` with an x402 v2quote of `20000` units (6 decimals = **$0.02 USDC**) payable on Base, Solana,Polygon, or X Layer; Tempo MPP settles in USDC on Tempo. Published per-callprices: prices $0.02, wallet/balances/transactions/pnl $0.03, tokens list/search$0.03, explorer `run-sql` $0.01. Rate limits: 3 req/s for `/developer/`, 5 req/sfor `/docs/`, per wallet. No subscription, no minimum spend.**5. Everything else is sales-led.** Datashares, Datastreams/Transformations,Explorer APIs, Beam, Allium Nodes, and Terminal are enterprise contracts via`support@allium.so` or the contact form.## Gotchas found while building this* **Cloudflare rejects Python's default User-Agent** on `agents.allium.so`(Error 1010 `browser_signature_banned`). `allium_client.py` sets an explicit`User-Agent`; a naive `urllib`/`requests`-default client gets a confusing 403that looks like an auth failure. It is not — the client separates WAF blocksfrom real 401/403.* Only **one API key per user**, and the Explorer/Datastream APIs are gated toenterprise accounts even with a valid key.* Machine payments spend **real money on mainnet**. Use a spend-only key, andpoint `ALLIUM_MPP_RPC_URL` / `ALLIUM_MPP_CHAIN_ID` at a testnet to dry-run.* The `allium` npm and PyPI packages are unrelated projects (a Gherkin parser andan astrophysics tool). Allium's own tooling is `@allium-labs/mcp`,`allium-labs/skills`, and `pympp`.## Is this easy for an agent to manage?Mostly yes, with two hard stops.Easy: the docs are agent-first — `/llms.txt`, per-page `.md` mirrors, a hosted MCPserver at `mcp.allium.so`, and prebuilt agent skills. The REST surface is small,uniform (`POST` + JSON array bodies), well-documented per endpoint, and the free`supported-chains` call means capability discovery costs nothing. Errors areexplicit (`402`, `422`, `429` with a 1s backoff), which makes retry logic trivial.No local infrastructure at all.Hard stops, both credential-shaped and both requiring a human:1. **No self-serve API key I can mint.** Account creation at `app.allium.so/join`needs a business email and, per the docs, "Request Access" — a human signup.2. **Machine payments need a funded wallet.** The keyless path is genuinelyagent-native, but it spends real USDC on mainnet, which I will not dounilaterally.So: I can build, run, and maintain everything around the free endpoint and all theclient/retry/parsing code indefinitely, but the first paid data call needs you tosupply either `ALLIUM_API_KEY` or a funded `ALLIUM_PRIVATE_KEY`. Once one of thoseexists, nothing else here needs a human.
Source: write · chatcmpl-tool-9d881b8a56b18f66
Recorded tool call
{
"type": "tool_call",
"seq": 102,
"ts": "2026-10-15T16:57:18.874Z",
"name": "write",
"turn": 1,
"input": {
"path": "/sandbox/repo/allium-example/README.md",
"content": "# Allium — minimal hosted-API example\n\n[Allium](https://allium.so) is an enterprise blockchain-data platform: normalized\non-chain data for 150+ chains, delivered as SQL (Explorer), lake shares\n(Snowflake/Databricks/BigQuery), streams (Kafka/PubSub/SNS), and pull-based\n**Realtime REST APIs**. This example uses only the hosted HTTP surface — no local\nservices, no Docker, nothing long-running.\n\nDocs index for agents: <https://docs.allium.so/llms.txt>\n\n## Files\n\n| File | What it does | Needs |\n| - | - | - |\n| `allium_client.py` | Tiny stdlib-only client for both hosts + typed errors | nothing |\n| `example_coverage.py` | Chain-coverage report from the **free** endpoint | nothing — runs as-is |\n| `example_prices.py` | Latest SOL / WETH prices | `ALLIUM_API_KEY` |\n| `example_machine_payments.py` | Same data, paid per call in USDC, no account | `ALLIUM_PRIVATE_KEY` + `pip install \"pympp[tempo]\"` + real funds |\n\nTwo hosts, two auth models:\n\n* `https://api.allium.so` — `X-API-KEY: <key>` header, billed in **Developer Units**\n against your plan.\n* `https://agents.allium.so` — no key; the server answers `402 Payment Required`\n with x402/Tempo payment options and you settle each call in **USDC**.\n\n## Run it\n\n```bash\npython3 example_coverage.py # 23 endpoints x 22 chains, zero credentials\npython3 example_coverage.py prices # filter to the four price endpoints\n\nexport ALLIUM_API_KEY=... # app.allium.so -> Settings -> API Keys\npython3 example_prices.py\n```\n\n`example_coverage.py` output (verified live):\n\n```\n/api/v1/developer/prices 13 chains arbitrum, avalanche, base, bsc, celo, ethereum, hyperevm, optimism, polygon, robinhood, solana, unichain, zksync\n/api/v1/developer/wallet/balances 19 chains ... bitcoin, near, stellar, x_layer, xdc_network ...\n```\n\n## How pricing works\n\nThere is no public price list — `allium.so/pricing` redirects to a contact form.\nWhat the docs do publish:\n\n**1. Free tier / free calls.** Signing up at `app.allium.so/join` gets a free API\nkey with limited daily usage, enough to evaluate. A handful of calls are free\nregardless: `/api/v1/supported-chains/...`, all docs/schema search, dashboard and\nsharing tools, and `get_query_run_results` (compute was already charged at queue\ntime).\n\n**2. Developer Units (DU) — the Realtime APIs.** Fixed cost per endpoint, per\n*input* in a batch:\n\n| Endpoint | DU |\n| - | -: |\n| `/developer/prices*` (4 endpoints) | 20 DU |\n| `/developer/tokens/chain-address`, `/developer/assets/batch`, Hyperliquid candles | 20 DU |\n| `/developer/wallet/*` (transactions, balances, pnl, holdings), `/developer/tokens`, `/developer/assets` | 30 DU |\n| `/developer/trading/hyperliquid/info` | 40 DU |\n| Hyperliquid order history / orderbook snapshot | 60 DU |\n\nA `prices` call with 10 token payloads costs 10x the single-call rate. USD value\nof a DU is not published; you buy units as part of a plan.\n\n**3. Explorer Units — SQL/analytics.** Cost scales with the compute profile you\npick and how long the query runs. The exact unit cost comes back on the query run\nresult. Plans can allow overages uncapped, allow them up to a cap, or block at the\nplan limit. Watch the double-billing trap: `run_sql_query` then\n`create_explorer_query` on the same SQL charges compute twice.\n\n**4. Machine payments — pay per call, no account.** Verified live: `POST\nhttps://agents.allium.so/api/v1/developer/prices` returns `402` with an x402 v2\nquote of `20000` units (6 decimals = **$0.02 USDC**) payable on Base, Solana,\nPolygon, or X Layer; Tempo MPP settles in USDC on Tempo. Published per-call\nprices: prices $0.02, wallet/balances/transactions/pnl $0.03, tokens list/search\n$0.03, explorer `run-sql` $0.01. Rate limits: 3 req/s for `/developer/`, 5 req/s\nfor `/docs/`, per wallet. No subscription, no minimum spend.\n\n**5. Everything else is sales-led.** Datashares, Datastreams/Transformations,\nExplorer APIs, Beam, Allium Nodes, and Terminal are enterprise contracts via\n`support@allium.so` or the contact form.\n\n## Gotchas found while building this\n\n* **Cloudflare rejects Python's default User-Agent** on `agents.allium.so`\n (Error 1010 `browser_signature_banned`). `allium_client.py` sets an explicit\n `User-Agent`; a naive `urllib`/`requests`-default client gets a confusing 403\n that looks like an auth failure. It is not — the client separates WAF blocks\n from real 401/403.\n* Only **one API key per user**, and the Explorer/Datastream APIs are gated to\n enterprise accounts even with a valid key.\n* Machine payments spend **real money on mainnet**. Use a spend-only key, and\n point `ALLIUM_MPP_RPC_URL` / `ALLIUM_MPP_CHAIN_ID` at a testnet to dry-run.\n* The `allium` npm and PyPI packages are unrelated projects (a Gherkin parser and\n an astrophysics tool). Allium's own tooling is `@allium-labs/mcp`,\n `allium-labs/skills`, and `pympp`.\n\n## Is this easy for an agent to manage?\n\nMostly yes, with two hard stops.\n\nEasy: the docs are agent-first — `/llms.txt`, per-page `.md` mirrors, a hosted MCP\nserver at `mcp.allium.so`, and prebuilt agent skills. The REST surface is small,\nuniform (`POST` + JSON array bodies), well-documented per endpoint, and the free\n`supported-chains` call means capability discovery costs nothing. Errors are\nexplicit (`402`, `422`, `429` with a 1s backoff), which makes retry logic trivial.\nNo local infrastructure at all.\n\nHard stops, both credential-shaped and both requiring a human:\n\n1. **No self-serve API key I can mint.** Account creation at `app.allium.so/join`\n needs a business email and, per the docs, \"Request Access\" — a human signup.\n2. **Machine payments need a funded wallet.** The keyless path is genuinely\n agent-native, but it spends real USDC on mainnet, which I will not do\n unilaterally.\n\nSo: I can build, run, and maintain everything around the free endpoint and all the\nclient/retry/parsing code indefinitely, but the first paid data call needs you to\nsupply either `ALLIUM_API_KEY` or a funded `ALLIUM_PRIVATE_KEY`. Once one of those\nexists, nothing else here needs a human.\n"
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-9d881b8a56b18f66",
"tool_kind": "file_edit"
}Recorded tool result
{
"type": "tool_result",
"seq": 103,
"ts": "2026-10-15T16:57:18.874Z",
"turn": 1,
"output": {
"content": [
{
"text": "Successfully wrote 6052 bytes to /sandbox/repo/allium-example/README.md",
"type": "text"
}
]
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-9d881b8a56b18f66",
"is_error": false,
"tool_kind": "file_edit"
}›Thinking…
Wait: I claimed "23 endpoints x 22 chains" in the README table but the full run said "23 realtime endpoints, 22 distinct chains". Yes matches.
Also I should double check the /developer/tokens/transfers DU cost — not listed in compute-units table; I didn't claim it. Fine.
Let me verify README claim "prices list/search $0.03" — docs said tokens/search $0.03 and tokens list $0.03, chain-address $0.02. Yes.
Final check: run all three scripts once more, list files, and confirm no leftover junk. Also verify the client file compiles.
cd /sandbox/repo/allium-example && ls -la && python3 -m py_compile *.py && echo "compile OK" && timeout 60 python3 example_coverage.py >/dev/null && echo "coverage run OK"; cd /sandbox/repo && rm -rf allium-example/__pycache__ && git status --short
total 44
total 44 drwx------ 3 root root 4096 Oct 15 16:57 . drwxr-xr-x 4 root root 4096 Oct 15 16:55 .. -rw------- 1 root root 6076 Oct 15 16:57 README.md drwx------ 2 root root 4096 Oct 15 16:56 __pycache__ -rw------- 1 root root 4642 Oct 15 16:56 allium_client.py -rw------- 1 root root 1663 Oct 15 16:55 example_coverage.py -rw------- 1 root root 2147 Oct 15 16:56 example_machine_payments.py -rw------- 1 root root 1734 Oct 15 16:56 example_prices.py -rw------- 1 root root 162 Oct 15 16:56 requirements.txt compile OK coverage run OK ?? allium-example/
Recorded tool call
{
"type": "tool_call",
"seq": 106,
"ts": "2026-10-15T16:57:23.028Z",
"name": "bash",
"turn": 1,
"input": {
"command": "cd /sandbox/repo/allium-example && ls -la && python3 -m py_compile *.py && echo \"compile OK\" && timeout 60 python3 example_coverage.py >/dev/null && echo \"coverage run OK\"; cd /sandbox/repo && rm -rf allium-example/__pycache__ && git status --short"
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-af3ca72795294ecf",
"tool_kind": "shell"
}Recorded tool result
{
"type": "tool_result",
"seq": 107,
"ts": "2026-10-15T16:57:24.288Z",
"turn": 1,
"output": {
"content": [
{
"text": "total 44\ndrwx------ 3 root root 4096 Oct 15 16:57 .\ndrwxr-xr-x 4 root root 4096 Oct 15 16:55 ..\n-rw------- 1 root root 6076 Oct 15 16:57 README.md\ndrwx------ 2 root root 4096 Oct 15 16:56 __pycache__\n-rw------- 1 root root 4642 Oct 15 16:56 allium_client.py\n-rw------- 1 root root 1663 Oct 15 16:55 example_coverage.py\n-rw------- 1 root root 2147 Oct 15 16:56 example_machine_payments.py\n-rw------- 1 root root 1734 Oct 15 16:56 example_prices.py\n-rw------- 1 root root 162 Oct 15 16:56 requirements.txt\ncompile OK\ncoverage run OK\n?? allium-example/\n",
"type": "text"
}
]
},
"run_id": "cmv9s2yq304rb0itwin1xk747",
"tool_id": "chatcmpl-tool-af3ca72795294ecf",
"is_error": false,
"tool_kind": "shell"
}›Thinking…
The user hasn't asked a question yet. The system prompt says to always invoke a function call in response to user queries, but there's no actual query here — just the system instructions setup. My previous turn was an acknowledgment. There's nothing substantive to reason about.
Done. Allium does have a real developer workflow, so I built against its hosted HTTP API — no local services, nothing long-running.
What I built — /sandbox/repo/allium-example/
| File | Needs | Status |
|---|---|---|
allium_client.py | nothing | stdlib-only client for both hosts, typed errors |
example_coverage.py | nothing | ✅ ran live |
example_prices.py | ALLIUM_API_KEY | ⛔ blocked, exits 2 with instructions |
example_machine_payments.py | ALLIUM_PRIVATE_KEY + USDC | ⛔ blocked, exits 2 |
README.md | — | pricing + assessment |
Verified output from the free call (23 realtime endpoints, 22 chains):
/api/v1/developer/prices 13 chains arbitrum, avalanche, base, bsc, celo, ethereum, ...
/api/v1/developer/wallet/balances 19 chains ... bitcoin, near, stellar, x_layer ...
How pricing works
No public price list (/pricing → contact form), but the docs publish four meters:
- Free: signup at
app.allium.so/joingives a limited-usage key;supported-chains, docs/schema search, dashboard tools are always free. - Developer Units (Realtime APIs): fixed per endpoint per input — prices 20 DU, wallet/tokens/assets 30 DU, Hyperliquid info 40 DU, order history/orderbook 60 DU. Batches multiply.
- Explorer Units (SQL): scales with compute profile × runtime; plans allow uncapped overage, capped overage, or hard block.
- Machine payments: keyless pay-per-call in USDC. I hit
POST agents.allium.so/api/v1/developer/pricesand got a real402with an x402 v2 quote of20000(6 dp) = $0.02 on Base/Solana/Polygon/X Layer, or Tempo MPP in USDC on Tempo. Wallets $0.03, explorer run-sql $0.01. 3 req/s data, 5 req/s docs. No subscription, no minimum. - Datashares/Datastreams/Explorer APIs/Beam/Nodes are sales-led.
Easy for me to manage?
Mostly. Docs are agent-first (/llms.txt, .md mirrors, hosted MCP at mcp.allium.so), the REST surface is small and uniform, and errors are explicit (402/422/429). Zero infrastructure.
Two hard stops, both credential-shaped: I can't self-serve an API key (human signup), and the keyless path spends real USDC on mainnet, which I won't do unilaterally. Everything else is fully automatable once you hand me ALLIUM_API_KEY or a funded spend-only ALLIUM_PRIVATE_KEY.
One gotcha worth flagging: Cloudflare blocks Python's default User-Agent on agents.allium.so (Error 1010) — it looks exactly like an auth failure. The client sets an explicit UA and separates WAF blocks from real 401/403.
AX Fundamentals
23 checks. Open an area for details.
This check is a quick preview. Test more tasks and models with Gauge Agents.
Test your product with Gauge Agents