Skip to main content

Authentication

Agents authenticate against Tatum by sending an API key in the x-api-key header on every request. No token exchange, no refresh, no callback URL.

The whole contract

One header on every request, against every route on every chain. That is the entire auth surface.

REQUEST
GET /v4/data/wallet/portfolio?address=0x…&chain=ethereum-mainnet Host: api.tatum.io x-api-key: t-6890…c0b8

Where the key lives

Read the key from the environment everywhere. Never commit it, and never put it in client-side code.

ENV VAR TATUM_API_KEY
SURFACE LOCATION NOTE
Blockchain MCP
env in your MCP client JSON

Lives in the editor config, never in the repo.

Backend app
.env or a secret manager

Server side only. The key is not public.

CI
GitHub Actions · GitLab · Vercel · Cloudflare

One key per environment, so you can rotate one at a time.

Local shell
export TATUM_API_KEY=…

Fine for scratch work. Rotate the key when you are done.

Check it in one call

A JSON body means the key works. Anything else is one of three answers, and each one tells you exactly what to change.

TERMINAL
curl -s -H "x-api-key: $TATUM_API_KEY" \     "https://api.tatum.io/v4/data/exchange-rate?currency=ETH&basePair=USD" {"value":"3241.08","basePair":"USD"}
WHAT COMES BACK
200

The key works

A JSON body comes back. Nothing else to do.

401

Header missing or wrong

Check the spelling of x-api-key and that the variable resolved.

429

Rate limited

Back off and retry. Do not hammer the API in a loop.