Search by name, SuiNS, address, digest, object ID, coin type or checkpoint.

API

Plans and credits

Every call costs credits. Your plan sets the monthly credits and the request rate.

Plans

History is the same on every plan: all of it, since genesis. Plans differ in volume, speed and streaming.

FreeDeveloperBusinessProfessionalEnterprise
Price$0$29/mo$249/mo$599/moCustom
Credits a month5M30M250M600MCustom
Extra creditsNone, hard stop$3 per M$3 per M$2.50 per MCustom
Requests a second, light1575300750Custom
Requests a second, heavy525100250Custom
HistoryAll, since genesisAllAllAllAll
Concurrent streams21050200Custom
Stream replay depth7 days90 daysSince genesisSince genesisSince genesis
Webhooks, addresses each5, 10,00025, 100,000100, 100,000250, 1,000,000Custom
API keys3102550Custom
SQL runs at once12346
SQL time limit per run30 s60 s120 s180 s300 s
SQL data read per run100 GB400 GB1 TB2 TB3 TB
SQL result rows100,000250,000500,0001,000,0001,000,000
SQL results kept7 days30 days90 days90 days1 year
SupportCommunityTelegramPriority TelegramDedicated channelSLA

With no key you are on the keyless tier: 2 requests a second and 1,000 credits a day per IP. Agents get a Free key by signature, see Keys for agents.

Developer, Business, Professional and Enterprise plans: join the tide Telegram and we move your key to that plan. Subscriptions are coming soon.

How credits work

  • Each method has a price in credits, listed below. Some methods add credits per item, for example one credit per transaction parsed.
  • A successful call is charged. A call that returns an error is free. The charge is in the x-credits-cost header.
  • On the Free plan the API stops when the month's credits run out and returns out_of_credits. Prepaid USDC credits keep it going, see Pay with USDC. Paid plans keep going and bill extra credits at the rate above, from prepaid credits first.
  • The Free plan is for one person. One IP can make at most 3 new free accounts a day, and one network (IPv4 /24 or IPv6 /64) at most 10. All Free accounts used from one network share 7,500,000 credits a month and 1.5 times one key's requests a second. An address with no on-chain history gets 1,000 credits a day until it makes a transaction or tops up. Prepaid USDC credits are never pooled or capped by these rules.
  • Requests a second are counted in two classes. Light calls cost 1 or 2 credits. Heavy calls cost 5 or more. A call over the rate gets a 429 with retry-after.
  • MCP tool calls cost the credits of the method they run.
  • A SQL run costs 20 credits plus 1 per 50 MB it reads, charged when it finishes. Reusing a recent identical result (max_age) costs 2. A run that hits its time, memory or read limit costs 10 plus 10 a second; a query rejected before it runs is free. Without a key, SQL runs one at a time with 15 s, 20 GB and 10,000 rows per run, from the keyless daily credits.
  • Status, the registry, OpenAPI, llms.txt and account calls are free.

Pay with USDC

You can buy credits with native USDC on Sui mainnet, with no card and no plan. The rate is $3 per million credits, the same as the overage price on Developer and Business. 1 USDC buys 333,333 credits. The coin type is 0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC.

Prepaid credits never expire. They are spent only after the plan's monthly credits run out, so a Free account keeps working past 5M, and a paid plan's overage is paid from prepaid credits first.

Top up

Sign in, open Billing in your API account, pick an amount and sign one USDC transfer with your wallet. Credits land when the transaction is final, about a second. It is gasless where the network allows, so you need no SUI.

Any USDC transfer from your account's Sui address to the treasury is credited to that account automatically. It is matched by sender and counted once per transaction digest. Plain transfers of at least $0.01 count. The minimum top-up through the API is $1.

Treasury
0x3d651ddf154835f6cd20e107a9a957b05cc701b9a492a7f680a0a4c3b5d8b0f1
CallWhat it does
GET /v1/billingYour credit balance.
GET /v1/billing/historyTop-ups and draws.
POST /v1/billing/topupBody { usd, gas? }. Returns unsigned base64 txBytes to sign. Without a key, pass address.
POST /v1/billing/topup/submitBody { txBytes, signature }. Sends it and returns { digest, checkpoint, credits, prepaid }.

These calls are free (0 credits). Auth is an API key or a dashboard session.

Top up from the API
curl -X POST "https://api.tide.ad/v1/billing/topup" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "content-type: application/json" \
  -d '{ "usd": 10 }'

# sign txBytes with your Sui key, then:

curl -X POST "https://api.tide.ad/v1/billing/topup/submit" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "content-type: application/json" \
  -d '{ "txBytes": "TX_BYTES", "signature": "SIGNATURE" }'

Auto top-up

Auto top-up uses sui::allowance. You grant tide's spender a limited allowance on chain. When your credits left (plan this month plus prepaid) fall under a threshold, tide draws USDC into the treasury, pays the gas itself, and credits your account. The spender may draw at most perDrawUsd per window and maxTotalUsd in all until the allowance expires. Sui enforces this, not tide.

  1. POST /v1/billing/allowance with { maxTotalUsd, perDrawUsd, windowHours, expiresDays, thresholdCredits }. windowHours defaults to 1 and expiresDays to 90. It returns an unsigned grant transaction.
  2. Sign and send it. This costs a little SUI gas. Allowances spend from the address balance, so the grant transaction can first move USDC coins into it (depositUsd).
  3. POST /v1/billing/allowance/confirm with { digest }.

Change or pause it with PUT /v1/billing/autotopup and { enabled, thresholdCredits, drawUsd }. POST /v1/billing/allowance/revoke returns an unsigned revoke. Revoking on chain from any wallet stops tide for good. After 3 failed draws auto top-up turns itself off.

Pay per call

Agents can pay with no account. A request with no key that is over the keyless daily limit, or with a key that is out of credits, gets 402 Payment Required. The body lists every offer in accepts (x402 version 2) and every MPP challenge in mpp. The headers stay small: PAYMENT-REQUIRED (base64 JSON) carries the cheapest offer and WWW-Authenticate: Payment (MPP, method sui, intent charge) one challenge.

accepts lists the offers. Each has scheme exact, network sui:mainnet, amount (raw USDC, 6 decimals), asset, payTo (the treasury), maxTimeoutSeconds 600, and extra with nonce, expiresAt, credits, gasless and validDuring (chain, minEpoch, maxEpoch, nonce).

OfferCreditsUse
$0.013,333Pays this call. The rest stays on your key.
$1333,333A session of calls.
$103,333,333A longer session.

Pay with x402

  1. Build a gasless transaction that sends exactly amount of the asset to payTo with balance::send_funds. Use gas price 0, budget 0, no gas coins, and a ValidDuring expiration from extra.validDuring (chain, epochs and the u32 nonce).
  2. Sign it.
  3. Retry the same request with the header PAYMENT-SIGNATURE (or X-PAYMENT) set to base64 JSON { x402Version: 2, accepted: <the offer>, payload: { signature, transaction } }.

tide checks the exact amount, the recipient, the single-use nonce and the expiry, submits the transaction, waits for finality, and answers the call. The response carries PAYMENT-RESPONSE (base64 { success, transaction, network, payer }) and X-Tide-Api-Key.

Pay with MPP

Pay the challenge, then retry with Authorization: Payment <credential> carrying the digest and a signed proof. tide returns Payment-Receipt.

The 402 flow
curl -i "https://api.tide.ad/v1/coins/0x2::sui::SUI"
# HTTP/2 402
# payment-required: eyJ4NDAyVmVyc2lvbiI6Mi...   (base64 JSON, same object as the body)

# build and sign the payment for one offer in accepts, then:

curl -i "https://api.tide.ad/v1/coins/0x2::sui::SUI" \
  -H "PAYMENT-SIGNATURE: BASE64_PAYMENT"
# HTTP/2 200
# payment-response: eyJzdWNjZXNzIjp0cnVlLi4u
# x-tide-api-key: tide_...

Session key

Every payment's credits go to an account owned by the payer address. X-Tide-Api-Key is a key derived from that address, the same key every time, so one $1 or $10 payment buys a session of calls. Use it as Authorization: Bearer.

GET /v1/billing/offers (no key) returns the offers up front. POST /v1/billing/pay settles a payment without calling anything else and returns { digest, payer, credits, apiKey }.

Unpaid 402s are rate limited per IP, and a call over the limit gets a 429. Each payment is credited once (by digest and by nonce), only after its checkpoint is final.

Credits per method

Assets

MethodCreditsRate class
getAsset2Light
getAssetBatchvariesLight
getAssetsByOwner5Heavy
getAssetsByGroup5Heavy
searchAssets5Heavy
getTransactionsForAsset5Heavy
getKiosk2Light
kiosk.policies2Light

Transactions

MethodCreditsRate class
tx.parsevariesHeavy
tx.history10Heavy
getTransactionsForAddressvariesHeavy
getTransaction1Light
getTransactionBlock1Light
bridge.transfers3Light

Wallet

Coins

MethodCreditsRate class
coins.get1Light
coins.pricesvariesLight
coins.candles2Light
coins.holders5Heavy
coins.trades2Light
coins.pools2Light
coins.security2Light
markets.top2Light
coins.holdersAt25Heavy

Chain

MethodCreditsRate class
objects.get1Light
objects.history5Heavy
events.list5Heavy
checkpoints.get1Light
epochs.list1Light
validators.list1Light
packages.get1Light
names.resolve1Light
names.reverse1Light
search1Light

Simulate

Sending transactions

MethodCreditsRate class
tx.send5send
sui_executeTransactionBlock5send

Build

MethodCreditsRate class
tx.build15Heavy
buildTransaction15Heavy
yield.withdrawPlanvariesHeavy

Sign in with Google

MethodCreditsRate class
zklogin.saltFreeLight
zklogin.proofvariesNone
zklogin.backupFreeLight
zklogin.importFreeLight
zklogin.clientsFreeLight
zklogin.clientAddFreeLight
zklogin.clientRemoveFreeLight
zklogin.configFreeNone

Objects

MethodCreditsRate class
objects.at5Heavy
objects.dynamicFields2Light
objects.tree10Heavy

Packages

MethodCreditsRate class
packages.abi2Light
packages.versions2Light
packages.usage10Heavy
packages.callers10Heavy
packages.howToCall1Light

Staking

MethodCreditsRate class
wallet.stakes3Light
validators.history2Light

AI agents

MethodCreditsRate class
agents.overview1Light
agents.feed1Light
agents.wallet2Light
agents.owner2Light

Yield

MethodCreditsRate class
yield.options2Light
yield.planvariesLight

Order books

MethodCreditsRate class
books.list2Light
books.depth3Light
books.trades2Light
wallet.orders5Heavy

Walrus

MethodCreditsRate class
walrus.blob2Light
walrus.blobs2Light
walrus.blobDetail3Light

SQL

MethodCreditsRate class
sql.executevariesHeavy
sql.statusFreeLight
sql.resultsFreeLight
sql.results_csvFreeLight
sql.cancelFreeLight
sql.schemaFreeLight
sql.translateFreeLight
sql.limitsFreeLight
sql.pulseFreeLight
query.createFreeLight
query.getFreeLight
query.updateFreeLight
query.forkFreeLight
query.starFreeLight
query.listFreeLight
query.executevariesHeavy
query.resultsFreeLight
dashboard.createFreeLight
dashboard.getFreeLight
dashboard.updateFreeLight
dashboard.forkFreeLight
dashboard.starFreeLight
dashboard.runvariesHeavy
dashboard.listFreeLight
dashboard.galleryFreeLight
dashboard.headlinesFreeLight
dashboard.publishFreeLight
dashboard.unpublishFreeLight
dashboard.viewFreeLight
dashboard.reportFreeLight

Gas

MethodCreditsRate class
getGasPriceEstimate1Light