{"openapi":"3.1.0","info":{"title":"tide API","version":"1.0.0","summary":"Sui data for apps and agents.","description":"Assets, parsed transactions, full history since genesis, wallets, coins, streams and webhooks for Sui. REST under /v0 and /v1. JSON-RPC 2.0 methods are POST / with a body { jsonrpc, id, method, params }; each is listed here as a path ending in #method so every method has its own operation (the fragment is not sent). Auth: api-key query parameter or x-api-key header. Calls without a key use the keyless tier.","contact":{"name":"@suidevv on Telegram","url":"https://t.me/suidevv"}},"servers":[{"url":"https://api.tide.ad"}],"tags":[{"name":"Assets","description":"NFTs, coins and kiosks in the DAS layout."},{"name":"Transactions","description":"Parsed transactions with plain-language explanations."},{"name":"History","description":"Full address history since genesis."},{"name":"Wallet","description":"Balances, identity, PnL, positions and holdings at any time."},{"name":"Coins and markets","description":"Prices, candles, holders, trades, pools and safety checks."},{"name":"Chain","description":"Objects, events, checkpoints, epochs, validators, packages, names and search."},{"name":"Simulate","description":"Dry-run a transaction before signing and get it explained."},{"name":"Objects and fields","description":"Objects at any version, dynamic fields and object trees."},{"name":"Packages","description":"Move ABIs, upgrade history, usage, callers and ready-to-use call templates."},{"name":"Staking","description":"Stakes with rewards so far, and validator history per epoch."},{"name":"Order books","description":"DeepBook pools, depth, trades and open orders."},{"name":"Walrus","description":"Walrus blobs: status, size, expiry and owner."},{"name":"SQL","description":"Run SQL over every Sui transaction, event, object version and balance change since genesis, about a second behind the chain."},{"name":"Gas","description":"Gas price estimates."},{"name":"Streams","description":"Live and replayed data over SSE and WebSocket."},{"name":"Webhooks","description":"Signed push delivery of matching transactions."},{"name":"Account and keys","description":"Sign in with a wallet, create and manage API keys."},{"name":"Meta","description":"Status, catalog and agent endpoints."}],"security":[{"ApiKeyQuery":[]},{"ApiKeyHeader":[]},{}],"paths":{"/":{"get":{"operationId":"meta_index","summary":"What this API is and where to start.","description":"Returns links to the docs, the OpenAPI spec, llms.txt, the MCP endpoint and the status. Costs nothing.\n\nCredits: 0.","tags":["Meta"],"x-credits":0,"x-tide-name":"meta.index","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"security":[{},{"ApiKeyQuery":[]},{"ApiKeyHeader":[]}],"parameters":[{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v0/status":{"get":{"operationId":"meta_status","summary":"Live status: index head, chain tip, lag and per-method latency.","description":"Use it to check freshness before trusting live answers. `asOf.lagMs` is how far the index is behind the chain tip. `latency` lists p50, p90 and p99 in milliseconds per method over recent calls. Costs nothing.\n\nCredits: 0.","tags":["Meta"],"x-credits":0,"x-tide-name":"meta.status","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"security":[{},{"ApiKeyQuery":[]},{"ApiKeyHeader":[]}],"parameters":[{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v0/auth/nonce":{"post":{"operationId":"auth_nonce","summary":"Start a sign-in: get a message to sign with a Sui key.","description":"Returns a one-time nonce and the exact message to sign. Sign `message` as a Sui personal message with the key of `address`, then send the signature to POST /v0/auth/verify (developer portal session) or POST /v0/keys/agent (a Free API key in one step). The nonce works once and expires after 5 minutes. Costs nothing.\n\nCredits: 0.","tags":["Account and keys"],"x-credits":0,"x-tide-name":"auth.nonce","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string"},"nonce":{"type":"string"},"issued":{"type":"string"},"expiresAt":{"type":"string"},"message":{"type":"string","description":"Sign exactly this text."}}},"example":{"address":"0x7d20dcdb2bca4f508ea9613994683eb4e76e9c4ed371169677c1be02aaf0b58e","nonce":"k3Jd8sLq0Xv2mZpA9rTb1WcE","issued":"2026-11-03T12:00:00.000Z","expiresAt":"2026-11-03T12:05:00.000Z","message":"tide.ad wants you to sign in\n\naddress: 0x7d20dcdb2bca4f508ea9613994683eb4e76e9c4ed371169677c1be02aaf0b58e\nnonce: k3Jd8sLq0Xv2mZpA9rTb1WcE\nissued: 2026-11-03T12:00:00.000Z"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string","description":"The Sui address that will sign (0x + 64 hex)."}},"required":["address"]}}}},"parameters":[{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v0/auth/verify":{"post":{"operationId":"auth_verify","summary":"Finish sign-in: trade a signature for a 30-day session token.","description":"Checks the signature over the message from POST /v0/auth/nonce and returns a session token that starts with `tsess_`. Send it as `Authorization: Bearer <token>` to the account and key routes. The account is created on first sign-in with the Free plan. Sessions last 30 days. Costs nothing.\n\nCredits: 0.","tags":["Account and keys"],"x-credits":0,"x-tide-name":"auth.verify","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string"},"expiresAt":{"type":"string"},"address":{"type":"string"},"plan":{"type":"string"}}},"example":{"token":"tsess_...","expiresAt":"2026-12-03T12:00:00.000Z","address":"0x7d20dcdb2bca4f508ea9613994683eb4e76e9c4ed371169677c1be02aaf0b58e","plan":"free"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string","description":"The Sui address that signed (0x + 64 hex)."},"signature":{"type":"string","description":"Base64 Sui signature of the personal message from /v0/auth/nonce. Any scheme works: ed25519, secp256k1, secp256r1, zkLogin, multisig."},"message":{"type":"string","description":"The exact `message` text returned by POST /v0/auth/nonce. Send this, or nonce and issued."},"nonce":{"type":"string","description":"The nonce from POST /v0/auth/nonce (with issued, instead of message)."},"issued":{"type":"string","description":"The issued time from POST /v0/auth/nonce (with nonce, instead of message)."}},"required":["address","signature"]}}}},"parameters":[{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v0/keys/agent":{"post":{"operationId":"keys_agent","summary":"Agents: sign one message with any Sui key, get a Free API key.","description":"One step for agents: call POST /v0/auth/nonce, sign the `message` with any Sui key, then send address, signature and message here. You get the account (created on first use, Free plan) and a new API key in one response. The key is shown once; store it. At most 3 agent keys per address per day, and the Free plan holds 3 keys in total. No email, no payment.\n\nCredits: 0.","tags":["Account and keys"],"x-credits":0,"x-tide-name":"keys.agent","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"key":{"type":"string","description":"The API key, `tide_` + 32 characters. Shown once."},"id":{"type":"string"},"address":{"type":"string"},"plan":{"type":"string"},"limits":{"type":"object"}}},"example":{"key":"tide_...","id":"kid_...","address":"0x7d20dcdb2bca4f508ea9613994683eb4e76e9c4ed371169677c1be02aaf0b58e","plan":"free","limits":{"creditsMonth":5000000,"lightRps":15,"heavyRps":5}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string","description":"The Sui address that signed (0x + 64 hex)."},"signature":{"type":"string","description":"Base64 Sui signature of the personal message from /v0/auth/nonce. Any scheme works: ed25519, secp256k1, secp256r1, zkLogin, multisig."},"message":{"type":"string","description":"The exact `message` text returned by POST /v0/auth/nonce. Send this, or nonce and issued."},"nonce":{"type":"string","description":"The nonce from POST /v0/auth/nonce (with issued, instead of message)."},"issued":{"type":"string","description":"The issued time from POST /v0/auth/nonce (with nonce, instead of message)."}},"required":["address","signature"]}}}},"parameters":[{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v0/keys":{"get":{"operationId":"keys_list","summary":"List your API keys.","description":"Lists the active keys of the signed-in account with name, created and last used times and access rules. The key secret is never shown again after it is created. Needs a session token from POST /v0/auth/verify.\n\nCredits: 0.","tags":["Account and keys"],"x-credits":0,"x-tide-name":"keys.list","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Key id (not the secret). Use it to rename or revoke."},"name":{"type":"string"},"createdMs":{"type":"integer"},"lastUsedMs":{"type":["integer","null"]},"allowedOrigins":{"type":"array","items":{"type":"string"}},"allowedIps":{"type":"array","items":{"type":"string"}},"agent":{"type":"boolean","description":"True when the key was made by POST /v0/keys/agent."}}}},"limit":{"type":"integer","description":"Keys this plan allows."}}},"example":{"items":[{"id":"kid_abc123","name":"backend","createdMs":1793700000000,"lastUsedMs":null,"allowedOrigins":[],"allowedIps":[],"agent":false}],"limit":3}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]},"post":{"operationId":"keys_create","summary":"Create an API key.","description":"Creates a key for the signed-in account and returns it once in `key`. Optional `allowedOrigins` (for browser use, like `app.example.com` or `*.example.com`) and `allowedIps` (exact address or IPv4 CIDR) restrict where the key works. The plan sets how many keys you can hold. Needs a session token.\n\nCredits: 0.","tags":["Account and keys"],"x-credits":0,"x-tide-name":"keys.create","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"key":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"}}},"example":{"key":"tide_...","id":"kid_abc123","name":"backend"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"A label for you, up to 60 characters."},"allowedOrigins":{"type":"array","items":{"type":"string"},"description":"Browser origins allowed to use the key. Empty means any."},"allowedIps":{"type":"array","items":{"type":"string"},"description":"IP addresses or IPv4 CIDR ranges allowed. Empty means any."}}}}}},"parameters":[{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v0/keys/{id}":{"put":{"operationId":"keys_update","summary":"Rename a key or change where it works.","description":"Changes the name, allowed origins or allowed IPs of one of your keys. Fields you leave out stay as they are. Rules apply within 30 seconds.\n\nCredits: 0.","tags":["Account and keys"],"x-credits":0,"x-tide-name":"keys.update","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"updated":{"type":"boolean"}}},"example":{"updated":true}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"allowedOrigins":{"type":"array","items":{"type":"string"}},"allowedIps":{"type":"array","items":{"type":"string"}}}}}}},"parameters":[{"name":"id","in":"path","required":true,"description":"Key id from GET /v0/keys.","schema":{"type":"string","description":"Key id from GET /v0/keys."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]},"delete":{"operationId":"keys_revoke","summary":"Revoke an API key.","description":"Revokes one of your keys. It stops working within 30 seconds and cannot be restored. Usage already recorded for it stays in your totals.\n\nCredits: 0.","tags":["Account and keys"],"x-credits":0,"x-tide-name":"keys.revoke","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"revoked":{"type":"boolean"}}},"example":{"revoked":true}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"id","in":"path","required":true,"description":"Key id from GET /v0/keys.","schema":{"type":"string","description":"Key id from GET /v0/keys."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v0/account":{"get":{"operationId":"account_get","summary":"Your plan, credits used and left this month, and limits.","description":"Returns the plan of the signed-in account, the credits used and left this month (Free stops at zero; paid plans keep working and report `overage`), and every limit of the plan: requests per second per class, streams, webhooks, keys and replay depth. Credits reset on the 1st (UTC).\n\nCredits: 0.","tags":["Account and keys"],"x-credits":0,"x-tide-name":"account.get","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string"},"plan":{"type":"string"},"credits":{"type":"object"},"limits":{"type":"object"},"keys":{"type":"integer"}}},"example":{"address":"0x7d20dcdb2bca4f508ea9613994683eb4e76e9c4ed371169677c1be02aaf0b58e","plan":"free","month":"2026-11","credits":{"used":1200,"limit":5000000,"remaining":4998800,"overage":0,"resetsAt":"2026-12-01T00:00:00.000Z"},"limits":{"plan":"free","priceUsdMonth":0,"creditsMonth":5000000,"creditsDay":0,"hardStop":true,"lightRps":15,"heavyRps":5,"streamRps":2,"streams":2,"webhooks":5,"addressesPerWebhook":10000,"keys":3,"replayDays":7,"overagePerMillionUsd":null},"keys":1}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v0/account/usage":{"get":{"operationId":"account_usage","summary":"Usage per day and method.","description":"Returns calls and credits per day and per method for the signed-in account, newest day first. Defaults to the last 30 days; pass `from` and `to` as YYYY-MM-DD (UTC, inclusive) for another range, or `key` to see one key. Recent calls show within about 5 seconds.\n\nCredits: 0.","tags":["Account and keys"],"x-credits":0,"x-tide-name":"account.usage","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"},"items":{"type":"array","items":{"type":"object","properties":{"day":{"type":"string"},"method":{"type":"string"},"calls":{"type":"integer"},"credits":{"type":"integer"}}}},"totals":{"type":"object"}}},"example":{"from":"2026-11-01","to":"2026-11-03","items":[{"day":"2026-11-03","method":"getAsset","calls":120,"credits":240}],"totals":{"calls":120,"credits":240}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"from","in":"query","required":false,"description":"First day, YYYY-MM-DD (UTC). Default 30 days ago.","schema":{"type":"string","description":"First day, YYYY-MM-DD (UTC). Default 30 days ago."}},{"name":"to","in":"query","required":false,"description":"Last day, YYYY-MM-DD (UTC). Default today.","schema":{"type":"string","description":"Last day, YYYY-MM-DD (UTC). Default today."}},{"name":"key","in":"query","required":false,"description":"Only this key id.","schema":{"type":"string","description":"Only this key id."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/#getAsset":{"post":{"operationId":"getAsset","summary":"One asset: an NFT, kiosk item, SuiNS name, other object, or a coin type.","description":"Returns the asset in DAS layout: content (name, image, traits), grouping (collection), royalty, creators, ownership (including kiosk and listing price), and a sui block with type, version, digest and display. Pass an object id for NFTs, kiosk items and SuiNS names, or a Move coin type for a coin (then token_info holds supply and the price with its time). Returns not_found when the object does not exist.\n\nCredits: 2.","tags":["Assets"],"x-credits":2,"x-tide-name":"getAsset","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"x-jsonrpc-method":"getAsset","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["jsonrpc","id","method"],"properties":{"jsonrpc":{"type":"string","enum":["2.0"]},"id":{"oneOf":[{"type":"string"},{"type":"integer"}]},"method":{"type":"string","enum":["getAsset"]},"params":{"type":"object","properties":{"id":{"type":"string","description":"Asset id: an object id (0x...) for NFTs, kiosk items and SuiNS names, or a Move coin type (0x2::sui::SUI) for a coin."},"options":{"type":"object","description":"Optional flags.","properties":{"showCollectionMetadata":{"type":"boolean","description":"Add collection_metadata (name, image, slug) to grouping."}}}},"required":["id"]}}},"example":{"jsonrpc":"2.0","id":1,"method":"getAsset","params":{"id":"0xae81a1f657fa67206d3de56546fb476a2726266e06ad8ae225cd8f161887c1e0"}}}}}}},"/#getAssetBatch":{"post":{"operationId":"getAssetBatch","summary":"Up to 1,000 assets by id in one call.","description":"Takes object ids and coin types (mixed is fine) and returns { items, asOf } with one entry per id in the same order, null where the id does not exist. Use it to enrich a list of ids from a transaction or wallet. The result is wrapped in an object so asOf can ride along. Costs 2 credits plus 1 per 10 ids.\n\nCredits: varies.","tags":["Assets"],"x-credits":"varies","x-tide-name":"getAssetBatch","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"x-jsonrpc-method":"getAssetBatch","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["jsonrpc","id","method"],"properties":{"jsonrpc":{"type":"string","enum":["2.0"]},"id":{"oneOf":[{"type":"string"},{"type":"integer"}]},"method":{"type":"string","enum":["getAssetBatch"]},"params":{"type":"object","properties":{"ids":{"type":"array","maxItems":1000,"items":{"type":"string"},"description":"Object ids (0x...) and coin types (0x2::sui::SUI), at most 1,000."},"options":{"type":"object","description":"Optional flags.","properties":{"showCollectionMetadata":{"type":"boolean","description":"Add collection_metadata (name, image, slug) to grouping."}}}},"required":["ids"]}}},"example":{"jsonrpc":"2.0","id":1,"method":"getAssetBatch","params":{"ids":["0xae81a1f657fa67206d3de56546fb476a2726266e06ad8ae225cd8f161887c1e0","0x2::sui::SUI"]}}}}}}},"/#getAssetsByOwner":{"post":{"operationId":"getAssetsByOwner","summary":"Everything an address holds: NFTs (including those in its kiosks), SuiNS names and optionally coins.","description":"Lists the NFTs and SuiNS names an address owns, including items sitting in the kiosks it controls through a KioskOwnerCap. Set options.showFungible to add its coins on the first page (summed per coin type, most valuable first, up to 100) and options.showNativeBalance to add the SUI balance with its USD value and price time. Set options.showZeroBalance to keep coins with a zero balance. Ownership is read from the NFT index, so the newest second of transfers may lag. Pages hold up to 100 items; use cursor to continue.\n\nCredits: 5.","tags":["Assets"],"x-credits":5,"x-tide-name":"getAssetsByOwner","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"x-jsonrpc-method":"getAssetsByOwner","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["jsonrpc","id","method"],"properties":{"jsonrpc":{"type":"string","enum":["2.0"]},"id":{"oneOf":[{"type":"string"},{"type":"integer"}]},"method":{"type":"string","enum":["getAssetsByOwner"]},"params":{"type":"object","properties":{"ownerAddress":{"type":"string","description":"Owner: a 0x address or a SuiNS name ending in .sui."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":50,"description":"Items per page, 1 to 100 (each item carries its full traits)."},"cursor":{"type":"string","description":"Cursor from the previous response. Preferred over page."},"page":{"type":"integer","minimum":1,"maximum":10,"description":"Page number, 1 to 10. tide maps it to a cursor. Use cursor for anything deeper."},"sortBy":{"description":"An object { sortBy, sortDirection }. sortBy: created, updated, recent_action, none (default order), or tide's price, rarity, listed, floor. sortDirection: asc or desc.","oneOf":[{"type":"string"},{"type":"object","properties":{"sortBy":{"type":"string"},"sortDirection":{"type":"string","enum":["asc","desc"]}}}]},"options":{"type":"object","description":"Optional flags.","properties":{"showFungible":{"type":"boolean","description":"Add the owner's coins as Coin assets on the first page (page 1 or no cursor)."},"showNativeBalance":{"type":"boolean","description":"Add nativeBalance: SUI balance in MIST, as an amount, and its USD value with priceAsOf."},"showCollectionMetadata":{"type":"boolean","description":"Add collection_metadata (name, image, slug) to grouping."},"showZeroBalance":{"type":"boolean","description":"Keep coins whose balance is zero (only with showFungible)."}}}},"required":["ownerAddress"]}}},"example":{"jsonrpc":"2.0","id":1,"method":"getAssetsByOwner","params":{"ownerAddress":"0xb30ad69255009768b8f651f10f0055090b19783755ec2154d7fd9cf873f7dc47","limit":5,"options":{"showFungible":true,"showNativeBalance":true}}}}}}}},"/#getAssetsByGroup":{"post":{"operationId":"getAssetsByGroup","summary":"The items of one collection.","description":"Lists the items of a collection. groupKey is collection; groupValue is the Move struct type of the items (0x...::module::Name) or the collection slug. Items come with traits, listing price and rarity. Sort with sortBy price, rarity or listed. Returns not_found when no collection matches.\n\nCredits: 5.","tags":["Assets"],"x-credits":5,"x-tide-name":"getAssetsByGroup","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"x-jsonrpc-method":"getAssetsByGroup","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["jsonrpc","id","method"],"properties":{"jsonrpc":{"type":"string","enum":["2.0"]},"id":{"oneOf":[{"type":"string"},{"type":"integer"}]},"method":{"type":"string","enum":["getAssetsByGroup"]},"params":{"type":"object","properties":{"groupKey":{"type":"string","enum":["collection"],"description":"Only collection is supported on Sui."},"groupValue":{"type":"string","description":"The collection's Move struct type or its slug."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":50,"description":"Items per page, 1 to 100 (each item carries its full traits)."},"cursor":{"type":"string","description":"Cursor from the previous response. Preferred over page."},"page":{"type":"integer","minimum":1,"maximum":10,"description":"Page number, 1 to 10. tide maps it to a cursor. Use cursor for anything deeper."},"sortBy":{"description":"An object { sortBy, sortDirection }. sortBy: created, updated, recent_action, none (default order), or tide's price, rarity, listed, floor. sortDirection: asc or desc.","oneOf":[{"type":"string"},{"type":"object","properties":{"sortBy":{"type":"string"},"sortDirection":{"type":"string","enum":["asc","desc"]}}}]},"options":{"type":"object","description":"Optional flags.","properties":{"showCollectionMetadata":{"type":"boolean","description":"Add collection_metadata (name, image, slug) to grouping."}}}},"required":["groupKey","groupValue"]}}},"example":{"jsonrpc":"2.0","id":1,"method":"getAssetsByGroup","params":{"groupKey":"collection","groupValue":"0xb908f3c6fea6865d32e2048c520cdfe3b5c5bbcebb658117c41bad70f52b7ccc::popkins_nft::Popkins","limit":5}}}}}}},"/#searchAssets":{"post":{"operationId":"searchAssets","summary":"Find assets by owner, collection, name, traits or kind.","description":"Filters assets. Pass ownerAddress and/or grouping [\"collection\", type-or-slug]; with neither, only tokenType fungible with a name works (a coin search). name matches the item or coin name. traits is a list of { trait_type, value } and works with grouping (server side); with only an owner it filters inside each page. tokenType: nonFungible (default), fungible (an owner's coins, or a coin search by name), all (with an owner: coins on the first page plus NFTs). interface keeps SuiNFT, KioskItem, SuiNSName or Object. burnt true is not indexed yet.\n\nCredits: 5.","tags":["Assets"],"x-credits":5,"x-tide-name":"searchAssets","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"x-jsonrpc-method":"searchAssets","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["jsonrpc","id","method"],"properties":{"jsonrpc":{"type":"string","enum":["2.0"]},"id":{"oneOf":[{"type":"string"},{"type":"integer"}]},"method":{"type":"string","enum":["searchAssets"]},"params":{"type":"object","properties":{"ownerAddress":{"type":"string","description":"Owner address or .sui name."},"grouping":{"type":"array","items":{"type":"string"},"minItems":2,"maxItems":2,"description":"[\"collection\", \"<Move type or slug>\"]."},"interface":{"type":"string","enum":["SuiNFT","KioskItem","SuiNSName","Coin","Object"],"description":"Keep one asset interface."},"tokenType":{"type":"string","enum":["fungible","nonFungible","all"],"description":"Default nonFungible."},"name":{"type":"string","description":"Match on the item name (or coin name or symbol for fungible)."},"traits":{"type":"array","items":{"type":"object","properties":{"trait_type":{"type":"string"},"value":{"type":"string"}},"required":["trait_type","value"]},"description":"Trait filters. Values of one trait_type are alternatives; different types combine."},"burnt":{"type":"boolean","description":"Only false (the default) is supported."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":50,"description":"Items per page, 1 to 100 (each item carries its full traits)."},"cursor":{"type":"string","description":"Cursor from the previous response. Preferred over page."},"page":{"type":"integer","minimum":1,"maximum":10,"description":"Page number, 1 to 10. tide maps it to a cursor. Use cursor for anything deeper."},"sortBy":{"description":"An object { sortBy, sortDirection }. sortBy: created, updated, recent_action, none (default order), or tide's price, rarity, listed, floor. sortDirection: asc or desc.","oneOf":[{"type":"string"},{"type":"object","properties":{"sortBy":{"type":"string"},"sortDirection":{"type":"string","enum":["asc","desc"]}}}]},"options":{"type":"object","description":"Optional flags.","properties":{"showCollectionMetadata":{"type":"boolean","description":"Add collection_metadata (name, image, slug) to grouping."}}}}}}},"example":{"jsonrpc":"2.0","id":1,"method":"searchAssets","params":{"grouping":["collection","0xb908f3c6fea6865d32e2048c520cdfe3b5c5bbcebb658117c41bad70f52b7ccc::popkins_nft::Popkins"],"traits":[{"trait_type":"Skin","value":"Forest"}],"limit":5}}}}}}},"/#getTransactionsForAsset":{"post":{"operationId":"getTransactionsForAsset","summary":"Every transaction that changed an object, newest first.","description":"Returns the object's version history from the index: for each version the transaction digest, checkpoint, timestamp, version, previous version, what happened (created, mutated, transferred, wrapped, unwrapped, deleted), the new owner and the address that sent it. The history is complete from the first indexed checkpoint; older objects return not_indexed with the lowest checkpoint available. Page with cursor. getSignaturesForAsset is an alias that returns the same rows. Link a digest to getTransaction for the parsed transaction.\n\nCredits: 5.","tags":["Assets"],"x-credits":5,"x-tide-name":"getTransactionsForAsset","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"x-jsonrpc-method":"getTransactionsForAsset","x-jsonrpc-aliases":["getSignaturesForAsset"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["jsonrpc","id","method"],"properties":{"jsonrpc":{"type":"string","enum":["2.0"]},"id":{"oneOf":[{"type":"string"},{"type":"integer"}]},"method":{"type":"string","enum":["getTransactionsForAsset","getSignaturesForAsset"]},"params":{"type":"object","properties":{"id":{"type":"string","description":"Object id (0x...) of the NFT, kiosk item, SuiNS name or any other object."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":25,"description":"Versions per page."},"cursor":{"type":"string","description":"Cursor from the previous response."}},"required":["id"]}}},"example":{"jsonrpc":"2.0","id":1,"method":"getTransactionsForAsset","params":{"id":"0xae81a1f657fa67206d3de56546fb476a2726266e06ad8ae225cd8f161887c1e0","limit":5}}}}}}},"/#getKiosk":{"post":{"operationId":"getKiosk","summary":"A kiosk: who controls it, what is in it, and what is listed at what price.","description":"Returns the kiosk's controlling address (the holder of its KioskOwnerCap), the cap id, profits, and a page of its items. Each item has its id (pass it to getAsset for full details), type, name, image, whether it is locked, and its listing when listed: the price a buyer pays in SUI with USD and its price time, and the venue (kiosk, Tradeport and so on). limit counts kiosk entries per page (an item can use up to three entries: item, lock, listing), so pages may hold fewer items than limit. Continue with cursor.\n\nCredits: 2.","tags":["Assets"],"x-credits":2,"x-tide-name":"getKiosk","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"x-jsonrpc-method":"getKiosk","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["jsonrpc","id","method"],"properties":{"jsonrpc":{"type":"string","enum":["2.0"]},"id":{"oneOf":[{"type":"string"},{"type":"integer"}]},"method":{"type":"string","enum":["getKiosk"]},"params":{"type":"object","properties":{"id":{"type":"string","description":"Kiosk object id (0x...)."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":100,"description":"Kiosk entries per page."},"cursor":{"type":"string","description":"Cursor from the previous response."}},"required":["id"]}}},"example":{"jsonrpc":"2.0","id":1,"method":"getKiosk","params":{"id":"0x57086347a30d901959121b754afe961c475541636ab2b98001ef11503c8b5509"}}}}}}},"/v1/coins/{type}":{"get":{"operationId":"coins_get","summary":"One coin: metadata, supply, price, market cap, volume, liquidity, holders and who holds the TreasuryCap.","description":"Returns the coin's name, symbol, decimals and icon, total and circulating supply, the USD price with its time (with lowLiquidity: true when it is the last trade of a coin with no pool of $1,000 or more; market cap and fully diluted value are null then), market cap, fully diluted value, 24 hour volume and liquidity (each USD value as { usd, priceAsOf }), the holder count, who published it and when, and the control summary (field authority): whether the TreasuryCap can still mint more, whether the deny list can block addresses, and whether the metadata can still change. Amounts are decimal numbers with the raw integer beside them (amountRaw). Use it first when you need to know what a coin is.\n\nCredits: 1.","tags":["Coins and markets"],"x-credits":1,"x-tide-name":"coins.get","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"type","in":"path","required":true,"description":"Move coin type, URL-encoded in the path, for example 0x2::sui::SUI or 0xdeeb7a46...::deep::DEEP.","schema":{"type":"string","description":"Move coin type, URL-encoded in the path, for example 0x2::sui::SUI or 0xdeeb7a46...::deep::DEEP."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/prices":{"post":{"operationId":"coins_prices","summary":"USD prices for up to 100 coins, now or at a past time.","description":"Send coinTypes (up to 100 Move types) and get one row per type in the same order: usd and priceAsOf, which is the time of the price. A coin with a pool holding at least $1,000 of liquidity (at that time, for at), a live bonding curve or a major market gets its price. A coin that trades without such a pool gets its last trade price with lowLiquidity: true; treat that price as indicative, since the pool cannot absorb a real sale. Any other coin returns usd null and priceAsOf null. Pass at (unix seconds or an ISO date) for the price at that time from the trade history; the live price is the default. Costs 1 credit per 10 coins.\n\nCredits: varies.","tags":["Coins and markets"],"x-credits":"varies","x-tide-name":"coins.prices","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"coinTypes":{"type":"array","maxItems":100,"items":{"type":"string"},"description":"Move coin types, at most 100."},"at":{"type":"string","description":"Optional: unix seconds or ISO date for a past price. Omit for the live price."}},"required":["coinTypes"]}}}},"parameters":[{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/coins/{type}/candles":{"get":{"operationId":"coins_candles","summary":"OHLCV candles for a coin at 1 second to 1 week intervals.","description":"Returns candles oldest first: time (unix seconds, the candle's open), open, high, low, close in USD at that candle, and volumeUsd. interval is one of 1s, 1m, 5m, 15m, 1h, 4h, 1d, 1w (1s covers only the last five minutes). Bound the range with from and to (unix seconds or ISO). When more candles exist than limit, cursor is set; pass it back as cursor to continue into the past.\n\nCredits: 2.","tags":["Coins and markets"],"x-credits":2,"x-tide-name":"coins.candles","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"type","in":"path","required":true,"description":"Move coin type, URL-encoded in the path, for example 0x2::sui::SUI or 0xdeeb7a46...::deep::DEEP.","schema":{"type":"string","description":"Move coin type, URL-encoded in the path, for example 0x2::sui::SUI or 0xdeeb7a46...::deep::DEEP."}},{"name":"interval","in":"query","required":false,"description":"Candle size.","schema":{"type":"string","enum":["1s","1m","5m","15m","1h","4h","1d","1w"],"default":"1h","description":"Candle size."}},{"name":"from","in":"query","required":false,"description":"Earliest candle: unix seconds or ISO date.","schema":{"type":"string","description":"Earliest candle: unix seconds or ISO date."}},{"name":"to","in":"query","required":false,"description":"Latest candle: unix seconds or ISO date. Default now.","schema":{"type":"string","description":"Latest candle: unix seconds or ISO date. Default now."}},{"name":"limit","in":"query","required":false,"description":"Most candles to return (the newest in range).","schema":{"type":"integer","minimum":1,"maximum":1000,"default":200,"description":"Most candles to return (the newest in range)."}},{"name":"cursor","in":"query","required":false,"description":"Cursor from the previous response; continues into the past.","schema":{"type":"string","description":"Cursor from the previous response; continues into the past."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/coins/{type}/holders":{"get":{"operationId":"coins_holders","summary":"Top holders of a coin, ranked by balance, with the USD value of each.","description":"Returns holders largest first: rank, owner (address, SuiNS name, label when known), balance as amount and amountRaw, pctSupply, value { usd, priceAsOf }, and kind (wallet, pool, lending and so on). Balances include staked, LP and lending positions; wallet parts are read from chain. The first 100 holders are served from a cached list so any limit works there; later pages hold 100 each. For holders at a past time use coins.holdersAt.\n\nCredits: 5.","tags":["Coins and markets"],"x-credits":5,"x-tide-name":"coins.holders","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"type","in":"path","required":true,"description":"Move coin type, URL-encoded in the path, for example 0x2::sui::SUI or 0xdeeb7a46...::deep::DEEP.","schema":{"type":"string","description":"Move coin type, URL-encoded in the path, for example 0x2::sui::SUI or 0xdeeb7a46...::deep::DEEP."}},{"name":"limit","in":"query","required":false,"description":"Rows per page within the first 100 holders.","schema":{"type":"integer","minimum":1,"maximum":100,"default":50,"description":"Rows per page within the first 100 holders."}},{"name":"cursor","in":"query","required":false,"description":"Cursor from the previous response.","schema":{"type":"string","description":"Cursor from the previous response."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/coins/{type}/trades":{"get":{"operationId":"coins_trades","summary":"Recent DEX trades of a coin, newest first.","description":"Returns on-chain swaps: digest, timestamp, side (buy or sell), trader, amount of the coin, the price at that trade in USD, the trade's value in USD, and the venues used. Each USD value is priced at the trade's own time, which is its timestamp. Page back with cursor. Exchange trades are not mixed in. Link a digest to getTransaction for the full parsed transaction.\n\nCredits: 2.","tags":["Coins and markets"],"x-credits":2,"x-tide-name":"coins.trades","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"type","in":"path","required":true,"description":"Move coin type, URL-encoded in the path, for example 0x2::sui::SUI or 0xdeeb7a46...::deep::DEEP.","schema":{"type":"string","description":"Move coin type, URL-encoded in the path, for example 0x2::sui::SUI or 0xdeeb7a46...::deep::DEEP."}},{"name":"limit","in":"query","required":false,"description":"Trades per page.","schema":{"type":"integer","minimum":1,"maximum":50,"default":50,"description":"Trades per page."}},{"name":"cursor","in":"query","required":false,"description":"Cursor from the previous response (the time of the oldest trade seen).","schema":{"type":"string","description":"Cursor from the previous response (the time of the oldest trade seen)."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/coins/{type}/pools":{"get":{"operationId":"coins_pools","summary":"The busiest liquidity pools for a coin, with TVL and 24 hour volume.","description":"Returns the pools that traded this coin most over the last 7 days: pool object id, name, venue, fee tier in percent, TVL and 24 hour volume (each as { usd, priceAsOf }), and 24 hour trade and trader counts. Use the object id with getAsset or objects.get to inspect a pool.\n\nCredits: 2.","tags":["Coins and markets"],"x-credits":2,"x-tide-name":"coins.pools","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"type","in":"path","required":true,"description":"Move coin type, URL-encoded in the path, for example 0x2::sui::SUI or 0xdeeb7a46...::deep::DEEP.","schema":{"type":"string","description":"Move coin type, URL-encoded in the path, for example 0x2::sui::SUI or 0xdeeb7a46...::deep::DEEP."}},{"name":"limit","in":"query","required":false,"description":"Most pools to return.","schema":{"type":"integer","minimum":1,"maximum":20,"default":8,"description":"Most pools to return."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/coins/{type}/security":{"get":{"operationId":"coins_security","summary":"Launch safety for a coin: TreasuryCap and deny list status, honeypot flag, and a list of checks.","description":"Returns a level (ok, warn or danger), one plain word for it, the control facts (field authority: can more be minted through the TreasuryCap, can the deny list block addresses, can the metadata change, who holds each cap) and the list of checks, each with a key, a level and a sentence. Also honeypot and flagged. Use it before an agent buys or lists a new coin. The checks are read from chain and trade data; they are signals, not a guarantee.\n\nCredits: 2.","tags":["Coins and markets"],"x-credits":2,"x-tide-name":"coins.security","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"type","in":"path","required":true,"description":"Move coin type, URL-encoded in the path, for example 0x2::sui::SUI or 0xdeeb7a46...::deep::DEEP.","schema":{"type":"string","description":"Move coin type, URL-encoded in the path, for example 0x2::sui::SUI or 0xdeeb7a46...::deep::DEEP."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/markets":{"get":{"operationId":"markets_top","summary":"Ranked coin lists: trending, top, new, gainers, losers, bonding and graduated.","description":"Returns coins for one list over one window: trending, top (by volume), new, gainers, losers, bonding (still on a launch curve) or graduated. Each row has price { usd, priceAsOf }, change over 5 minutes, 1, 6 and 24 hours, market cap, 24 hour volume, liquidity, holders, creation time, a verified flag and a risk level with chips. window is 5m, 1h, 6h or 24h. Pass cursor to page.\n\nCredits: 2.","tags":["Coins and markets"],"x-credits":2,"x-tide-name":"markets.top","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"list","in":"query","required":false,"description":"Which list.","schema":{"type":"string","enum":["trending","top","new","gainers","losers","bonding","graduated"],"default":"trending","description":"Which list."}},{"name":"window","in":"query","required":false,"description":"Window for change and the ranking.","schema":{"type":"string","enum":["5m","1h","6h","24h"],"default":"24h","description":"Window for change and the ranking."}},{"name":"cursor","in":"query","required":false,"description":"Cursor from the previous response.","schema":{"type":"string","description":"Cursor from the previous response."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v0/transactions":{"post":{"operationId":"tx_parse","summary":"Parse up to 100 transaction digests into typed, described transactions.","description":"Send transaction digests and get back one TideTransaction each: type, source protocol, a plain-English description, SUI and coin transfers, balance changes, object changes, events, commands and an insight block (price impact, sandwich detection). The reply is a bare array in request order; digests tide does not have are left out. Amounts are raw integers with decimal-adjusted twins, SUI in MIST. Costs 1 credit per transaction returned.\n\nCredits: varies.","tags":["Transactions"],"x-credits":"varies","x-tide-name":"tx.parse","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","description":"Parsed transactions in request order.","items":{"type":"object","description":"One parsed transaction (TideTransaction). Common field names plus Sui-native fields.","properties":{"digest":{"type":"string","description":"Transaction digest (base58)."},"checkpoint":{"type":"integer","description":"Checkpoint that finalized the transaction. Also accepted as slot in filters."},"txIndex":{"type":"integer","description":"Position of the transaction inside its checkpoint."},"timestamp":{"type":"integer","description":"Unix seconds."},"epoch":{"type":"integer","description":"Sui epoch."},"type":{"type":"string","description":"One of TRANSFER, SWAP, ARBITRAGE, FLASH_LOAN, LIQUIDATION, DEPOSIT, WITHDRAW, BORROW, REPAY, STAKE, UNSTAKE, MINT, BURN, NFT_SALE, NFT_LISTING, NFT_TRANSFER, PUBLISH, UPGRADE, ORACLE_UPDATE, CONTRACT_CALL, SYSTEM, UNKNOWN. The type comes from tide's transaction classifier: a DEX trade is SWAP, a loop that ends in the coin it started with is ARBITRAGE, an NFT purchase is NFT_SALE.","enum":["TRANSFER","SWAP","ARBITRAGE","FLASH_LOAN","LIQUIDATION","DEPOSIT","WITHDRAW","BORROW","REPAY","STAKE","UNSTAKE","MINT","BURN","NFT_SALE","NFT_LISTING","NFT_TRANSFER","PUBLISH","UPGRADE","ORACLE_UPDATE","CONTRACT_CALL","SYSTEM","UNKNOWN"]},"source":{"type":"string","description":"Protocol slug in upper case, for example CETUS, DEEPBOOK, AFTERMATH. UNKNOWN when no protocol is labelled."},"description":{"type":"string","description":"One plain sentence describing what happened."},"status":{"type":"string","description":"success or failure.","enum":["success","failure"]},"error":{"type":["string","null"],"description":"Why the transaction failed, null on success."},"sender":{"type":"string","description":"Address that signed."},"feePayer":{"type":"string","description":"Address that paid gas. Differs from sender when sponsored."},"fee":{"type":"integer","description":"Net gas in MIST (1 SUI = 1,000,000,000 MIST): computation plus storage minus rebate."},"gas":{"type":"object","description":"Gas split in MIST.","properties":{"computation":{"type":"integer","description":"Computation cost."},"storage":{"type":"integer","description":"Storage cost."},"rebate":{"type":"integer","description":"Storage rebate."},"budget":{"type":"integer","description":"Gas budget."},"price":{"type":"integer","description":"Gas price in MIST per unit."}}},"nativeTransfers":{"type":"array","description":"SUI moved between addresses, in MIST. Gas is not included. A side is null when the counterparty is not an address (a pool, a mint or a burn).","items":{"type":"object","description":"","properties":{"fromUserAccount":{"type":["string","null"]},"toUserAccount":{"type":["string","null"]},"amount":{"type":"integer","description":"MIST."}}}},"tokenTransfers":{"type":"array","description":"Coin movements other than SUI, paired from balance changes. amount is decimal-adjusted, amountRaw is the integer string.","items":{"type":"object","description":"","properties":{"fromUserAccount":{"type":["string","null"]},"toUserAccount":{"type":["string","null"]},"coinType":{"type":"string","description":"Move coin type."},"amount":{"type":"number"},"amountRaw":{"type":"string","description":"Raw integer."},"decimals":{"type":"integer","description":"Coin decimals."},"symbol":{"type":"string","description":"Coin symbol."}}}},"balanceChanges":{"type":"array","description":"Every balance change in the transaction, gas included. The source of the two transfer lists.","items":{"type":"object","description":"","properties":{"owner":{"type":"string","description":"Address."},"coinType":{"type":"string","description":"Move coin type."},"amountRaw":{"type":"string","description":"Signed raw integer."},"amount":{"type":"number"},"usd":{"type":["number","null"]},"priceAsOf":{"type":["string","null"],"description":"Time the USD price is for."}}}},"objectChanges":{"type":"array","description":"Objects created, mutated, deleted, wrapped, unwrapped, published or transferred.","items":{"type":"object","description":"","properties":{"objectId":{"type":"string","description":"Object id."},"type":{"type":"string","description":"Move type."},"kind":{"type":"string","description":"created, mutated, deleted, wrapped, unwrapped, published or transferred."},"owner":{"type":["object","null"],"description":"Owner after the transaction: kind address, object, shared or immutable."},"version":{"type":"integer","description":"Version written."},"previousVersion":{"type":["integer","null"]}}}},"events":{"type":"array","description":"Decoded Move events in emit order.","items":{"type":"object","description":"","properties":{"index":{"type":"integer","description":"Event index."},"type":{"type":"string","description":"Move event type."},"package":{"type":"string","description":"Package id."},"module":{"type":"string","description":"Module."},"sender":{"type":"string","description":"Address."},"json":{"description":"Decoded event body."}}}},"commands":{"type":"array","description":"The programmable transaction block commands.","items":{"type":"object","description":"","properties":{"index":{"type":"integer","description":"Command index."},"kind":{"type":"string","description":"MoveCall, TransferObjects, SplitCoins, MergeCoins, Publish, Upgrade or MakeMoveVec."},"target":{"type":["string","null"],"description":"package::module::function for MoveCall."},"typeArguments":{"type":"array","description":"Type arguments.","items":{"type":"string"}},"summary":{"type":["string","null"]}}}},"explain":{"type":"object","description":"Plain-English breakdown. Dropped by view=compact.","properties":{"summary":{"type":"string","description":"Same as description."},"steps":{"type":"array","description":"One sentence per meaningful step.","items":{"type":"object","description":"","properties":{"sentence":{"type":"string","description":"Step."},"commands":{"type":"array","description":"Command indexes.","items":{"type":"integer"}}}}},"result":{"type":"array","description":"Net result per address.","items":{"type":"object"}}}},"insight":{"type":["object","null"],"description":"priceImpact (pool price move per swap), sandwich (role victim or attacker, with the loss and profit in USD) and pnl (the sender's position context). Null when it could not be computed in time."},"partial":{"type":"boolean","description":"True for early history where commands, object changes and the gas split are not indexed yet. Balance changes and events are complete."}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"transactions":{"type":"array","description":"Transaction digests, 1 to 100.","items":{"type":"string","description":"Base58 transaction digest."}}},"required":["transactions"]}}}},"parameters":[{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v0/addresses/{address}/transactions":{"get":{"operationId":"tx_history","summary":"Parsed transaction history of an address, filterable by type, source, time and checkpoint.","description":"Returns parsed transactions that involve an address (sender, sponsor, balance change, object owner, package call or event sender), newest first by default, as a bare array. The address may be a 0x address or a SuiNS name. Page with before=<last digest>, or with until for the other direction. Type and source filters classify transactions while paging: one call reads at most 10 index pages. If it finds fewer than limit matches it returns what it found with a continuation (a digest in the x-tide-next header for the REST path, paginationToken for the others) and capped true in the RPC result. Time filters are exact at checkpoint granularity. History older than the loaded index returns not_indexed with the lowest checkpoint available. 10 credits per page.\n\nCredits: 10.","tags":["History"],"x-credits":10,"x-tide-name":"tx.history","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","description":"Parsed transactions.","items":{"type":"object","description":"One parsed transaction (TideTransaction). Common field names plus Sui-native fields.","properties":{"digest":{"type":"string","description":"Transaction digest (base58)."},"checkpoint":{"type":"integer","description":"Checkpoint that finalized the transaction. Also accepted as slot in filters."},"txIndex":{"type":"integer","description":"Position of the transaction inside its checkpoint."},"timestamp":{"type":"integer","description":"Unix seconds."},"epoch":{"type":"integer","description":"Sui epoch."},"type":{"type":"string","description":"One of TRANSFER, SWAP, ARBITRAGE, FLASH_LOAN, LIQUIDATION, DEPOSIT, WITHDRAW, BORROW, REPAY, STAKE, UNSTAKE, MINT, BURN, NFT_SALE, NFT_LISTING, NFT_TRANSFER, PUBLISH, UPGRADE, ORACLE_UPDATE, CONTRACT_CALL, SYSTEM, UNKNOWN. The type comes from tide's transaction classifier: a DEX trade is SWAP, a loop that ends in the coin it started with is ARBITRAGE, an NFT purchase is NFT_SALE.","enum":["TRANSFER","SWAP","ARBITRAGE","FLASH_LOAN","LIQUIDATION","DEPOSIT","WITHDRAW","BORROW","REPAY","STAKE","UNSTAKE","MINT","BURN","NFT_SALE","NFT_LISTING","NFT_TRANSFER","PUBLISH","UPGRADE","ORACLE_UPDATE","CONTRACT_CALL","SYSTEM","UNKNOWN"]},"source":{"type":"string","description":"Protocol slug in upper case, for example CETUS, DEEPBOOK, AFTERMATH. UNKNOWN when no protocol is labelled."},"description":{"type":"string","description":"One plain sentence describing what happened."},"status":{"type":"string","description":"success or failure.","enum":["success","failure"]},"error":{"type":["string","null"],"description":"Why the transaction failed, null on success."},"sender":{"type":"string","description":"Address that signed."},"feePayer":{"type":"string","description":"Address that paid gas. Differs from sender when sponsored."},"fee":{"type":"integer","description":"Net gas in MIST (1 SUI = 1,000,000,000 MIST): computation plus storage minus rebate."},"gas":{"type":"object","description":"Gas split in MIST.","properties":{"computation":{"type":"integer","description":"Computation cost."},"storage":{"type":"integer","description":"Storage cost."},"rebate":{"type":"integer","description":"Storage rebate."},"budget":{"type":"integer","description":"Gas budget."},"price":{"type":"integer","description":"Gas price in MIST per unit."}}},"nativeTransfers":{"type":"array","description":"SUI moved between addresses, in MIST. Gas is not included. A side is null when the counterparty is not an address (a pool, a mint or a burn).","items":{"type":"object","description":"","properties":{"fromUserAccount":{"type":["string","null"]},"toUserAccount":{"type":["string","null"]},"amount":{"type":"integer","description":"MIST."}}}},"tokenTransfers":{"type":"array","description":"Coin movements other than SUI, paired from balance changes. amount is decimal-adjusted, amountRaw is the integer string.","items":{"type":"object","description":"","properties":{"fromUserAccount":{"type":["string","null"]},"toUserAccount":{"type":["string","null"]},"coinType":{"type":"string","description":"Move coin type."},"amount":{"type":"number"},"amountRaw":{"type":"string","description":"Raw integer."},"decimals":{"type":"integer","description":"Coin decimals."},"symbol":{"type":"string","description":"Coin symbol."}}}},"balanceChanges":{"type":"array","description":"Every balance change in the transaction, gas included. The source of the two transfer lists.","items":{"type":"object","description":"","properties":{"owner":{"type":"string","description":"Address."},"coinType":{"type":"string","description":"Move coin type."},"amountRaw":{"type":"string","description":"Signed raw integer."},"amount":{"type":"number"},"usd":{"type":["number","null"]},"priceAsOf":{"type":["string","null"],"description":"Time the USD price is for."}}}},"objectChanges":{"type":"array","description":"Objects created, mutated, deleted, wrapped, unwrapped, published or transferred.","items":{"type":"object","description":"","properties":{"objectId":{"type":"string","description":"Object id."},"type":{"type":"string","description":"Move type."},"kind":{"type":"string","description":"created, mutated, deleted, wrapped, unwrapped, published or transferred."},"owner":{"type":["object","null"],"description":"Owner after the transaction: kind address, object, shared or immutable."},"version":{"type":"integer","description":"Version written."},"previousVersion":{"type":["integer","null"]}}}},"events":{"type":"array","description":"Decoded Move events in emit order.","items":{"type":"object","description":"","properties":{"index":{"type":"integer","description":"Event index."},"type":{"type":"string","description":"Move event type."},"package":{"type":"string","description":"Package id."},"module":{"type":"string","description":"Module."},"sender":{"type":"string","description":"Address."},"json":{"description":"Decoded event body."}}}},"commands":{"type":"array","description":"The programmable transaction block commands.","items":{"type":"object","description":"","properties":{"index":{"type":"integer","description":"Command index."},"kind":{"type":"string","description":"MoveCall, TransferObjects, SplitCoins, MergeCoins, Publish, Upgrade or MakeMoveVec."},"target":{"type":["string","null"],"description":"package::module::function for MoveCall."},"typeArguments":{"type":"array","description":"Type arguments.","items":{"type":"string"}},"summary":{"type":["string","null"]}}}},"explain":{"type":"object","description":"Plain-English breakdown. Dropped by view=compact.","properties":{"summary":{"type":"string","description":"Same as description."},"steps":{"type":"array","description":"One sentence per meaningful step.","items":{"type":"object","description":"","properties":{"sentence":{"type":"string","description":"Step."},"commands":{"type":"array","description":"Command indexes.","items":{"type":"integer"}}}}},"result":{"type":"array","description":"Net result per address.","items":{"type":"object"}}}},"insight":{"type":["object","null"],"description":"priceImpact (pool price move per swap), sandwich (role victim or attacker, with the loss and profit in USD) and pnl (the sender's position context). Null when it could not be computed in time."},"partial":{"type":"boolean","description":"True for early history where commands, object changes and the gas split are not indexed yet. Balance changes and events are complete."}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"address","in":"path","required":true,"description":"0x address or .sui name.","schema":{"type":"string","description":"0x address or .sui name."}},{"name":"type","in":"query","required":false,"description":"One of TRANSFER, SWAP, ARBITRAGE, FLASH_LOAN, LIQUIDATION, DEPOSIT, WITHDRAW, BORROW, REPAY, STAKE, UNSTAKE, MINT, BURN, NFT_SALE, NFT_LISTING, NFT_TRANSFER, PUBLISH, UPGRADE, ORACLE_UPDATE, CONTRACT_CALL, SYSTEM, UNKNOWN. The type comes from tide's transaction classifier: a DEX trade is SWAP, a loop that ends in the coin it started with is ARBITRAGE, an NFT purchase is NFT_SALE.","schema":{"type":"string","description":"One of TRANSFER, SWAP, ARBITRAGE, FLASH_LOAN, LIQUIDATION, DEPOSIT, WITHDRAW, BORROW, REPAY, STAKE, UNSTAKE, MINT, BURN, NFT_SALE, NFT_LISTING, NFT_TRANSFER, PUBLISH, UPGRADE, ORACLE_UPDATE, CONTRACT_CALL, SYSTEM, UNKNOWN. The type comes from tide's transaction classifier: a DEX trade is SWAP, a loop that ends in the coin it started with is ARBITRAGE, an NFT purchase is NFT_SALE.","enum":["TRANSFER","SWAP","ARBITRAGE","FLASH_LOAN","LIQUIDATION","DEPOSIT","WITHDRAW","BORROW","REPAY","STAKE","UNSTAKE","MINT","BURN","NFT_SALE","NFT_LISTING","NFT_TRANSFER","PUBLISH","UPGRADE","ORACLE_UPDATE","CONTRACT_CALL","SYSTEM","UNKNOWN"]}},{"name":"source","in":"query","required":false,"description":"Protocol slug, for example CETUS.","schema":{"type":"string","description":"Protocol slug, for example CETUS."}},{"name":"before","in":"query","required":false,"description":"Digest. Only transactions older than this one.","schema":{"type":"string","description":"Digest. Only transactions older than this one."}},{"name":"until","in":"query","required":false,"description":"Digest. Only transactions newer than this one (stop here). Alias: after.","schema":{"type":"string","description":"Digest. Only transactions newer than this one (stop here). Alias: after."}},{"name":"limit","in":"query","required":false,"description":"Transactions per page, 1 to 100. Default 10.","schema":{"type":"integer","description":"Transactions per page, 1 to 100. Default 10.","minimum":1,"maximum":100}},{"name":"gte-time","in":"query","required":false,"description":"Unix seconds, at or after.","schema":{"type":"integer","description":"Unix seconds, at or after."}},{"name":"gt-time","in":"query","required":false,"description":"Unix seconds, after.","schema":{"type":"integer","description":"Unix seconds, after."}},{"name":"lte-time","in":"query","required":false,"description":"Unix seconds, at or before.","schema":{"type":"integer","description":"Unix seconds, at or before."}},{"name":"lt-time","in":"query","required":false,"description":"Unix seconds, before.","schema":{"type":"integer","description":"Unix seconds, before."}},{"name":"gte-checkpoint","in":"query","required":false,"description":"Checkpoint, at or after. Alias gte-slot.","schema":{"type":"integer","description":"Checkpoint, at or after. Alias gte-slot."}},{"name":"gt-checkpoint","in":"query","required":false,"description":"Checkpoint, after.","schema":{"type":"integer","description":"Checkpoint, after."}},{"name":"lte-checkpoint","in":"query","required":false,"description":"Checkpoint, at or before.","schema":{"type":"integer","description":"Checkpoint, at or before."}},{"name":"lt-checkpoint","in":"query","required":false,"description":"Checkpoint, before.","schema":{"type":"integer","description":"Checkpoint, before."}},{"name":"sort","in":"query","required":false,"description":"Order.","schema":{"type":"string","description":"Order.","enum":["asc","desc"]}},{"name":"status","in":"query","required":false,"description":"Filter by outcome. Default any.","schema":{"type":"string","description":"Filter by outcome. Default any.","enum":["succeeded","failed","any"]}},{"name":"coinType","in":"query","required":false,"description":"Only transactions that changed this coin's balance for the address.","schema":{"type":"string","description":"Only transactions that changed this coin's balance for the address."}},{"name":"direction","in":"query","required":false,"description":"With coinType or alone: only inflows or outflows for the address, gas excluded.","schema":{"type":"string","description":"With coinType or alone: only inflows or outflows for the address, gas excluded.","enum":["in","out"]}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/#getTransactionsForAddress":{"post":{"operationId":"getTransactionsForAddress","summary":"Full history of an address with sort order, filters and a pagination token.","description":"Returns an address's transactions as digest rows (default, up to 1,000 per call) or full parsed transactions (up to 100). Sort oldest first or newest first, filter by checkpoint (alias slot), checkpoint time, status, type, source, coin type, direction and role, and continue with paginationToken (\"checkpoint:txIndex\"). Pass params as [address, config] or as one object. Result: { data, paginationToken, asOf }. Digest rows are { digest, checkpoint, txIndex, timestamp, status } plus type and source when a type or source filter is set. Type and source filters classify transactions while paging: one call reads at most 10 index pages. If it finds fewer than limit matches it returns what it found with a continuation (a digest in the x-tide-next header for the REST path, paginationToken for the others) and capped true in the RPC result. Time filters are exact at checkpoint granularity. History below the loaded index returns not_indexed with the lowest checkpoint. 10 credits per 100 full transactions, 10 per page of digest rows.\n\nCredits: varies.","tags":["History"],"x-credits":"varies","x-tide-name":"getTransactionsForAddress","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","description":"A page.","properties":{"data":{"type":"array","description":"Digest rows or TideTransaction objects.","items":{"type":"object"}},"paginationToken":{"type":["string","null"]},"capped":{"type":"boolean","description":"True when the call stopped at its 10 index page budget before filling the page."},"asOf":{"type":"object","description":"Index position the answer is true at.","properties":{"checkpoint":{"type":["integer","null"]},"timestamp":{"type":["string","null"]},"lagMs":{"type":["integer","null"]}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"x-jsonrpc-method":"getTransactionsForAddress","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["jsonrpc","id","method"],"properties":{"jsonrpc":{"type":"string","enum":["2.0"]},"id":{"oneOf":[{"type":"string"},{"type":"integer"}]},"method":{"type":"string","enum":["getTransactionsForAddress"]},"params":{"type":"object","description":"Address plus the config, as [address, config] or one object.","properties":{"address":{"type":"string","description":"0x address or .sui name."},"transactionDetails":{"type":"string","description":"signatures (digest rows, default) or full.","enum":["signatures","full"]},"sortOrder":{"type":"string","description":"asc is oldest first, desc newest first (default).","enum":["asc","desc"]},"limit":{"type":"integer","description":"Up to 1000 for digest rows (signatures), 100 for full. Default 100.","minimum":1,"maximum":1000},"paginationToken":{"type":"string","description":"Token \"checkpoint:txIndex\" from the previous page."},"filters":{"type":"object","description":"Filters.","properties":{"checkpoint":{"type":"object","description":"Range on checkpoint (number, gte gt lte lt eq). Combine bounds freely.","properties":{"gte":{"type":"integer","description":"checkpoint at or after this"},"gt":{"type":"integer","description":"checkpoint after this"},"lte":{"type":"integer","description":"checkpoint at or before this"},"lt":{"type":"integer","description":"checkpoint before this"}}},"slot":{"type":"object","description":"Range on checkpoint (alias of checkpoint) (number). Combine bounds freely.","properties":{"gte":{"type":"integer","description":"checkpoint (alias of checkpoint) at or after this"},"gt":{"type":"integer","description":"checkpoint (alias of checkpoint) after this"},"lte":{"type":"integer","description":"checkpoint (alias of checkpoint) at or before this"},"lt":{"type":"integer","description":"checkpoint (alias of checkpoint) before this"}}},"blockTime":{"type":"object","description":"Range on checkpoint time (unix seconds). Combine bounds freely.","properties":{"gte":{"type":"integer","description":"checkpoint time at or after this"},"gt":{"type":"integer","description":"checkpoint time after this"},"lte":{"type":"integer","description":"checkpoint time at or before this"},"lt":{"type":"integer","description":"checkpoint time before this"},"eq":{"type":"integer","description":"checkpoint time equal to this"}}},"status":{"type":"string","description":"succeeded, failed or any (default).","enum":["succeeded","failed","any"]},"type":{"type":"string","description":"One of TRANSFER, SWAP, ARBITRAGE, FLASH_LOAN, LIQUIDATION, DEPOSIT, WITHDRAW, BORROW, REPAY, STAKE, UNSTAKE, MINT, BURN, NFT_SALE, NFT_LISTING, NFT_TRANSFER, PUBLISH, UPGRADE, ORACLE_UPDATE, CONTRACT_CALL, SYSTEM, UNKNOWN. The type comes from tide's transaction classifier: a DEX trade is SWAP, a loop that ends in the coin it started with is ARBITRAGE, an NFT purchase is NFT_SALE.","enum":["TRANSFER","SWAP","ARBITRAGE","FLASH_LOAN","LIQUIDATION","DEPOSIT","WITHDRAW","BORROW","REPAY","STAKE","UNSTAKE","MINT","BURN","NFT_SALE","NFT_LISTING","NFT_TRANSFER","PUBLISH","UPGRADE","ORACLE_UPDATE","CONTRACT_CALL","SYSTEM","UNKNOWN"]},"source":{"type":"string","description":"Protocol slug, for example CETUS."},"coinType":{"type":"string","description":"Only transactions that changed this coin's balance for the address. Alias mint."},"direction":{"type":"string","description":"in or out, for the address, gas excluded.","enum":["in","out"]},"role":{"type":"string","description":"sender, sponsor, balance, owner, call or event. Comma separated for several."}}}},"required":["address"]}}},"example":{"jsonrpc":"2.0","id":1,"method":"getTransactionsForAddress","params":{"address":"0xffd4f043057226453aeba59732d41c6093516f54823ebc3a16d17f8a77d2f0ad","transactionDetails":"signatures","limit":5,"filters":{"status":"succeeded"}}}}}}}},"/#getTransaction":{"post":{"operationId":"getTransaction","summary":"One parsed transaction by digest.","description":"Returns one TideTransaction (type, source, description, transfers, balance changes, object changes, events, commands, explain, insight) with an asOf field, or null when the digest is unknown. Pass [digest] or { digest }. 1 credit. For the unparsed node shape use getTransactionBlock.\n\nCredits: 1.","tags":["Transactions"],"x-credits":1,"x-tide-name":"getTransaction","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","description":"One parsed transaction (TideTransaction). Common field names plus Sui-native fields.","properties":{"digest":{"type":"string","description":"Transaction digest (base58)."},"checkpoint":{"type":"integer","description":"Checkpoint that finalized the transaction. Also accepted as slot in filters."},"txIndex":{"type":"integer","description":"Position of the transaction inside its checkpoint."},"timestamp":{"type":"integer","description":"Unix seconds."},"epoch":{"type":"integer","description":"Sui epoch."},"type":{"type":"string","description":"One of TRANSFER, SWAP, ARBITRAGE, FLASH_LOAN, LIQUIDATION, DEPOSIT, WITHDRAW, BORROW, REPAY, STAKE, UNSTAKE, MINT, BURN, NFT_SALE, NFT_LISTING, NFT_TRANSFER, PUBLISH, UPGRADE, ORACLE_UPDATE, CONTRACT_CALL, SYSTEM, UNKNOWN. The type comes from tide's transaction classifier: a DEX trade is SWAP, a loop that ends in the coin it started with is ARBITRAGE, an NFT purchase is NFT_SALE.","enum":["TRANSFER","SWAP","ARBITRAGE","FLASH_LOAN","LIQUIDATION","DEPOSIT","WITHDRAW","BORROW","REPAY","STAKE","UNSTAKE","MINT","BURN","NFT_SALE","NFT_LISTING","NFT_TRANSFER","PUBLISH","UPGRADE","ORACLE_UPDATE","CONTRACT_CALL","SYSTEM","UNKNOWN"]},"source":{"type":"string","description":"Protocol slug in upper case, for example CETUS, DEEPBOOK, AFTERMATH. UNKNOWN when no protocol is labelled."},"description":{"type":"string","description":"One plain sentence describing what happened."},"status":{"type":"string","description":"success or failure.","enum":["success","failure"]},"error":{"type":["string","null"],"description":"Why the transaction failed, null on success."},"sender":{"type":"string","description":"Address that signed."},"feePayer":{"type":"string","description":"Address that paid gas. Differs from sender when sponsored."},"fee":{"type":"integer","description":"Net gas in MIST (1 SUI = 1,000,000,000 MIST): computation plus storage minus rebate."},"gas":{"type":"object","description":"Gas split in MIST.","properties":{"computation":{"type":"integer","description":"Computation cost."},"storage":{"type":"integer","description":"Storage cost."},"rebate":{"type":"integer","description":"Storage rebate."},"budget":{"type":"integer","description":"Gas budget."},"price":{"type":"integer","description":"Gas price in MIST per unit."}}},"nativeTransfers":{"type":"array","description":"SUI moved between addresses, in MIST. Gas is not included. A side is null when the counterparty is not an address (a pool, a mint or a burn).","items":{"type":"object","description":"","properties":{"fromUserAccount":{"type":["string","null"]},"toUserAccount":{"type":["string","null"]},"amount":{"type":"integer","description":"MIST."}}}},"tokenTransfers":{"type":"array","description":"Coin movements other than SUI, paired from balance changes. amount is decimal-adjusted, amountRaw is the integer string.","items":{"type":"object","description":"","properties":{"fromUserAccount":{"type":["string","null"]},"toUserAccount":{"type":["string","null"]},"coinType":{"type":"string","description":"Move coin type."},"amount":{"type":"number"},"amountRaw":{"type":"string","description":"Raw integer."},"decimals":{"type":"integer","description":"Coin decimals."},"symbol":{"type":"string","description":"Coin symbol."}}}},"balanceChanges":{"type":"array","description":"Every balance change in the transaction, gas included. The source of the two transfer lists.","items":{"type":"object","description":"","properties":{"owner":{"type":"string","description":"Address."},"coinType":{"type":"string","description":"Move coin type."},"amountRaw":{"type":"string","description":"Signed raw integer."},"amount":{"type":"number"},"usd":{"type":["number","null"]},"priceAsOf":{"type":["string","null"],"description":"Time the USD price is for."}}}},"objectChanges":{"type":"array","description":"Objects created, mutated, deleted, wrapped, unwrapped, published or transferred.","items":{"type":"object","description":"","properties":{"objectId":{"type":"string","description":"Object id."},"type":{"type":"string","description":"Move type."},"kind":{"type":"string","description":"created, mutated, deleted, wrapped, unwrapped, published or transferred."},"owner":{"type":["object","null"],"description":"Owner after the transaction: kind address, object, shared or immutable."},"version":{"type":"integer","description":"Version written."},"previousVersion":{"type":["integer","null"]}}}},"events":{"type":"array","description":"Decoded Move events in emit order.","items":{"type":"object","description":"","properties":{"index":{"type":"integer","description":"Event index."},"type":{"type":"string","description":"Move event type."},"package":{"type":"string","description":"Package id."},"module":{"type":"string","description":"Module."},"sender":{"type":"string","description":"Address."},"json":{"description":"Decoded event body."}}}},"commands":{"type":"array","description":"The programmable transaction block commands.","items":{"type":"object","description":"","properties":{"index":{"type":"integer","description":"Command index."},"kind":{"type":"string","description":"MoveCall, TransferObjects, SplitCoins, MergeCoins, Publish, Upgrade or MakeMoveVec."},"target":{"type":["string","null"],"description":"package::module::function for MoveCall."},"typeArguments":{"type":"array","description":"Type arguments.","items":{"type":"string"}},"summary":{"type":["string","null"]}}}},"explain":{"type":"object","description":"Plain-English breakdown. Dropped by view=compact.","properties":{"summary":{"type":"string","description":"Same as description."},"steps":{"type":"array","description":"One sentence per meaningful step.","items":{"type":"object","description":"","properties":{"sentence":{"type":"string","description":"Step."},"commands":{"type":"array","description":"Command indexes.","items":{"type":"integer"}}}}},"result":{"type":"array","description":"Net result per address.","items":{"type":"object"}}}},"insight":{"type":["object","null"],"description":"priceImpact (pool price move per swap), sandwich (role victim or attacker, with the loss and profit in USD) and pnl (the sender's position context). Null when it could not be computed in time."},"partial":{"type":"boolean","description":"True for early history where commands, object changes and the gas split are not indexed yet. Balance changes and events are complete."}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"x-jsonrpc-method":"getTransaction","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["jsonrpc","id","method"],"properties":{"jsonrpc":{"type":"string","enum":["2.0"]},"id":{"oneOf":[{"type":"string"},{"type":"integer"}]},"method":{"type":"string","enum":["getTransaction"]},"params":{"type":"object","description":"Digest.","properties":{"digest":{"type":"string","description":"Base58 transaction digest."}},"required":["digest"]}}},"example":{"jsonrpc":"2.0","id":1,"method":"getTransaction","params":{"digest":"3nrSJ85TEooEfeXjbbDEVdsbebfYdFMXzHE3gBSHTkcT"}}}}}}},"/#getTransactionBlock":{"post":{"operationId":"getTransactionBlock","summary":"The raw transaction as the Sui node reports it.","description":"Returns the executed transaction in the node's own shape: transaction data with inputs and commands, effects with changed objects and gas, events, balance changes and signatures. Use it when you need the exact on-chain record. Early history can lack some detail; the partial field says so. Pass [digest] or { digest }. 1 credit. Use getTransaction for the parsed view.\n\nCredits: 1.","tags":["Transactions"],"x-credits":1,"x-tide-name":"getTransactionBlock","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","description":"Raw executed transaction plus partial and asOf.","properties":{"digest":{"type":"string","description":"Digest."},"checkpoint":{"type":"string","description":"Checkpoint."},"partial":{"type":"boolean"},"asOf":{"type":"object","description":"Index position the answer is true at.","properties":{"checkpoint":{"type":["integer","null"]},"timestamp":{"type":["string","null"]},"lagMs":{"type":["integer","null"]}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"x-jsonrpc-method":"getTransactionBlock","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["jsonrpc","id","method"],"properties":{"jsonrpc":{"type":"string","enum":["2.0"]},"id":{"oneOf":[{"type":"string"},{"type":"integer"}]},"method":{"type":"string","enum":["getTransactionBlock"]},"params":{"type":"object","description":"Digest.","properties":{"digest":{"type":"string","description":"Base58 transaction digest."}},"required":["digest"]}}},"example":{"jsonrpc":"2.0","id":1,"method":"getTransactionBlock","params":{"digest":"3nrSJ85TEooEfeXjbbDEVdsbebfYdFMXzHE3gBSHTkcT"}}}}}}},"/v1/wallet/{wallet}/balances":{"get":{"operationId":"wallet_balances","summary":"Every coin a wallet holds now, with USD value, sorted by value.","description":"Returns the wallet's live coin balances. Each balance has coinType (also given as mint), symbol, decimals, balance in whole coins, balanceRaw in the smallest unit, pricePerToken, usdValue and priceAsOf. Priced coins come first, sorted by usdValue, then unpriced coins by balance. A page holds up to 100 coins: use page, or cursor from the response. totalUsdValue adds up every priced coin the wallet holds, not only this page. Each balance has priceStatus: priced, unpriced (no market that counts) or pending (its price was still being read when the request's time ran out). When any coin is pending, totalUsdValue is null and pricing is \"partial\": read again shortly for the full total; a total is never given without them. Partial answers are not cached. showNfts adds a short NFT list. The wallet can be an address, name.sui or @name.\n\nCredits: 10.","tags":["Wallet"],"x-credits":10,"x-tide-name":"wallet.balances","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"wallet":{"type":"string"},"balances":{"type":"array","description":"Coins: coinType, mint, symbol, name, decimals, balance, balanceRaw, pricePerToken, usdValue, priceAsOf, priceStatus (priced, unpriced or pending), verified, logoUri."},"nfts":{"type":"array","description":"Only with showNfts."},"totalUsdValue":{"type":["number","null"],"description":"USD value of every priced coin the wallet holds. Null while pricing is partial."},"pricing":{"type":"string","enum":["complete","partial"],"description":"partial: some coins are still being priced (priceStatus pending), totalUsdValue is null; read again shortly."},"pagination":{"type":"object","description":"{ page, limit, hasMore }."},"cursor":{"type":["string","null"]},"asOf":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"wallet","in":"path","required":true,"description":"Wallet address (0x...), name.sui or @name.","schema":{"type":"string","description":"Wallet address (0x...), name.sui or @name."}},{"name":"page","in":"query","required":false,"description":"Page number, starting at 1. Default 1.","schema":{"type":"integer","minimum":1,"description":"Page number, starting at 1. Default 1."}},{"name":"limit","in":"query","required":false,"description":"Coins per page, up to 100. Default 100.","schema":{"type":"integer","minimum":1,"maximum":100,"description":"Coins per page, up to 100. Default 100."}},{"name":"cursor","in":"query","required":false,"description":"Cursor from the previous response (same as page).","schema":{"type":"string","description":"Cursor from the previous response (same as page)."}},{"name":"showZeroBalance","in":"query","required":false,"description":"Include coins held with a zero balance. Default false.","schema":{"type":"boolean","description":"Include coins held with a zero balance. Default false."}},{"name":"showNative","in":"query","required":false,"description":"Include SUI. Default true.","schema":{"type":"boolean","description":"Include SUI. Default true."}},{"name":"showNfts","in":"query","required":false,"description":"Add an nfts list (first 50 items). Default false.","schema":{"type":"boolean","description":"Add an nfts list (first 50 items). Default false."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/wallet/{wallet}/nfts":{"get":{"operationId":"wallet_nfts","summary":"NFTs and kiosk items a wallet holds now.","description":"Returns the NFTs the wallet owns, including items held in its kiosks, as assets in the same layout as getAssetsByOwner (interface, content, grouping, ownership). Use limit and page to walk the list, or cursor from the response. The wallet can be an address, name.sui or @name. Coins are not included: use /balances for those.\n\nCredits: 10.","tags":["Wallet"],"x-credits":10,"x-tide-name":"wallet.nfts","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"wallet","in":"path","required":true,"description":"Wallet address (0x...), name.sui or @name.","schema":{"type":"string","description":"Wallet address (0x...), name.sui or @name."}},{"name":"page","in":"query","required":false,"description":"Page number, starting at 1.","schema":{"type":"integer","minimum":1,"description":"Page number, starting at 1."}},{"name":"limit","in":"query","required":false,"description":"Items per page, default 50.","schema":{"type":"integer","minimum":1,"maximum":100,"description":"Items per page, default 50."}},{"name":"cursor","in":"query","required":false,"description":"Cursor from the previous response.","schema":{"type":"string","description":"Cursor from the previous response."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/wallet/{wallet}/balance-at":{"get":{"operationId":"wallet_balanceAt","summary":"A wallet's balance of one coin at a past time or checkpoint.","description":"Returns the exact balance of one coin at the end of a given checkpoint, found by adding up every balance change of the wallet and coin up to that point. Pass the coin as coinType (alias mint) and exactly one of time (unix seconds), datetime or checkpoint (alias slot). balance is in whole coins and balanceRaw in the smallest unit. asOf names the last transaction that changed the balance at or before the point, or is null when the balance was zero. History covers all of Sui since genesis. The wallet can be an address, name.sui or @name.\n\nCredits: 10.","tags":["Wallet"],"x-credits":10,"x-tide-name":"wallet.balanceAt","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"wallet":{"type":"string","description":"Resolved wallet address."},"coinType":{"type":"string"},"mint":{"type":"string","description":"Same as coinType."},"symbol":{"type":"string"},"decimals":{"type":"integer"},"balance":{"type":"number","description":"Balance in whole coins."},"balanceRaw":{"type":"string","description":"Balance in the smallest unit."},"at":{"type":"object","description":"The point asked about, as a checkpoint and its time."},"asOf":{"type":["object","null"],"description":"The last transaction that changed the balance at or before the point: { checkpoint, digest, timestamp }. Null when the balance was zero."}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"wallet","in":"path","required":true,"description":"Wallet address (0x...), name.sui or @name.","schema":{"type":"string","description":"Wallet address (0x...), name.sui or @name."}},{"name":"coinType","in":"query","required":false,"description":"Coin type such as 0x2::sui::SUI. Alias: mint.","schema":{"type":"string","description":"Coin type such as 0x2::sui::SUI. Alias: mint."}},{"name":"mint","in":"query","required":false,"description":"Alias of coinType.","schema":{"type":"string","description":"Alias of coinType."}},{"name":"time","in":"query","required":false,"description":"Point in time as unix seconds. Give exactly one of time, datetime or checkpoint.","schema":{"type":"integer","description":"Point in time as unix seconds. Give exactly one of time, datetime or checkpoint."}},{"name":"datetime","in":"query","required":false,"description":"Point in time as an ISO 8601 date, UTC when no zone is given, for example 2025-01-10 19:20:00.","schema":{"type":"string","description":"Point in time as an ISO 8601 date, UTC when no zone is given, for example 2025-01-10 19:20:00."}},{"name":"checkpoint","in":"query","required":false,"description":"Checkpoint sequence number. Alias: slot.","schema":{"type":"integer","description":"Checkpoint sequence number. Alias: slot."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/wallet/{wallet}/holdings-at":{"get":{"operationId":"wallet_holdingsAt","summary":"Every coin a wallet held at a past time, with USD at that time.","description":"Returns all coin balances of a wallet at the end of a checkpoint, plus the total portfolio value on that date. A coin is priced at that time only if it traded in a pool with at least $1,000 of liquidity then, or is a stablecoin or a major coin; its value is capped at what that pool could have paid for the whole balance. Other coins have null price and priceAsOf and add nothing to totalUsdValue. Items are sorted by USD value, then by raw balance, and paged with cursor. Pass exactly one of time, datetime or checkpoint. One call covers the whole wallet.\n\nCredits: 20.","tags":["Wallet"],"x-credits":20,"x-tide-name":"wallet.holdingsAt","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"wallet":{"type":"string"},"at":{"type":"object","description":"The point asked about: { checkpoint, timestamp }."},"totalUsdValue":{"type":["number","null"],"description":"Sum of usdValue over every priced coin held at that point (not only this page)."},"coinCount":{"type":"integer","description":"Number of coins with a balance at that point."},"items":{"type":"array","description":"Coins: coinType, mint, symbol, decimals, balance, balanceRaw, pricePerToken, usdValue, priceAsOf."},"cursor":{"type":["string","null"]},"asOf":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"wallet","in":"path","required":true,"description":"Wallet address (0x...), name.sui or @name.","schema":{"type":"string","description":"Wallet address (0x...), name.sui or @name."}},{"name":"time","in":"query","required":false,"description":"Point in time as unix seconds. Give exactly one of time, datetime or checkpoint.","schema":{"type":"integer","description":"Point in time as unix seconds. Give exactly one of time, datetime or checkpoint."}},{"name":"datetime","in":"query","required":false,"description":"Point in time as an ISO 8601 date, UTC when no zone is given, for example 2025-01-10 19:20:00.","schema":{"type":"string","description":"Point in time as an ISO 8601 date, UTC when no zone is given, for example 2025-01-10 19:20:00."}},{"name":"checkpoint","in":"query","required":false,"description":"Checkpoint sequence number. Alias: slot.","schema":{"type":"integer","description":"Checkpoint sequence number. Alias: slot."}},{"name":"limit","in":"query","required":false,"description":"Coins per page, default 100.","schema":{"type":"integer","minimum":1,"maximum":200,"description":"Coins per page, default 100."}},{"name":"cursor","in":"query","required":false,"description":"Cursor from the previous page.","schema":{"type":"string","description":"Cursor from the previous page."}},{"name":"showZeroBalance","in":"query","required":false,"description":"Not used: only coins with a balance are listed.","schema":{"type":"boolean","description":"Not used: only coins with a balance are listed."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/coins/{type}/holders-at":{"get":{"operationId":"coins_holdersAt","summary":"The top holders of a coin at a past time or checkpoint.","description":"Returns the largest holders of a coin at the end of a checkpoint, found by adding up every balance change of the coin per owner. Pass exactly one of time, datetime or checkpoint. It works for coins with up to about 5 million balance changes before that point; bigger coins such as SUI or USDC are refused with invalid_params until the daily holder snapshots ship (phase 2). Each holder carries its share of the supply held by wallets at that point. Use /v1/coins/{type}/holders for the live list.\n\nCredits: 25.","tags":["Coins and markets"],"x-credits":25,"x-tide-name":"coins.holdersAt","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"coinType":{"type":"string"},"at":{"type":"object"},"holderCount":{"type":"integer","description":"Wallets with a positive balance at that point."},"totalRaw":{"type":"string","description":"Total held by all those wallets, smallest unit."},"items":{"type":"array","description":"Holders: rank, owner, name, balance, balanceRaw, sharePct, usdValue."},"price":{"type":["number","null"]},"priceAsOf":{"type":["string","null"]},"cursor":{"type":"null"},"asOf":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"type","in":"path","required":true,"description":"Coin type such as 0x...::mod::NAME.","schema":{"type":"string","description":"Coin type such as 0x...::mod::NAME."}},{"name":"time","in":"query","required":false,"description":"Point in time as unix seconds. Give exactly one of time, datetime or checkpoint.","schema":{"type":"integer","description":"Point in time as unix seconds. Give exactly one of time, datetime or checkpoint."}},{"name":"datetime","in":"query","required":false,"description":"Point in time as an ISO 8601 date, UTC when no zone is given, for example 2025-01-10 19:20:00.","schema":{"type":"string","description":"Point in time as an ISO 8601 date, UTC when no zone is given, for example 2025-01-10 19:20:00."}},{"name":"checkpoint","in":"query","required":false,"description":"Checkpoint sequence number. Alias: slot.","schema":{"type":"integer","description":"Checkpoint sequence number. Alias: slot."}},{"name":"limit","in":"query","required":false,"description":"Holders to return, default 50.","schema":{"type":"integer","minimum":1,"maximum":500,"description":"Holders to return, default 50."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/wallet/{wallet}/history":{"get":{"operationId":"wallet_history","summary":"A wallet's transactions with its balance changes, all history, both directions.","description":"Returns the wallet's transactions, newest first or oldest first (sort), each with the digest, checkpoint, timestamp (unix seconds), fee in SUI, feePayer, error and the wallet's own balanceChanges per coin (amount in whole coins, amountRaw in the smallest unit). A transaction is included when the wallet sent it, paid its gas, or had a balance change. Page with cursor, up to 100 per page. Filter by time, checkpoint, coinType, status and type (coarse: TRANSFER, CONTRACT_CALL, PUBLISH, UPGRADE, SYSTEM). For fully parsed transactions use /v0/addresses/{address}/transactions.\n\nCredits: 10.","tags":["Wallet"],"x-credits":10,"x-tide-name":"wallet.history","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"wallet":{"type":"string"},"data":{"type":"array","description":"Transactions: digest, signature (same as digest), checkpoint, txIndex, timestamp, type, status, fee, feeMist, feePayer, sender, error, balanceChanges."},"pagination":{"type":"object","description":"{ hasMore, nextCursor }."},"cursor":{"type":["string","null"]},"historyFrom":{"type":["integer","null"],"description":"Set while older history is still loading: the lowest checkpoint indexed. Null once all history is loaded."},"asOf":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"wallet","in":"path","required":true,"description":"Wallet address (0x...), name.sui or @name.","schema":{"type":"string","description":"Wallet address (0x...), name.sui or @name."}},{"name":"limit","in":"query","required":false,"description":"Rows per page, up to 100.","schema":{"type":"integer","minimum":1,"maximum":100,"description":"Rows per page, up to 100."}},{"name":"cursor","in":"query","required":false,"description":"Cursor from the previous page. Alias: before (history).","schema":{"type":"string","description":"Cursor from the previous page. Alias: before (history)."}},{"name":"sort","in":"query","required":false,"description":"desc is newest first (default), asc is oldest first.","schema":{"type":"string","enum":["desc","asc"],"description":"desc is newest first (default), asc is oldest first."}},{"name":"gte-time","in":"query","required":false,"description":"Only transactions at or after this unix time (seconds).","schema":{"type":"integer","description":"Only transactions at or after this unix time (seconds)."}},{"name":"lte-time","in":"query","required":false,"description":"Only transactions at or before this unix time (seconds).","schema":{"type":"integer","description":"Only transactions at or before this unix time (seconds)."}},{"name":"gte-checkpoint","in":"query","required":false,"description":"Only transactions at or after this checkpoint.","schema":{"type":"integer","description":"Only transactions at or after this checkpoint."}},{"name":"lte-checkpoint","in":"query","required":false,"description":"Only transactions at or before this checkpoint.","schema":{"type":"integer","description":"Only transactions at or before this checkpoint."}},{"name":"coinType","in":"query","required":false,"description":"Only transactions that changed this coin's balance for the wallet. Alias: mint.","schema":{"type":"string","description":"Only transactions that changed this coin's balance for the wallet. Alias: mint."}},{"name":"before","in":"query","required":false,"description":"Alias of cursor.","schema":{"type":"string","description":"Alias of cursor."}},{"name":"status","in":"query","required":false,"description":"Only successful or only failed transactions.","schema":{"type":"string","enum":["success","failed"],"description":"Only successful or only failed transactions."}},{"name":"type","in":"query","required":false,"description":"Coarse transaction type filter.","schema":{"type":"string","enum":["TRANSFER","CONTRACT_CALL","PUBLISH","UPGRADE","SYSTEM"],"description":"Coarse transaction type filter."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/wallet/{wallet}/transfers":{"get":{"operationId":"wallet_transfers","summary":"A wallet's coin transfers in and out with the counterparty.","description":"Returns the coin transfers of a wallet: one record per coin moved, with direction (in or out), counterparty, coinType (also mint), symbol, amount in whole coins, amountRaw and decimals. Only plain transfers count: transactions whose commands are built-in transfers and payments, not swaps or protocol calls (use /history for those). Gas is not part of the amount. Page with cursor; a page covers up to limit transactions and may hold a few more records when one transaction moves several coins. Filter by direction, coinType and time.\n\nCredits: 10.","tags":["Wallet"],"x-credits":10,"x-tide-name":"wallet.transfers","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"wallet":{"type":"string"},"data":{"type":"array","description":"Transfers: digest, signature, checkpoint, timestamp, direction, counterparty, coinType, mint, symbol, amount, amountRaw, decimals."},"pagination":{"type":"object","description":"{ hasMore, nextCursor }."},"cursor":{"type":["string","null"]},"historyFrom":{"type":["integer","null"]},"asOf":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"wallet","in":"path","required":true,"description":"Wallet address (0x...), name.sui or @name.","schema":{"type":"string","description":"Wallet address (0x...), name.sui or @name."}},{"name":"limit","in":"query","required":false,"description":"Rows per page, up to 100.","schema":{"type":"integer","minimum":1,"maximum":100,"description":"Rows per page, up to 100."}},{"name":"cursor","in":"query","required":false,"description":"Cursor from the previous page. Alias: before (history).","schema":{"type":"string","description":"Cursor from the previous page. Alias: before (history)."}},{"name":"sort","in":"query","required":false,"description":"desc is newest first (default), asc is oldest first.","schema":{"type":"string","enum":["desc","asc"],"description":"desc is newest first (default), asc is oldest first."}},{"name":"gte-time","in":"query","required":false,"description":"Only transactions at or after this unix time (seconds).","schema":{"type":"integer","description":"Only transactions at or after this unix time (seconds)."}},{"name":"lte-time","in":"query","required":false,"description":"Only transactions at or before this unix time (seconds).","schema":{"type":"integer","description":"Only transactions at or before this unix time (seconds)."}},{"name":"gte-checkpoint","in":"query","required":false,"description":"Only transactions at or after this checkpoint.","schema":{"type":"integer","description":"Only transactions at or after this checkpoint."}},{"name":"lte-checkpoint","in":"query","required":false,"description":"Only transactions at or before this checkpoint.","schema":{"type":"integer","description":"Only transactions at or before this checkpoint."}},{"name":"coinType","in":"query","required":false,"description":"Only transactions that changed this coin's balance for the wallet. Alias: mint.","schema":{"type":"string","description":"Only transactions that changed this coin's balance for the wallet. Alias: mint."}},{"name":"direction","in":"query","required":false,"description":"Only incoming or only outgoing transfers.","schema":{"type":"string","enum":["in","out"],"description":"Only incoming or only outgoing transfers."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/wallet/{wallet}/identity":{"get":{"operationId":"wallet_identity","summary":"Who a wallet is: known label and SuiNS names.","description":"Returns the label tide knows for a wallet (exchange, bot, named wallet) and every SuiNS name it owns as { address, name, category, type, tags } plus suiNames. Returns 404 when the wallet has no label and no SuiNS name. The wallet can be an address, name.sui or @name. Use batch-identity for many wallets at once.\n\nCredits: 1.","tags":["Wallet"],"x-credits":1,"x-tide-name":"wallet.identity","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string"},"name":{"type":["string","null"],"description":"Label or default SuiNS name."},"category":{"type":["string","null"]},"type":{"type":"string","description":"exchange, bot, wallet, system, protocol or unknown."},"tags":{"type":"array","items":{"type":"string"}},"suiNames":{"type":"array","items":{"type":"string"},"description":"SuiNS names the wallet owns or that point at it."},"asOf":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"wallet","in":"path","required":true,"description":"Wallet address (0x...), name.sui or @name.","schema":{"type":"string","description":"Wallet address (0x...), name.sui or @name."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/wallet/batch-identity":{"post":{"operationId":"wallet_batchIdentity","summary":"Identity of up to 100 wallets in one call.","description":"Takes { addresses: [...] } with up to 100 entries, each an address, name.sui or @name, and returns one identity per entry in the same order. An entry that came from a name carries inputDomain. A name that does not resolve comes back in place as { address: null, type: \"unknown\", inputDomain, unresolved: true }. Wallets with no label are returned with type unknown. Batch lookups use the default SuiNS name only: call identity for the full list of names.\n\nCredits: varies.","tags":["Wallet"],"x-credits":"varies","x-tide-name":"wallet.batchIdentity","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","description":"Identities in request order."},"asOf":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"addresses":{"type":"array","maxItems":100,"items":{"type":"string"},"description":"Up to 100 addresses, name.sui or @name values."}},"required":["addresses"]}}}},"parameters":[{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/wallet/{wallet}/funded-by":{"get":{"operationId":"wallet_fundedBy","summary":"Who first sent SUI to a wallet.","description":"Returns the first inbound SUI transfer the wallet ever received from another wallet: the funder with its label and SuiNS name when known, the amount, the transaction digest and the time. Staking rewards and the wallet's own moves do not count. Returns 404 when no such transfer exists.\n\nCredits: 10.","tags":["Wallet"],"x-credits":10,"x-tide-name":"wallet.fundedBy","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"wallet":{"type":"string"},"funder":{"type":"string"},"funderName":{"type":["string","null"]},"funderType":{"type":["string","null"]},"coinType":{"type":"string"},"symbol":{"type":"string"},"amount":{"type":"number","description":"SUI received."},"amountRaw":{"type":"string","description":"MIST."},"decimals":{"type":"integer"},"date":{"type":"string"},"digest":{"type":"string"},"timestamp":{"type":"integer","description":"Unix seconds."},"checkpoint":{"type":["integer","null"]},"explorerUrl":{"type":"string"},"asOf":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"wallet","in":"path","required":true,"description":"Wallet address (0x...), name.sui or @name.","schema":{"type":"string","description":"Wallet address (0x...), name.sui or @name."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/wallet/{wallet}/pnl":{"get":{"operationId":"wallet_pnl","summary":"Realized and unrealized profit and loss per coin for a wallet.","description":"Returns one row per coin the wallet traded, with realized, unrealized and total profit in USD and the traded volume. Values come from the wallet's swaps and are marked at current prices. Realized, unrealized and total are null when they cannot be worked out for a coin. Sort with sort (realized, total, volume, trades) and dir, page with cursor, search a coin with q.\n\nCredits: 10.","tags":["Wallet"],"x-credits":10,"x-tide-name":"wallet.pnl","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"wallet","in":"path","required":true,"description":"Wallet address (0x...), name.sui or @name.","schema":{"type":"string","description":"Wallet address (0x...), name.sui or @name."}},{"name":"sort","in":"query","required":false,"description":"Sort key, default realized.","schema":{"type":"string","enum":["realized","total","volume","trades"],"description":"Sort key, default realized."}},{"name":"dir","in":"query","required":false,"description":"Sort direction, default desc.","schema":{"type":"string","enum":["asc","desc"],"description":"Sort direction, default desc."}},{"name":"q","in":"query","required":false,"description":"Filter coins by symbol or name.","schema":{"type":"string","description":"Filter coins by symbol or name."}},{"name":"cursor","in":"query","required":false,"description":"Cursor from the previous page.","schema":{"type":"string","description":"Cursor from the previous page."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/wallet/{wallet}/positions":{"get":{"operationId":"wallet_positions","summary":"A wallet's DeFi positions: liquidity, lending, staking and vaults.","description":"Returns the open DeFi positions of a wallet with the protocol, the kind (liquidity, lending, staked, vault, borrow), the coins in and out, USD value and APY when known. Values are marked at current prices. totals adds up value and borrowed USD.\n\nCredits: 10.","tags":["Wallet"],"x-credits":10,"x-tide-name":"wallet.positions","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"wallet","in":"path","required":true,"description":"Wallet address (0x...), name.sui or @name.","schema":{"type":"string","description":"Wallet address (0x...), name.sui or @name."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/wallet/{wallet}/linked":{"get":{"operationId":"wallet_linked","summary":"Wallets that look related to this one.","description":"Returns wallets funded from the same source that each traded real volume, with their realized profit and volume when known, and the combined numbers for the group. This is a hint from funding links, not proof of one owner.\n\nCredits: 10.","tags":["Wallet"],"x-credits":10,"x-tide-name":"wallet.linked","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"wallet","in":"path","required":true,"description":"Wallet address (0x...), name.sui or @name.","schema":{"type":"string","description":"Wallet address (0x...), name.sui or @name."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/objects/{id}":{"get":{"operationId":"objects_get","summary":"One object: type, owner, version and fields as they are now.","description":"Returns the current state of an object: type, version, digest, owner (address, object, shared, immutable), the Move fields as JSON, the Display values and the storage rebate in MIST. For a deleted or wrapped object it returns status deleted or wrapped with the last version the index saw. Use /history for every past version. Packages are served by /v1/packages/{id}.\n\nCredits: 1.","tags":["Chain"],"x-credits":1,"x-tide-name":"objects.get","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"objectId":{"type":"string"},"status":{"type":"string","enum":["live","deleted","wrapped"]},"version":{"type":"integer"},"digest":{"type":["string","null"]},"type":{"type":["string","null"],"description":"Full Move type with long addresses."},"owner":{"type":["object","null"],"description":"{ kind: address | object | shared | immutable | consensus_address, address }."},"previousTransaction":{"type":["string","null"]},"storageRebateMist":{"type":["string","null"]},"hasPublicTransfer":{"type":["boolean","null"]},"fields":{"type":["object","null"],"description":"Move fields as JSON."},"display":{"type":["object","null"]},"asOf":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"id","in":"path","required":true,"description":"Object id (0x...).","schema":{"type":"string","description":"Object id (0x...)."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/objects/{id}/history":{"get":{"operationId":"objects_history","summary":"Every version of an object since it was created, either direction.","description":"Returns the object's versions with the kind of change (created, mutated, transferred, wrapped, unwrapped, deleted), the owner after the change, the transaction digest and time, and the sender. Newest first by default, oldest first with sort=asc. Page with cursor, up to 200 versions. coinBalance is the raw balance for coin objects. Contents of past versions are not stored: this is the version log, not a state snapshot. Same data as getTransactionsForAsset but one row per version.\n\nCredits: 5.","tags":["Chain"],"x-credits":5,"x-tide-name":"objects.history","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"objectId":{"type":"string"},"items":{"type":"array","description":"Versions: version, previousVersion, kind, type, owner, coinBalance, digest, checkpoint, timestamp, sender."},"cursor":{"type":["string","null"]},"historyFrom":{"type":["integer","null"],"description":"While older history is still loading: the lowest checkpoint indexed."},"asOf":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"id","in":"path","required":true,"description":"Object id (0x...).","schema":{"type":"string","description":"Object id (0x...)."}},{"name":"sort","in":"query","required":false,"description":"desc is newest first (default).","schema":{"type":"string","enum":["desc","asc"],"description":"desc is newest first (default)."}},{"name":"limit","in":"query","required":false,"description":"Versions per page, default 50.","schema":{"type":"integer","minimum":1,"maximum":200,"description":"Versions per page, default 50."}},{"name":"cursor","in":"query","required":false,"description":"Cursor from the previous page (a version number).","schema":{"type":"string","description":"Cursor from the previous page (a version number)."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/events":{"get":{"operationId":"events_list","summary":"Move events by type or package in any time or checkpoint range.","description":"Returns decoded Move events, newest first or oldest first, for one event type (type, with or without type parameters) or for everything a package emitted (package, optionally with module). Narrow with sender, fromTime and toTime (unix seconds) or fromCheckpoint and toCheckpoint. Each event has its transaction digest, checkpoint, time and the decoded JSON. Page with cursor, up to 200 per page. Pass type or package, not both. Covers all of history since genesis.\n\nCredits: 5.","tags":["Chain"],"x-credits":5,"x-tide-name":"events.list","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","description":"Events: type, package, module, sender, json, digest, checkpoint, txIndex, eventIndex, timestamp."},"cursor":{"type":["string","null"]},"historyFrom":{"type":["integer","null"]},"asOf":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"type","in":"query","required":false,"description":"Event type, for example 0x2::coin::CurrencyCreated or a full generic instance. Give type or package.","schema":{"type":"string","description":"Event type, for example 0x2::coin::CurrencyCreated or a full generic instance. Give type or package."}},{"name":"package","in":"query","required":false,"description":"Package id: all events emitted by that package.","schema":{"type":"string","description":"Package id: all events emitted by that package."}},{"name":"module","in":"query","required":false,"description":"With package: only events from this module.","schema":{"type":"string","description":"With package: only events from this module."}},{"name":"sender","in":"query","required":false,"description":"Only events sent by this address.","schema":{"type":"string","description":"Only events sent by this address."}},{"name":"fromTime","in":"query","required":false,"description":"Unix seconds, inclusive.","schema":{"type":"integer","description":"Unix seconds, inclusive."}},{"name":"toTime","in":"query","required":false,"description":"Unix seconds, inclusive.","schema":{"type":"integer","description":"Unix seconds, inclusive."}},{"name":"fromCheckpoint","in":"query","required":false,"description":"First checkpoint, inclusive.","schema":{"type":"integer","description":"First checkpoint, inclusive."}},{"name":"toCheckpoint","in":"query","required":false,"description":"Last checkpoint, inclusive.","schema":{"type":"integer","description":"Last checkpoint, inclusive."}},{"name":"sort","in":"query","required":false,"description":"desc is newest first (default).","schema":{"type":"string","enum":["desc","asc"],"description":"desc is newest first (default)."}},{"name":"limit","in":"query","required":false,"description":"Events per page, default 50.","schema":{"type":"integer","minimum":1,"maximum":200,"description":"Events per page, default 50."}},{"name":"cursor","in":"query","required":false,"description":"Cursor from the previous page.","schema":{"type":"string","description":"Cursor from the previous page."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/checkpoints/{seq}":{"get":{"operationId":"checkpoints_get","summary":"One checkpoint: header, gas and its transactions.","description":"Returns a checkpoint by sequence number, or the latest one with seq=latest. It has the digest, previous digest, epoch, time (unix seconds), transaction count, network transaction total, the gas totals in MIST, the neighbouring checkpoint numbers and a list of its transactions (digest, sender, type, status, a one-line sentence). System transactions are counted in system and left out of the list. Older than the index starts: not_indexed with the lowest checkpoint available.\n\nCredits: 1.","tags":["Chain"],"x-credits":1,"x-tide-name":"checkpoints.get","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"sequence":{"type":"integer"},"digest":{"type":"string"},"previousDigest":{"type":["string","null"]},"epoch":{"type":"integer"},"timestamp":{"type":"integer","description":"Unix seconds."},"txCount":{"type":"integer"},"networkTotalTxs":{"type":"string"},"gas":{"type":"object","description":"computation, storage, rebate, nonRefundable in MIST (strings)."},"prev":{"type":["integer","null"]},"next":{"type":["integer","null"]},"transactions":{"type":"array"},"asOf":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"seq","in":"path","required":true,"description":"Checkpoint sequence number, or latest.","schema":{"type":"string","description":"Checkpoint sequence number, or latest."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/epochs":{"get":{"operationId":"epochs_list","summary":"Epochs, newest first, with gas price and transaction counts.","description":"Returns epochs newest first: epoch number, start and end time (unix seconds, end is null for the current epoch), checkpoint count, transaction count, the reference gas price in MIST, gas fees, stake rewards and the storage fund in MIST. Page back with cursor. Use it for staking and fee history.\n\nCredits: 1.","tags":["Chain"],"x-credits":1,"x-tide-name":"epochs.list","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array"},"cursor":{"type":["string","null"]},"asOf":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"limit","in":"query","required":false,"description":"Epochs per page, default 20.","schema":{"type":"integer","minimum":1,"maximum":100,"description":"Epochs per page, default 20."}},{"name":"cursor","in":"query","required":false,"description":"Cursor from the previous page: return epochs older than this epoch number.","schema":{"type":"string","description":"Cursor from the previous page: return epochs older than this epoch number."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/validators":{"get":{"operationId":"validators_list","summary":"The active validator set with stake, voting power, APY and commission.","description":"Returns the active validators of the current epoch, ranked by stake: address, name, stake in MIST, voting power percent, estimated APY percent, commission percent and next epoch commission, the gas price each quoted, and whether it is in the supermajority group that holds a third of voting power. Use it for staking choices and network health.\n\nCredits: 1.","tags":["Chain"],"x-credits":1,"x-tide-name":"validators.list","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"epoch":{"type":"integer"},"count":{"type":"integer"},"totalStakeMist":{"type":"string"},"items":{"type":"array"},"asOf":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/packages/{id}":{"get":{"operationId":"packages_get","summary":"A Move package: versions, modules, functions and dependencies.","description":"Returns a package by any of its version ids: the original id, current version, publisher, publish and upgrade times (unix seconds), the version list with digests and checkpoints, dependencies, and each module with its public functions (name, visibility, entry flag, signature) and struct names. The UpgradeCap is reported so you can see who can upgrade it.\n\nCredits: 1.","tags":["Chain"],"x-credits":1,"x-tide-name":"packages.get","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"packageId":{"type":"string"},"originalId":{"type":"string"},"version":{"type":"integer"},"versions":{"type":"array"},"modules":{"type":"array"},"asOf":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"id","in":"path","required":true,"description":"Package id (0x...), any version.","schema":{"type":"string","description":"Package id (0x...), any version."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/names/{name}":{"get":{"operationId":"names_resolve","summary":"Resolve a SuiNS name to the address it points at.","description":"Returns the target address of a SuiNS name (name.sui or @name), the id of the name's NFT, its expiry time (unix seconds) and whether it has expired. Returns 404 when the name is not registered. Names are lower case.\n\nCredits: 1.","tags":["Chain"],"x-credits":1,"x-tide-name":"names.resolve","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"address":{"type":["string","null"]},"nftId":{"type":"string"},"expiresAt":{"type":"integer"},"expired":{"type":"boolean"},"asOf":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"name","in":"path","required":true,"description":"SuiNS name such as adeniyi.sui, or @adeniyi.","schema":{"type":"string","description":"SuiNS name such as adeniyi.sui, or @adeniyi."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/names/reverse/{address}":{"get":{"operationId":"names_reverse","summary":"The SuiNS names of an address.","description":"Returns the default (reverse) SuiNS name of an address and every name the address owns. Returns 404 when the address has neither. The address can be a 0x address, name.sui or @name.\n\nCredits: 1.","tags":["Chain"],"x-credits":1,"x-tide-name":"names.reverse","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string"},"name":{"type":["string","null"],"description":"Default name."},"names":{"type":"array","items":{"type":"string"}},"asOf":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"address","in":"path","required":true,"description":"0x address, name.sui or @name.","schema":{"type":"string","description":"0x address, name.sui or @name."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/search":{"get":{"operationId":"search","summary":"Find coins, names, packages, collections, addresses, objects and transactions.","description":"Searches by free text or by id: a coin symbol or type, a SuiNS name, a package or module name, a validator, a collection, a 0x address or object id, a transaction digest, a checkpoint number. Returns ranked hits, each with a kind, title, id, a short subtitle and a link on tide.ad. interpretedAs says how the query was read. Use it to turn a name into an id before calling another method.\n\nCredits: 1.","tags":["Chain"],"x-credits":1,"x-tide-name":"search","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string"},"interpretedAs":{"type":"string"},"items":{"type":"array"},"cursor":{"type":"null"},"asOf":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"q","in":"query","required":true,"description":"Search text or id, up to 300 characters.","schema":{"type":"string","description":"Search text or id, up to 300 characters."}},{"name":"limit","in":"query","required":false,"description":"Hits to return, default 20.","schema":{"type":"integer","minimum":1,"maximum":50,"description":"Hits to return, default 20."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/#getGasPriceEstimate":{"post":{"operationId":"getGasPriceEstimate","summary":"Gas price levels from recent transactions, optionally for given shared objects.","description":"Returns the reference gas price of the current epoch (the lowest price a transaction can pay) and gas price percentiles over the last lookbackCheckpoints checkpoints: min, low (p25), medium (p50), high (p75), veryHigh (p95) and unsafeMax (p99), all in MIST per computation unit. Pass objectIds (shared objects such as a hot pool) to measure only transactions that touched them, which shows congestion on that object. gasPriceEstimate is the level you ask for with level (default medium), never below the reference price.\n\nCredits: 1.","tags":["Gas"],"x-credits":1,"x-tide-name":"getGasPriceEstimate","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"referenceGasPrice":{"type":"integer","description":"MIST per unit, current epoch."},"gasPriceEstimate":{"type":"integer","description":"The chosen level, at least the reference price."},"gasPriceLevels":{"type":"object","description":"min, low, medium, high, veryHigh, unsafeMax in MIST per unit."},"sampleCheckpoints":{"type":"object","description":"{ from, to }: the checkpoints sampled."},"sampledTransactions":{"type":"integer"},"asOf":{"type":"object"}}},"example":{"referenceGasPrice":100,"gasPriceEstimate":100}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"x-jsonrpc-method":"getGasPriceEstimate","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["jsonrpc","id","method"],"properties":{"jsonrpc":{"type":"string","enum":["2.0"]},"id":{"oneOf":[{"type":"string"},{"type":"integer"}]},"method":{"type":"string","enum":["getGasPriceEstimate"]},"params":{"type":"object","properties":{"objectIds":{"type":"array","maxItems":10,"items":{"type":"string"},"description":"Up to 10 shared object ids. Only transactions that changed one of them are sampled."},"lookbackCheckpoints":{"type":"integer","minimum":10,"maximum":1000,"description":"How many recent checkpoints to sample, default 150 (about one minute)."},"level":{"type":"string","enum":["min","low","medium","high","veryHigh","unsafeMax"],"description":"Which level gasPriceEstimate reports, default medium."}}}}},"example":{"jsonrpc":"2.0","id":1,"method":"getGasPriceEstimate","params":{"objectIds":["0x0000000000000000000000000000000000000000000000000000000000000006"],"lookbackCheckpoints":100}}}}}}},"/catalog.json":{"get":{"operationId":"catalog_json","summary":"Every method with params, result schema, example and credits, as JSON.","description":"Returns the full method catalog plus the plans table. Generated from the live method list, so it is always current. Use it to discover methods and their parameters. Costs nothing.\n\nCredits: 0.","tags":["Meta"],"x-credits":0,"x-tide-name":"catalog.json","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"security":[{},{"ApiKeyQuery":[]},{"ApiKeyHeader":[]}],"parameters":[{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/openapi.json":{"get":{"operationId":"catalog_openapi","summary":"OpenAPI 3.1 description of every REST path and JSON-RPC method.","description":"REST paths are listed as they are called. Each JSON-RPC method is a POST / operation with an x-jsonrpc-method extension and a request body of { jsonrpc, id, method, params }. Use it to generate a typed client. Costs nothing.\n\nCredits: 0.","tags":["Meta"],"x-credits":0,"x-tide-name":"catalog.openapi","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"security":[{},{"ApiKeyQuery":[]},{"ApiKeyHeader":[]}],"parameters":[{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/llms.txt":{"get":{"operationId":"catalog_llms","summary":"Short plain-text index for language models: base URLs, auth and one line per method.","description":"A compact map of the API for an agent: what tide is, where to call it, how to authenticate, and one line per method with its credits. Fetch /llms-full.txt for parameters and examples. Costs nothing.\n\nCredits: 0.","tags":["Meta"],"x-credits":0,"x-tide-name":"catalog.llms","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"security":[{},{"ApiKeyQuery":[]},{"ApiKeyHeader":[]}],"parameters":[{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/llms-full.txt":{"get":{"operationId":"catalog_llmsFull","summary":"Plain-text reference: every method with a parameter table and a curl example.","description":"The whole API in one text file for an agent to read: each method with its description, credits, parameter table and a working curl example. Costs nothing.\n\nCredits: 0.","tags":["Meta"],"x-credits":0,"x-tide-name":"catalog.llmsFull","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"security":[{},{"ApiKeyQuery":[]},{"ApiKeyHeader":[]}],"parameters":[{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/mcp":{"post":{"operationId":"mcp","summary":"Remote MCP server (streamable HTTP) with tide tools for agents.","description":"Add it to an MCP client as https://api.tide.ad/mcp, with ?api-key=KEY or an Authorization: Bearer KEY header (it also works without a key at the keyless tier). Messages are JSON-RPC 2.0 over POST. Tools: tide_get_transaction, tide_get_wallet, tide_get_coin, tide_search, tide_docs and more. Each tool call costs the credits of the method it runs. The endpoint itself is free.\n\nCredits: 0.","tags":["Meta"],"x-credits":0,"x-tide-name":"mcp","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"security":[{},{"ApiKeyQuery":[]},{"ApiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"jsonrpc":{"type":"string","enum":["2.0"],"description":"JSON-RPC version."},"id":{"type":["string","integer"],"description":"Request id. Omit for notifications."},"method":{"type":"string","description":"MCP method: initialize, ping, tools/list, tools/call, notifications/initialized."},"params":{"type":"object","description":"Method parameters."}},"required":["jsonrpc","method"]}}}},"parameters":[{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/tx/simulate":{"post":{"operationId":"tx_simulate","summary":"Check a transaction before signing: what it would do, what it would cost, or why it would fail.","description":"Runs a transaction against the chain's current state without signing or sending it, and explains what would happen: success or failure, balance changes per address with USD, objects created, changed or deleted, events, gas in MIST and SUI, values returned by each command and one plain sentence. Use it before signing, and as a read-only call: a Move call that returns a value shows it in commandResults. Send txBytes (what a wallet is about to sign) or sender plus a JSON programmable transaction block, with optional gasBudget and gasPrice. On failure it names the package, module and function, the abort code and the error constant when the module names its errors, and also explains out of gas, short balances and missing or stale objects in plain words. 10 credits.\n\nCredits: 10.","tags":["Simulate"],"x-credits":10,"x-tide-name":"tx.simulate","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","description":"The transaction explained.","properties":{"status":{"type":"string","description":"ok when the transaction would succeed, failed when it would abort or be rejected.","enum":["ok","failed"]},"description":{"type":"string","description":"One plain sentence of what the transaction would do, or why it would fail."},"error":{"type":["object","null"],"description":"Null when status is ok. Otherwise why it fails, in words and fields.","properties":{"kind":{"type":"string","description":"MOVE_ABORT, INSUFFICIENT_GAS, INSUFFICIENT_COIN_BALANCE, INSUFFICIENT_BALANCE, OBJECT_NOT_FOUND, OBJECT_VERSION_MISMATCH, NO_GAS_COIN, COMMAND_ARGUMENT_ERROR, MOVE_RUNTIME_ERROR and others."},"stage":{"type":"string","description":"pre_execution when the node refused the transaction before running it. Absent when it ran and failed."},"command":{"type":["integer","null"],"description":"Index of the failing command."},"sentence":{"type":"string","description":"What went wrong, in plain words."},"abort":{"type":["object","null"],"description":"For MOVE_ABORT only.","properties":{"package":{"type":"string","description":"Package id the abort happened in."},"module":{"type":"string","description":"Module name."},"function":{"type":["string","null"],"description":"Function name."},"target":{"type":"string","description":"package::module::function."},"code":{"type":"string","description":"Abort code. For modules that name their errors this is the error's code, otherwise the raw abort code."},"rawCode":{"type":"string","description":"The abort code as the Move VM reports it."},"errorName":{"type":["string","null"],"description":"Name of the error constant, when the module names its errors."},"line":{"type":["integer","null"],"description":"Source line of the abort, when the module names its errors."},"renderedValue":{"type":["string","null"],"description":"The error constant's value rendered as text, when it has one."}}},"message":{"type":["string","null"],"description":"The node's own message."}}},"digest":{"type":["string","null"],"description":"Digest the transaction would have with this gas selection. Null when it was rejected before running."},"sender":{"type":["string","null"],"description":"Address that signs."},"feePayer":{"type":["string","null"],"description":"Address that pays gas."},"epoch":{"type":["integer","null"],"description":"Current epoch."},"type":{"type":["string","null"],"description":"Transaction type, for example TRANSFER, SWAP or CONTRACT_CALL."},"source":{"type":["string","null"],"description":"Protocol slug in upper case, UNKNOWN when none is labelled."},"gas":{"type":["object","null"],"description":"Gas in MIST (1 SUI = 1,000,000,000 MIST) and SUI. Total is computation plus storage minus rebate.","properties":{"computationMist":{"type":"integer","description":"Computation cost in MIST."},"storageMist":{"type":"integer","description":"Storage cost in MIST."},"rebateMist":{"type":"integer","description":"Storage rebate in MIST."},"totalMist":{"type":"integer","description":"Net cost in MIST."},"totalSui":{"type":"number","description":"Net cost in SUI."},"computationSui":{"type":"number"},"storageSui":{"type":"number"},"rebateSui":{"type":"number"},"budgetMist":{"type":["integer","null"],"description":"Gas budget used."},"priceMist":{"type":["integer","null"],"description":"Gas price used."},"payer":{"type":["string","null"],"description":"Address whose coins pay the gas."}}},"balanceChanges":{"type":"array","description":"Balance change per address and coin, gas included.","items":{"type":"object","description":"","properties":{"owner":{"type":"string","description":"Address."},"coinType":{"type":"string","description":"Move coin type."},"symbol":{"type":["string","null"],"description":"Coin symbol."},"decimals":{"type":["integer","null"],"description":"Coin decimals."},"amountRaw":{"type":"string","description":"Signed integer in the smallest unit."},"amount":{"type":"number","description":"Signed amount in whole coins."},"usd":{"type":["object","null"],"description":"Value in US dollars with the time of the price. Null when the coin has no price.","properties":{"usd":{"type":"number"},"priceAsOf":{"type":"string","description":"Time the price is for."}}}}}},"objectChanges":{"type":"array","description":"Objects created, mutated, deleted, wrapped, unwrapped, published or transferred.","items":{"type":"object","description":"","properties":{"objectId":{"type":"string","description":"Object id."},"type":{"type":["string","null"],"description":"Move type."},"kind":{"type":"string","description":"created, mutated, deleted, wrapped, unwrapped, published or transferred."},"owner":{"type":["object","null"],"description":"Owner after the transaction: kind address, object, shared or immutable."},"version":{"type":["integer","null"],"description":"Version written."},"previousVersion":{"type":["integer","null"],"description":"Version before."}}}},"events":{"type":"array","description":"Move events the transaction would emit, in order.","items":{"type":"object","description":"","properties":{"index":{"type":"integer","description":"Position."},"type":{"type":["string","null"],"description":"Move event type."},"package":{"type":["string","null"],"description":"Package id."},"module":{"type":["string","null"],"description":"Module."},"sender":{"type":["string","null"],"description":"Address."},"json":{"description":"Decoded event body."}}}},"commands":{"type":"array","description":"The commands of the programmable transaction block.","items":{"type":"object","description":"","properties":{"index":{"type":"integer","description":"Command index."},"kind":{"type":"string","description":"MoveCall, TransferObjects, SplitCoins, MergeCoins, Publish, Upgrade or MakeMoveVec."},"target":{"type":["string","null"],"description":"package::module::function for MoveCall."},"typeArguments":{"type":"array","description":"Type arguments.","items":{"type":"string"}},"summary":{"type":["string","null"],"description":"One sentence."}}}},"commandResults":{"type":"array","description":"Values returned by commands that return something, for example a read-only Move call. Empty when no command returns a value.","items":{"type":"object","description":"","properties":{"index":{"type":"integer","description":"Command index."},"kind":{"type":["string","null"],"description":"Command kind."},"target":{"type":["string","null"],"description":"package::module::function."},"returnValues":{"type":"array","description":"Returned values.","items":{"type":"object","description":"","properties":{"type":{"type":["string","null"],"description":"Move type."},"json":{"description":"Value as JSON when it can be decoded."},"bcs":{"type":["string","null"],"description":"Value as base64 BCS."}}}},"mutatedByRef":{"type":"array","description":"Values a command changed through a mutable reference.","items":{"type":"object"}}}}},"explain":{"type":["object","null"],"description":"Plain-English breakdown with steps and the net result per address."},"suggestedGasPrice":{"type":["integer","null"],"description":"Gas price the node suggests when shared objects are congested."},"asOf":{"type":"object","description":"Chain position the answer is true at.","properties":{"checkpoint":{"type":["integer","null"],"description":"Latest checkpoint."},"timestamp":{"type":["string","null"],"description":"Time of that checkpoint."},"lagMs":{"type":["integer","null"],"description":"Milliseconds behind now."}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"txBytes":{"type":"string","description":"The unsigned TransactionData as base64, the bytes a wallet is about to sign. When it has no gas payment, tide selects gas coins for the sender."},"sender":{"type":"string","description":"0x address that would sign. Required with transaction."},"transaction":{"type":["object","string"],"description":"A programmable transaction block as JSON, the output of Transaction.toJSON() in the Sui TypeScript SDK. Object inputs may be bare ids: tide resolves versions from the chain."},"gasBudget":{"type":"string","description":"Gas budget in MIST. Left out, tide measures the gas and adds a 25 percent margin."},"gasPrice":{"type":"string","description":"Gas price in MIST per unit. Left out, the reference gas price of the current epoch is used."}}}}}},"parameters":[{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/#simulateTransaction":{"post":{"operationId":"simulateTransaction","summary":"Check a transaction before signing: what it would do, what it would cost, or why it would fail.","description":"Runs a transaction against the chain's current state without signing or sending it, and explains what would happen: success or failure, balance changes per address with USD, objects created, changed or deleted, events, gas in MIST and SUI, values returned by each command and one plain sentence. Use it before signing, and as a read-only call: a Move call that returns a value shows it in commandResults. Send txBytes (what a wallet is about to sign) or sender plus a JSON programmable transaction block, with optional gasBudget and gasPrice. On failure it names the package, module and function, the abort code and the error constant when the module names its errors, and also explains out of gas, short balances and missing or stale objects in plain words. 10 credits. Pass one params object.\n\nCredits: 10.","tags":["Simulate"],"x-credits":10,"x-tide-name":"simulateTransaction","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","description":"The transaction explained.","properties":{"status":{"type":"string","description":"ok when the transaction would succeed, failed when it would abort or be rejected.","enum":["ok","failed"]},"description":{"type":"string","description":"One plain sentence of what the transaction would do, or why it would fail."},"error":{"type":["object","null"],"description":"Null when status is ok. Otherwise why it fails, in words and fields.","properties":{"kind":{"type":"string","description":"MOVE_ABORT, INSUFFICIENT_GAS, INSUFFICIENT_COIN_BALANCE, INSUFFICIENT_BALANCE, OBJECT_NOT_FOUND, OBJECT_VERSION_MISMATCH, NO_GAS_COIN, COMMAND_ARGUMENT_ERROR, MOVE_RUNTIME_ERROR and others."},"stage":{"type":"string","description":"pre_execution when the node refused the transaction before running it. Absent when it ran and failed."},"command":{"type":["integer","null"],"description":"Index of the failing command."},"sentence":{"type":"string","description":"What went wrong, in plain words."},"abort":{"type":["object","null"],"description":"For MOVE_ABORT only.","properties":{"package":{"type":"string","description":"Package id the abort happened in."},"module":{"type":"string","description":"Module name."},"function":{"type":["string","null"],"description":"Function name."},"target":{"type":"string","description":"package::module::function."},"code":{"type":"string","description":"Abort code. For modules that name their errors this is the error's code, otherwise the raw abort code."},"rawCode":{"type":"string","description":"The abort code as the Move VM reports it."},"errorName":{"type":["string","null"],"description":"Name of the error constant, when the module names its errors."},"line":{"type":["integer","null"],"description":"Source line of the abort, when the module names its errors."},"renderedValue":{"type":["string","null"],"description":"The error constant's value rendered as text, when it has one."}}},"message":{"type":["string","null"],"description":"The node's own message."}}},"digest":{"type":["string","null"],"description":"Digest the transaction would have with this gas selection. Null when it was rejected before running."},"sender":{"type":["string","null"],"description":"Address that signs."},"feePayer":{"type":["string","null"],"description":"Address that pays gas."},"epoch":{"type":["integer","null"],"description":"Current epoch."},"type":{"type":["string","null"],"description":"Transaction type, for example TRANSFER, SWAP or CONTRACT_CALL."},"source":{"type":["string","null"],"description":"Protocol slug in upper case, UNKNOWN when none is labelled."},"gas":{"type":["object","null"],"description":"Gas in MIST (1 SUI = 1,000,000,000 MIST) and SUI. Total is computation plus storage minus rebate.","properties":{"computationMist":{"type":"integer","description":"Computation cost in MIST."},"storageMist":{"type":"integer","description":"Storage cost in MIST."},"rebateMist":{"type":"integer","description":"Storage rebate in MIST."},"totalMist":{"type":"integer","description":"Net cost in MIST."},"totalSui":{"type":"number","description":"Net cost in SUI."},"computationSui":{"type":"number"},"storageSui":{"type":"number"},"rebateSui":{"type":"number"},"budgetMist":{"type":["integer","null"],"description":"Gas budget used."},"priceMist":{"type":["integer","null"],"description":"Gas price used."},"payer":{"type":["string","null"],"description":"Address whose coins pay the gas."}}},"balanceChanges":{"type":"array","description":"Balance change per address and coin, gas included.","items":{"type":"object","description":"","properties":{"owner":{"type":"string","description":"Address."},"coinType":{"type":"string","description":"Move coin type."},"symbol":{"type":["string","null"],"description":"Coin symbol."},"decimals":{"type":["integer","null"],"description":"Coin decimals."},"amountRaw":{"type":"string","description":"Signed integer in the smallest unit."},"amount":{"type":"number","description":"Signed amount in whole coins."},"usd":{"type":["object","null"],"description":"Value in US dollars with the time of the price. Null when the coin has no price.","properties":{"usd":{"type":"number"},"priceAsOf":{"type":"string","description":"Time the price is for."}}}}}},"objectChanges":{"type":"array","description":"Objects created, mutated, deleted, wrapped, unwrapped, published or transferred.","items":{"type":"object","description":"","properties":{"objectId":{"type":"string","description":"Object id."},"type":{"type":["string","null"],"description":"Move type."},"kind":{"type":"string","description":"created, mutated, deleted, wrapped, unwrapped, published or transferred."},"owner":{"type":["object","null"],"description":"Owner after the transaction: kind address, object, shared or immutable."},"version":{"type":["integer","null"],"description":"Version written."},"previousVersion":{"type":["integer","null"],"description":"Version before."}}}},"events":{"type":"array","description":"Move events the transaction would emit, in order.","items":{"type":"object","description":"","properties":{"index":{"type":"integer","description":"Position."},"type":{"type":["string","null"],"description":"Move event type."},"package":{"type":["string","null"],"description":"Package id."},"module":{"type":["string","null"],"description":"Module."},"sender":{"type":["string","null"],"description":"Address."},"json":{"description":"Decoded event body."}}}},"commands":{"type":"array","description":"The commands of the programmable transaction block.","items":{"type":"object","description":"","properties":{"index":{"type":"integer","description":"Command index."},"kind":{"type":"string","description":"MoveCall, TransferObjects, SplitCoins, MergeCoins, Publish, Upgrade or MakeMoveVec."},"target":{"type":["string","null"],"description":"package::module::function for MoveCall."},"typeArguments":{"type":"array","description":"Type arguments.","items":{"type":"string"}},"summary":{"type":["string","null"],"description":"One sentence."}}}},"commandResults":{"type":"array","description":"Values returned by commands that return something, for example a read-only Move call. Empty when no command returns a value.","items":{"type":"object","description":"","properties":{"index":{"type":"integer","description":"Command index."},"kind":{"type":["string","null"],"description":"Command kind."},"target":{"type":["string","null"],"description":"package::module::function."},"returnValues":{"type":"array","description":"Returned values.","items":{"type":"object","description":"","properties":{"type":{"type":["string","null"],"description":"Move type."},"json":{"description":"Value as JSON when it can be decoded."},"bcs":{"type":["string","null"],"description":"Value as base64 BCS."}}}},"mutatedByRef":{"type":"array","description":"Values a command changed through a mutable reference.","items":{"type":"object"}}}}},"explain":{"type":["object","null"],"description":"Plain-English breakdown with steps and the net result per address."},"suggestedGasPrice":{"type":["integer","null"],"description":"Gas price the node suggests when shared objects are congested."},"asOf":{"type":"object","description":"Chain position the answer is true at.","properties":{"checkpoint":{"type":["integer","null"],"description":"Latest checkpoint."},"timestamp":{"type":["string","null"],"description":"Time of that checkpoint."},"lagMs":{"type":["integer","null"],"description":"Milliseconds behind now."}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"x-jsonrpc-method":"simulateTransaction","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["jsonrpc","id","method"],"properties":{"jsonrpc":{"type":"string","enum":["2.0"]},"id":{"oneOf":[{"type":"string"},{"type":"integer"}]},"method":{"type":"string","enum":["simulateTransaction"]},"params":{"type":"object","description":"Send either txBytes, or sender with transaction. Nothing is signed and nothing is sent to the chain.","properties":{"txBytes":{"type":"string","description":"The unsigned TransactionData as base64, the bytes a wallet is about to sign. When it has no gas payment, tide selects gas coins for the sender."},"sender":{"type":"string","description":"0x address that would sign. Required with transaction."},"transaction":{"type":["object","string"],"description":"A programmable transaction block as JSON, the output of Transaction.toJSON() in the Sui TypeScript SDK. Object inputs may be bare ids: tide resolves versions from the chain."},"gasBudget":{"type":"string","description":"Gas budget in MIST. Left out, tide measures the gas and adds a 25 percent margin."},"gasPrice":{"type":"string","description":"Gas price in MIST per unit. Left out, the reference gas price of the current epoch is used."}}}}},"example":{"jsonrpc":"2.0","id":1,"method":"simulateTransaction","params":{"sender":"0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270","transaction":{"version":2,"sender":"0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270","expiration":null,"gasData":{"budget":null,"price":null,"owner":null,"payment":null},"inputs":[{"Pure":{"bytes":"QEIPAAAAAAA="}},{"Pure":{"bytes":"3ut6RmLuyfLz3vA/uTemY93aouIVuAeKKE0Ca3lGwnA="}}],"commands":[{"SplitCoins":{"coin":{"GasCoin":true},"amounts":[{"Input":0}]}},{"TransferObjects":{"objects":[{"NestedResult":[0,0]}],"address":{"Input":1}}}]}}}}}}}},"/v1/objects/{id}/at":{"get":{"operationId":"objects_at","summary":"An object as it was at a version, checkpoint or time, with its contents.","description":"Returns the object's state at one point: pass exactly one of version, checkpoint, time (unix seconds) or datetime (ISO, UTC). The answer says whether the object existed, was deleted or was wrapped then, and for an existing object gives the version, digest, type, owner and Move fields as JSON, plus the checkpoint and transaction that wrote that version. With checkpoint or time you get the version that was live at that point. Object contents are available from checkpoint 330677000; before that the call returns not_indexed, and /history still lists the versions. Answers for past points never change.\n\nCredits: 5.","tags":["Objects and fields"],"x-credits":5,"x-tide-name":"objects.at","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"objectId":{"type":"string"},"state":{"type":"string","enum":["exists","deleted","wrapped"],"description":"What the object was at that point."},"version":{"type":"integer"},"checkpoint":{"type":"integer","description":"Checkpoint of the transaction that wrote this version."},"timestamp":{"type":["integer","null"],"description":"Unix seconds of that checkpoint."},"digest":{"type":["string","null"],"description":"Object digest of this version."},"type":{"type":["string","null"]},"owner":{"type":["object","null"]},"previousTransaction":{"type":["string","null"],"description":"Digest of the transaction that wrote this version."},"storageRebateMist":{"type":["string","null"]},"hasPublicTransfer":{"type":["boolean","null"]},"fields":{"type":["object","null"],"description":"Move fields as JSON."},"asOf":{"type":"object","description":"The checkpoint the answer is true at."}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"id","in":"path","required":true,"description":"Object id (0x...).","schema":{"type":"string","description":"Object id (0x...)."}},{"name":"version","in":"query","required":false,"description":"Exact object version. Use /history to list versions.","schema":{"type":"integer","description":"Exact object version. Use /history to list versions."}},{"name":"checkpoint","in":"query","required":false,"description":"Checkpoint sequence number: the version live after that checkpoint.","schema":{"type":"integer","description":"Checkpoint sequence number: the version live after that checkpoint."}},{"name":"time","in":"query","required":false,"description":"Unix seconds: the version live at that time.","schema":{"type":"integer","description":"Unix seconds: the version live at that time."}},{"name":"datetime","in":"query","required":false,"description":"ISO 8601 date and time, UTC, for example 2026-10-01T12:00:00Z.","schema":{"type":"string","description":"ISO 8601 date and time, UTC, for example 2026-10-01T12:00:00Z."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/objects/{id}/dynamic-fields":{"get":{"operationId":"objects_dynamicFields","summary":"The dynamic fields of an object, with decoded names and values.","description":"Lists the dynamic fields and dynamic object fields stored under an object or under a table, bag or other UID, with the key and the value decoded as JSON. Each item has a kind (field or object), the key type and value, the value type, the field object id and, for dynamic object fields, the child object id (read it with /v1/objects/{id}). Up to 100 per page; pass the cursor to continue. Values are current, not historical.\n\nCredits: 2.","tags":["Objects and fields"],"x-credits":2,"x-tide-name":"objects.dynamicFields","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"objectId":{"type":"string"},"items":{"type":"array","description":"Fields: fieldId, kind (field | object), name { type, value }, valueType, value (null for object kind), childObjectId (object kind only)."},"cursor":{"type":["string","null"]},"asOf":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"id","in":"path","required":true,"description":"Parent object id, or the id of a table, bag or other UID (0x...).","schema":{"type":"string","description":"Parent object id, or the id of a table, bag or other UID (0x...)."}},{"name":"limit","in":"query","required":false,"description":"Fields per page, default 50.","schema":{"type":"integer","minimum":1,"maximum":100,"description":"Fields per page, default 50."}},{"name":"cursor","in":"query","required":false,"description":"Cursor from the previous page.","schema":{"type":"string","description":"Cursor from the previous page."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/objects/{id}/tree":{"get":{"operationId":"objects_tree","summary":"Everything an object holds: dynamic fields, tables, wrapped structs and kiosk items.","description":"Walks down from an object and returns its children as a tree: dynamic fields and dynamic object fields, tables and bags, and structs wrapped inside its contents (found by their UID). Depth defaults to 2 and goes up to 3. Each level shows at most 50 children, and a node says moreChildren with a cursor for /dynamic-fields when it was cut; total work is capped too and the top level sets truncated when anything was left out. For a kiosk the answer also lists its items with listing price in MIST and lock state. Values are current, not historical.\n\nCredits: 10.","tags":["Objects and fields"],"x-credits":10,"x-tide-name":"objects.tree","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"objectId":{"type":"string"},"type":{"type":["string","null"]},"version":{"type":"integer"},"depth":{"type":"integer"},"children":{"type":"array","description":"Nodes: kind (field, dynamicObjectField, table, wrapped), objectId, path (for nested structs), name, type, value, size, children, moreChildren, cursor."},"moreChildren":{"type":"boolean"},"cursor":{"type":["string","null"],"description":"Cursor for /dynamic-fields to continue the top level."},"truncated":{"type":"boolean","description":"True when any level was cut by the caps."},"kiosk":{"type":["object","null"],"description":"For kiosks: items with listing price and lock state."},"asOf":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"id","in":"path","required":true,"description":"Object id (0x...).","schema":{"type":"string","description":"Object id (0x...)."}},{"name":"depth","in":"query","required":false,"description":"Levels to walk down, default 2.","schema":{"type":"integer","minimum":1,"maximum":3,"description":"Levels to walk down, default 2."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/packages/{id}/abi":{"get":{"operationId":"packages_abi","summary":"The full Move interface of a package: modules, functions, structs, enums and events.","description":"Returns every module of one package id with its functions (visibility, entry flag, type parameters with constraints, parameters and returns as readable Move types such as &mut 0x2::coin::Coin<T0>), its structs and enums (abilities, fields with types) and the events the package emits. TxContext parameters are dropped because the chain adds them. Events are the structs the module bytecode passes to event::emit; if the bytecode listing is unavailable they are the event-like structs (copy and drop) and eventsSource says so. A package id is immutable, so the answer never changes; use packages.versions to see other versions.\n\nCredits: 2.","tags":["Packages"],"x-credits":2,"x-tide-name":"packages.abi","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"packageId":{"type":"string"},"originalId":{"type":"string"},"version":{"type":"integer"},"modules":{"type":"array","description":"Modules with functions and structs."},"events":{"type":"array","description":"Emitted event structs."},"eventsSource":{"type":"string"},"counts":{"type":"object"},"asOf":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"id","in":"path","required":true,"description":"Package id (0x...), one specific version.","schema":{"type":"string","description":"Package id (0x...), one specific version."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/packages/{id}/versions":{"get":{"operationId":"packages_versions","summary":"Every version of a package with publisher, time and the modules each upgrade added or removed.","description":"Lists each version of the package family that the given id belongs to, with the version's package id, publish or upgrade digest, checkpoint, time (unix seconds), the address that sent it, its modules and the modules added or removed against the previous version. Any version id works as input. Version 1 is the publish, later versions are upgrades. Time, sender and digest come from the index and are null for a version it has not seen.\n\nCredits: 2.","tags":["Packages"],"x-credits":2,"x-tide-name":"packages.versions","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"originalId":{"type":"string","description":"Id of version 1."},"items":{"type":"array","description":"Versions in the requested order."},"cursor":{"type":["string","null"]},"asOf":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"id","in":"path","required":true,"description":"Package id (0x...), any version of the family.","schema":{"type":"string","description":"Package id (0x...), any version of the family."}},{"name":"order","in":"query","required":false,"description":"Version order. Default desc (newest first).","schema":{"type":"string","enum":["asc","desc"],"description":"Version order. Default desc (newest first)."}},{"name":"limit","in":"query","required":false,"description":"Versions per page. Default 50.","schema":{"type":"integer","minimum":1,"maximum":200,"description":"Versions per page. Default 50."}},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor from the previous page.","schema":{"type":"string","description":"Opaque cursor from the previous page."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/packages/{id}/usage":{"get":{"operationId":"packages_usage","summary":"How a package is used: calls per day, per function, unique senders, failure rate and events.","description":"Counts the transactions that called any version of the package in the last 24h (hourly buckets), 7d or 30d (UTC days, the current day included). Total calls, failures and the series are exact. Calls per function (top 20), unique senders and events per type are exact for quiet packages and scaled from a uniform sample for busy ones; the sampled field says which. Unique senders is a floor when sampled. Cached for 5 minutes.\n\nCredits: 10.","tags":["Packages"],"x-credits":10,"x-tide-name":"packages.usage","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"calls":{"type":"integer","description":"Transactions that called the package."},"failureRate":{"type":"number"},"series":{"type":"array","description":"Calls and failures per hour or UTC day."},"functions":{"type":"array","description":"Top 20 functions by call count."},"uniqueSenders":{"type":"integer"},"events":{"type":"object"},"sampled":{"type":"boolean"},"asOf":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"id","in":"path","required":true,"description":"Package id (0x...), any version. All versions of the family are counted.","schema":{"type":"string","description":"Package id (0x...), any version. All versions of the family are counted."}},{"name":"window","in":"query","required":false,"description":"Window. Default 24h.","schema":{"type":"string","enum":["24h","7d","30d"],"description":"Window. Default 24h."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/packages/{id}/callers":{"get":{"operationId":"packages_callers","summary":"The top senders that call a package, with call counts, last call time and success rate.","description":"Returns the addresses that sent the most transactions calling any version of the package in the window, with the call count, share of all calls, last call time (unix seconds) and success rate. For quiet packages the answer is exact. For busy ones it comes from a uniform sample of transactions: counts are scaled up, last call is the latest sampled one, and the sampled field says so. Cached for 5 minutes.\n\nCredits: 10.","tags":["Packages"],"x-credits":10,"x-tide-name":"packages.callers","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array"},"cursor":{"type":["string","null"]},"sampled":{"type":"boolean"},"asOf":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"id","in":"path","required":true,"description":"Package id (0x...), any version. All versions of the family are counted.","schema":{"type":"string","description":"Package id (0x...), any version. All versions of the family are counted."}},{"name":"window","in":"query","required":false,"description":"Window. Default 24h.","schema":{"type":"string","enum":["24h","7d","30d"],"description":"Window. Default 24h."}},{"name":"limit","in":"query","required":false,"description":"Senders to return. Default 20.","schema":{"type":"integer","minimum":1,"maximum":100,"description":"Senders to return. Default 20."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/packages/{id}/functions/{module}/{function}/call":{"get":{"operationId":"packages_howToCall","summary":"How to call one Move function from a PTB: parameters explained, a TypeScript snippet and a JSON PTB.","description":"Explains each parameter of a Move function: a plain value or an object, a reference or by value, a well-known shared object such as the Clock at 0x6, and which type arguments to fill. TxContext is left out because the chain adds it. Returns a ready TypeScript snippet using Transaction.moveCall from @mysten/sui, a JSON PTB skeleton in the SDK v2 shape with placeholders, and whether a PTB can call the function at all (public or entry) with the reason if not.\n\nCredits: 1.","tags":["Packages"],"x-credits":1,"x-tide-name":"packages.howToCall","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"target":{"type":"string","description":"package::module::function as used in moveCall."},"callableFromPtb":{"type":"boolean"},"params":{"type":"array","description":"Each parameter with kind, access, a TypeScript argument and an explanation."},"typeParams":{"type":"array"},"returns":{"type":"array"},"typescript":{"type":"string","description":"A ready Transaction snippet."},"ptb":{"type":["object","null"],"description":"JSON PTB skeleton, SDK v2 shape."},"asOf":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"id","in":"path","required":true,"description":"Package id (0x...), the version whose function you want to call.","schema":{"type":"string","description":"Package id (0x...), the version whose function you want to call."}},{"name":"module","in":"path","required":true,"description":"Module name, for example coin.","schema":{"type":"string","description":"Module name, for example coin."}},{"name":"function","in":"path","required":true,"description":"Function name, for example split.","schema":{"type":"string","description":"Function name, for example split."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/wallet/{wallet}/stakes":{"get":{"operationId":"wallet_stakes","summary":"A wallet's staked SUI: validator, status and rewards so far.","description":"Returns the StakedSui and FungibleStakedSui objects the wallet owns, largest principal first, 100 per page with a cursor. Each stake has the object id, the validator (address, name, image), the principal in MIST, the activation epoch and a status: pending until its activation epoch starts, then active. Rewards so far are the pool tokens bought at the activation epoch rate valued at the current epoch rate, minus the principal; they are an estimate until you withdraw. Totals come in MIST, SUI and USD with the price time. Stakes in a pool whose validator left the set show validator null and no rewards. The wallet can be an address, name.sui or @name.\n\nCredits: 3.","tags":["Staking"],"x-credits":3,"x-tide-name":"wallet.stakes","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"wallet":{"type":"string"},"epoch":{"type":"integer","description":"The current epoch the values are computed at."},"stakes":{"type":"array","description":"StakedSui: objectId, validator, status, activationEpoch, principalMist, principal, rewardsMist, rewards, valueMist, value."},"fungibleStakes":{"type":"array","description":"FungibleStakedSui: objectId, validator, poolTokensMist, valueMist, value."},"totals":{"type":"object","description":"principalMist, rewardsMist, stakedValueMist, fungibleValueMist, totalValueMist, in SUI and with usd { usd, priceAsOf }."},"stakeCount":{"type":"integer","description":"StakedSui objects the wallet holds in all."},"cursor":{"type":["string","null"],"description":"Pass it back to get the next page of stakes. Null on the last page."},"truncated":{"type":"boolean","description":"True only for a wallet with more than 20,000 stake objects; totals then cover the first 20,000."},"asOf":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"wallet","in":"path","required":true,"description":"Wallet address (0x...), name.sui or @name.","schema":{"type":"string","description":"Wallet address (0x...), name.sui or @name."}},{"name":"limit","in":"query","required":false,"description":"Stakes per page, default 100. Totals always cover every stake the wallet holds.","schema":{"type":"integer","minimum":1,"maximum":500,"description":"Stakes per page, default 100. Totals always cover every stake the wallet holds."}},{"name":"cursor","in":"query","required":false,"description":"cursor from the previous page, to get the next one.","schema":{"type":"string","description":"cursor from the previous page, to get the next one."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/validators/{address}/history":{"get":{"operationId":"validators_history","summary":"One validator across epochs: stake, voting power, commission, gas price, rewards, APY.","description":"Returns one row per epoch, newest first, for a validator address. Each row has the stake and voting power at that epoch, commission in basis points, the gas price it quoted, the staking rewards it earned in MIST, its name and the APY for the epoch. APY is the pool exchange rate growth over the epoch, annualised with the real length of that epoch. Page back with cursor, which is an epoch number. An address that was never a validator returns not_found.\n\nCredits: 2.","tags":["Staking"],"x-credits":2,"x-tide-name":"validators.history","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string"},"items":{"type":"array","description":"epoch, name, stakeMist, votingPowerPct, commissionBps, gasPrice, poolRewardMist, storageFundRewardMist, suiPerPoolToken, apyPct, epochHours."},"cursor":{"type":["string","null"]},"asOf":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"address","in":"path","required":true,"description":"The validator's Sui address (0x...).","schema":{"type":"string","description":"The validator's Sui address (0x...)."}},{"name":"limit","in":"query","required":false,"description":"Epochs per page, default 30.","schema":{"type":"integer","minimum":1,"maximum":100,"description":"Epochs per page, default 30."}},{"name":"cursor","in":"query","required":false,"description":"Cursor from the previous page: return epochs older than this epoch number.","schema":{"type":"string","description":"Cursor from the previous page: return epochs older than this epoch number."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/books":{"get":{"operationId":"books_list","summary":"Every DeepBook v3 pool with its coins, book parameters, best prices and 24 hour activity.","description":"Returns all DeepBook v3 order book pools on Sui. Each pool has its object id, base and quote coin (type, symbol, decimals), tick size in quote per base, lot size and minimum size in base units, taker and maker fee in basis points, best bid, best ask and mid price, and 24 hour volume and trade count from fill events. Prices and sizes are decimal numbers, not raw integers. Pools with an empty side have a null mid price. Volume fields are null if the history index is busy. Cached for 45 seconds.\n\nCredits: 2.","tags":["Order books"],"x-credits":2,"x-tide-name":"books.list","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","description":"One entry per pool, most active first by 24 hour quote volume."},"cursor":{"type":["string","null"],"description":"Always null: the whole list is returned."},"asOf":{"type":"object","description":"Chain position the order book reads are true at."}}},"example":{"items":[{"poolId":"0xe05dafb5133bcffb8d59f4e12465dc0e9faeaa05e3e342a08fe135800e3e4407","base":{"symbol":"SUI"},"quote":{"symbol":"USDC"}}],"cursor":null}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/books/{pool}/depth":{"get":{"operationId":"books_depth","summary":"Live bids and asks of one DeepBook pool, with mid price and spread.","description":"Reads the current order book of a DeepBook v3 pool straight from the chain with a read-only call, no signature needed. Returns up to levels price levels on each side (default 20, at most 100): bids from the highest price down and asks from the lowest up, each with the decimal price (quote per base) and the total size in base coin. Also returns the best bid, best ask, mid price, spread and spread in basis points. Cached for 1 second.\n\nCredits: 3.","tags":["Order books"],"x-credits":3,"x-tide-name":"books.depth","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"poolId":{"type":"string"},"base":{"type":"object","description":"Base coin: coinType, symbol, decimals."},"quote":{"type":"object","description":"Quote coin: coinType, symbol, decimals."},"bids":{"type":"array","description":"Highest price first. Each { price, size, total }: price in quote per base, size in base coin, total is the running size."},"asks":{"type":"array","description":"Lowest price first, same shape."},"bestBid":{"type":["number","null"]},"bestAsk":{"type":["number","null"]},"mid":{"type":["number","null"],"description":"Mean of best bid and best ask, null when a side is empty."},"spread":{"type":["number","null"],"description":"Best ask minus best bid, in quote per base."},"spreadBps":{"type":["number","null"],"description":"Spread as basis points of the mid price."},"asOf":{"type":"object"}}},"example":{"poolId":"0xe05dafb5133bcffb8d59f4e12465dc0e9faeaa05e3e342a08fe135800e3e4407","bids":[{"price":0.8911,"size":1200,"total":1200}],"asks":[]}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"pool","in":"path","required":true,"description":"Pool object id (0x...). List them with books.list.","schema":{"type":"string","description":"Pool object id (0x...). List them with books.list."}},{"name":"levels","in":"query","required":false,"description":"Price levels per side, default 20.","schema":{"type":"integer","minimum":1,"maximum":100,"description":"Price levels per side, default 20."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/books/{pool}/trades":{"get":{"operationId":"books_trades","summary":"Recent fills of one DeepBook pool, newest first.","description":"Returns fills of a DeepBook v3 pool from its OrderFilled events, newest first, 50 per page by default and at most 200. Each fill has the decimal price (quote per base), base size, quote size, which side the taker was on (buy or sell), the maker and taker balance manager and order id, the time and the transaction digest. Pass the cursor of the previous page to go further back. A page can hold fewer rows than limit with a cursor still set when the pool was quiet in the part of history that was searched: keep following the cursor until it is null.\n\nCredits: 2.","tags":["Order books"],"x-credits":2,"x-tide-name":"books.trades","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"poolId":{"type":"string"},"items":{"type":"array","description":"Fills, newest first: price, baseSize, quoteSize, takerSide, maker, taker, time, digest, checkpoint."},"cursor":{"type":["string","null"],"description":"Pass as cursor for the next, older page. Null at the end of history."},"asOf":{"type":"object"}}},"example":{"poolId":"0xe05dafb5133bcffb8d59f4e12465dc0e9faeaa05e3e342a08fe135800e3e4407","items":[],"cursor":null}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"pool","in":"path","required":true,"description":"Pool object id (0x...). List them with books.list.","schema":{"type":"string","description":"Pool object id (0x...). List them with books.list."}},{"name":"limit","in":"query","required":false,"description":"Fills per page, default 50.","schema":{"type":"integer","minimum":1,"maximum":200,"description":"Fills per page, default 50."}},{"name":"cursor","in":"query","required":false,"description":"Cursor from the previous page.","schema":{"type":"string","description":"Cursor from the previous page."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/wallet/{wallet}/orders":{"get":{"operationId":"wallet_orders","summary":"A wallet's DeepBook balance managers with their balances, open orders and recent fills.","description":"Finds the DeepBook v3 balance managers owned by the wallet, then returns for each one the coins it holds, its open orders across all pools and the fills where it was maker or taker. Open orders carry decimal price, quantity, filled and remaining size in base coin, side (bid or ask), status and expiry time. Fills are newest first, 20 per page by default, with a cursor for older ones. Balances are the free balances inside the manager, not funds locked in resting orders. Accepts an address or a name.sui.\n\nCredits: 5.","tags":["Order books"],"x-credits":5,"x-tide-name":"wallet.orders","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"wallet":{"type":"string"},"managers":{"type":"array","description":"Each { id, balances: [{ coinType, symbol, decimals, raw, amount }], openOrders: [{ poolId, base, quote, orderId, clientOrderId, side, price, quantity, filled, remaining, status, expiresAt }] }."},"fills":{"type":"array","description":"Fills as maker or taker, newest first: pool, role, side, price, baseSize, quoteSize, time, digest."},"cursor":{"type":["string","null"],"description":"Pass as cursor for older fills. Null at the end."},"asOf":{"type":"object"}}},"example":{"wallet":"0xb5c5d547340849ac4f12c43f91f8321d0c5e76f0b25442fffae79d4e119fd928","managers":[],"fills":[],"cursor":null}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"wallet","in":"path","required":true,"description":"Owner address (0x...), a name.sui or an @name.","schema":{"type":"string","description":"Owner address (0x...), a name.sui or an @name."}},{"name":"limit","in":"query","required":false,"description":"Fills per page, default 20.","schema":{"type":"integer","minimum":1,"maximum":100,"description":"Fills per page, default 20."}},{"name":"cursor","in":"query","required":false,"description":"Fills cursor from the previous page.","schema":{"type":"string","description":"Fills cursor from the previous page."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/kiosk/policies/{type}":{"get":{"operationId":"kiosk_policies","summary":"Transfer policies and rules (royalty, kiosk lock, floor price) for an NFT type.","description":"Returns the TransferPolicy objects that govern sales of an NFT type, with the rules each one enforces and the SUI balance it holds. Decoded rules are royalty (basis points and minimum in MIST), kiosk lock, personal kiosk and floor price. Rules from other packages are listed by their Move type with the raw config. Use it before listing or buying an NFT to know the fees and conditions. A type with no policy returns not_found.\n\nCredits: 2.","tags":["Assets"],"x-credits":2,"x-tide-name":"kiosk.policies","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"The NFT type asked for, with long addresses."},"policies":{"type":"array","items":{"type":"object","properties":{"policyId":{"type":"string","description":"TransferPolicy object id."},"balanceMist":{"type":"string","description":"Fees the policy holds, in MIST."},"royaltyBps":{"type":["integer","null"],"description":"Royalty in basis points when the policy has a royalty rule."},"rules":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["royalty","kiosk_lock","personal_kiosk","floor_price","unknown"],"description":"Rule family. unknown means a rule package tide does not decode; its type and raw config are returned."},"ruleType":{"type":"string","description":"Move type of the rule, like 0x...::royalty_rule::Rule."},"config":{"type":["object","null"],"description":"royalty: amountBp, royaltyPct, minAmountMist. floor_price: minPriceMist. unknown: the raw config. Lock and personal kiosk rules have none."}}}}}}},"asOf":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"type","in":"path","required":true,"description":"Full Move type of the NFT, like 0x...::module::Name. URL-encode it in the path.","schema":{"type":"string","description":"Full Move type of the NFT, like 0x...::module::Name. URL-encode it in the path."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/walrus/blobs/{blobId}":{"get":{"operationId":"walrus_blob","summary":"One Walrus blob: size, epochs, expiry, deletable flag, owner and status.","description":"Looks up a Walrus blob by its blob id and returns what is stored on Sui about it: size, encoding, the registered and certified epochs, the storage start and end epoch, an estimated end date, whether it is deletable, the owner and a status. The blob id can be the base64url form Walrus uses, its u256 decimal, or the Blob object id. If the same blob id was registered more than once, the newest registration is returned and the other object ids are listed in otherObjects. Status is deleted when the Blob object is gone and the index saw a delete.\n\nCredits: 2.","tags":["Walrus"],"x-credits":2,"x-tide-name":"walrus.blob","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"blobId":{"type":"string","description":"The blob id in the form Walrus uses: base64url, 43 characters, no padding."},"blobIdU256":{"type":"string","description":"The same id as the u256 decimal stored on chain."},"objectId":{"type":"string","description":"The Blob object id on Sui."},"version":{"type":["integer","null"],"description":"Object version now."},"status":{"type":"string","enum":["registered","certified","expired","deleted"],"description":"registered: paid for but not yet certified by the storage nodes. certified: stored and served. expired: the storage period has ended. deleted: the owner deleted it."},"sizeBytes":{"type":"string","description":"Unencoded size of the blob in bytes."},"encoding":{"type":"string","description":"Erasure coding used: RS2 or RedStuffRaptorQ."},"registeredEpoch":{"type":"integer","description":"Walrus epoch the blob was registered in."},"certifiedEpoch":{"type":["integer","null"],"description":"Walrus epoch the blob was certified in, null while only registered."},"storageStartEpoch":{"type":"integer","description":"First epoch of the paid storage period."},"storageEndEpoch":{"type":"integer","description":"Epoch the storage period ends at (exclusive)."},"storageSizeBytes":{"type":"string","description":"Encoded storage reserved on the network, in bytes."},"expiresAt":{"type":["string","null"],"description":"Estimated end of storage, ISO time, from the epoch length (14 days)."},"expiryIsEstimate":{"type":"boolean","description":"Always true: the end date is computed from epoch numbers."},"deletable":{"type":"boolean","description":"True when the owner can delete the blob and reclaim the storage."},"owner":{"type":["object","null"],"description":"Owner of the Blob object: { kind, address }."},"currentEpoch":{"type":"integer","description":"The Walrus epoch now."},"otherObjects":{"type":"array","items":{"type":"string"},"description":"Other Blob objects registered for the same blob id."},"asOf":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"blobId","in":"path","required":true,"description":"Blob id as base64url (43 characters) or u256 decimal, or the 0x Blob object id.","schema":{"type":"string","description":"Blob id as base64url (43 characters) or u256 decimal, or the 0x Blob object id."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/wallet/{wallet}/walrus-blobs":{"get":{"operationId":"walrus_blobs","summary":"Walrus blobs a wallet owns, with epochs, size and expiry.","description":"Lists the Walrus Blob objects owned by an address, with the same fields as the single blob lookup. The wallet can be a 0x address, a name.sui or an @name. Results come from the chain as it is now, in the order the chain returns them. Page with cursor; each page is up to limit blobs. Blobs held inside a kiosk or another object are not listed.\n\nCredits: 2.","tags":["Walrus"],"x-credits":2,"x-tide-name":"walrus.blobs","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"blobId":{"type":"string","description":"The blob id in the form Walrus uses: base64url, 43 characters, no padding."},"blobIdU256":{"type":"string","description":"The same id as the u256 decimal stored on chain."},"objectId":{"type":"string","description":"The Blob object id on Sui."},"version":{"type":["integer","null"],"description":"Object version now."},"status":{"type":"string","enum":["registered","certified","expired","deleted"],"description":"registered: paid for but not yet certified by the storage nodes. certified: stored and served. expired: the storage period has ended. deleted: the owner deleted it."},"sizeBytes":{"type":"string","description":"Unencoded size of the blob in bytes."},"encoding":{"type":"string","description":"Erasure coding used: RS2 or RedStuffRaptorQ."},"registeredEpoch":{"type":"integer","description":"Walrus epoch the blob was registered in."},"certifiedEpoch":{"type":["integer","null"],"description":"Walrus epoch the blob was certified in, null while only registered."},"storageStartEpoch":{"type":"integer","description":"First epoch of the paid storage period."},"storageEndEpoch":{"type":"integer","description":"Epoch the storage period ends at (exclusive)."},"storageSizeBytes":{"type":"string","description":"Encoded storage reserved on the network, in bytes."},"expiresAt":{"type":["string","null"],"description":"Estimated end of storage, ISO time, from the epoch length (14 days)."},"expiryIsEstimate":{"type":"boolean","description":"Always true: the end date is computed from epoch numbers."},"deletable":{"type":"boolean","description":"True when the owner can delete the blob and reclaim the storage."},"owner":{"type":["object","null"],"description":"Owner of the Blob object: { kind, address }."}}}},"currentEpoch":{"type":"integer","description":"The Walrus epoch now."},"cursor":{"type":["string","null"],"description":"Pass as cursor for the next page, null at the end."},"asOf":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"wallet","in":"path","required":true,"description":"Owner: a 0x address, a name.sui or an @name.","schema":{"type":"string","description":"Owner: a 0x address, a name.sui or an @name."}},{"name":"cursor","in":"query","required":false,"description":"Cursor from the previous page.","schema":{"type":"string","description":"Cursor from the previous page."}},{"name":"limit","in":"query","required":false,"description":"Blobs per page, 1 to 200.","schema":{"type":"integer","minimum":1,"maximum":200,"default":50,"description":"Blobs per page, 1 to 200."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/address/{address}/kind":{"get":{"operationId":"address_kind","summary":"What a Sui address is: key scheme, zkLogin, multisig, passkey, object or package.","description":"Answers what is behind an address. Key addresses come back as ed25519, secp256k1, secp256r1, passkey, zklogin (issuer, address seed, key id) or multisig (every member with scheme, public key, address and weight, plus the threshold). Object ids come back as object or package, and an address that never signed comes back as unknown. The kind is read from the signature of the latest transaction the address signed, so details need at least one signed transaction. The result also lists, for each regulated coin the address holds, whether the address is on the deny list this epoch and next epoch. Accepts a 0x address, a name.sui or an @name.\n\nCredits: 2.","tags":["Wallet"],"x-credits":2,"x-tide-name":"address.kind","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string","description":"The padded 0x address that was checked."},"kind":{"type":"string","description":"ed25519, secp256k1, secp256r1, passkey, zklogin, multisig, object, package, unknown (never signed) or account (it signs, but the scheme is not recoverable from loaded history)."},"publicKey":{"type":["string","null"],"description":"Base64 public key of a single key address, without the scheme flag byte."},"zklogin":{"type":["object","null"],"description":"issuer, addressSeed (decimal), keyId (JWT kid), jwtAlg, maxEpoch of the proof, legacyAddress."},"multisig":{"type":["object","null"],"description":"threshold, totalWeight and members: [{ scheme, publicKey, address, weight, zklogin? }]."},"object":{"type":["object","null"],"description":"For object and package: objectId, version, type and owner kind."},"detailsAvailable":{"type":"boolean","description":"False when the scheme or key could not be recovered."},"note":{"type":["string","null"],"description":"Why details are missing, when they are."},"basis":{"type":["object","null"],"description":"The transaction the kind was read from: digest, checkpoint, timestamp."},"denyList":{"type":"object","description":"checked, epoch, denied (any coin, now or next epoch) and regulatedCoins: [{ coinType, symbol, deniedNow, deniedNextEpoch }]."},"asOf":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"address","in":"path","required":true,"description":"Address or object id (0x...), a name.sui or an @name.","schema":{"type":"string","description":"Address or object id (0x...), a name.sui or an @name."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/wallet/{wallet}/bridge":{"get":{"operationId":"bridge_transfers","summary":"Sui Bridge transfers of a wallet, out of Sui and into Sui, newest first.","description":"Lists the Sui Bridge transfers a wallet made out of Sui (deposits, with the Ethereum address that receives them) and the transfers that were claimed into it (with the Ethereum sender when the claim shows it). Each item has the direction, coin, amount in whole coins and raw units, USD at the time of the transfer, the other chain, the other side's address, the status (deposited, approved by the validator committee, or claimed), the digest and the time. Transfers out of Sui are listed with status deposited or approved. Claims of wrapped SUI that came back from Ethereum are listed only when the claim names the coin. Accepts a 0x address, a name.sui or an @name.\n\nCredits: 3.","tags":["History"],"x-credits":3,"x-tide-name":"bridge.transfers","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","description":"Transfers: direction (out or in), status, token { coinType, symbol, decimals }, amount, amountRaw, usd { usd, priceAsOf }, chain { id, name }, counterparty (hex address on the other chain), seq, digest, checkpoint, timestamp."},"cursor":{"type":["string","null"],"description":"Pass as cursor for the next page. Null at the end."},"asOf":{"type":"object"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"wallet","in":"path","required":true,"description":"Wallet address (0x...), name.sui or @name.","schema":{"type":"string","description":"Wallet address (0x...), name.sui or @name."}},{"name":"limit","in":"query","required":false,"description":"Items per page, 1 to 100. Default 25.","schema":{"type":"integer","description":"Items per page, 1 to 100. Default 25."}},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor from the previous page.","schema":{"type":"string","description":"Opaque cursor from the previous page."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/sql/execute":{"post":{"operationId":"sql_execute","summary":"Run a SQL query over all of Sui","description":"Starts a run of one SQL SELECT over the public tables (every transaction, event, object version and balance change since genesis, about a second behind the chain) and returns an execution_id. Poll /v1/execution/{execution_id}/status, then read /v1/execution/{execution_id}/results. Credits are charged when the run ends: 20 plus 1 per 50 MB read; a reused result (max_age) costs 2. Without a key, runs come out of the small daily keyless allowance.\n\nCredits: varies.","tags":["SQL"],"x-credits":"varies","x-tide-name":"sql.execute","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"dialect":{"type":"string","enum":["tide","trino"],"description":"tide (default), or trino for Trino SQL written against the standard Sui table names; it is translated before it runs."},"sql":{"type":"string","description":"One SQL SELECT over the public tables. Use {{name}} for parameters. 0x ids (64 hex) can be compared directly: WHERE sender = 0x1a2b..."},"params":{"type":"object","description":"Values for {{name}} parameters: { name: value } or { name: { type: text | number | date | list, value } }."},"max_age":{"type":"integer","description":"Reuse a finished result of the same SQL and params up to this many seconds old (costs 2 credits). Default 0, always run."},"wait_ms":{"type":"integer","description":"Wait up to this many milliseconds (max 30000) for the run to finish and return its status in the same response."}},"required":["sql"]}}}},"parameters":[{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/execution/{execution_id}/status":{"get":{"operationId":"sql_status","summary":"Status of a SQL run","description":"State of a run (QUERY_STATE_PENDING, QUERY_STATE_EXECUTING, QUERY_STATE_COMPLETED, QUERY_STATE_FAILED, QUERY_STATE_CANCELLED), its timings, result size, rows and bytes read, credits, and as_of: the checkpoint the data was at when it ran. A failed run has error.message with metadata.line and metadata.column. Pass wait_ms (max 30000) to wait for the run to finish.\n\nCredits: 0.","tags":["SQL"],"x-credits":0,"x-tide-name":"sql.status","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"execution_id","in":"path","required":true,"description":"execution_id","schema":{"type":"string"}},{"name":"wait_ms","in":"query","required":false,"schema":{"type":"integer"}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/execution/{execution_id}/results":{"get":{"operationId":"sql_results","summary":"Results of a SQL run","description":"Rows of a finished run with result.metadata (column names and types, row count, timings) and as_of. Page with limit (default 1000, max 100000) and offset; next_uri points at the next page. Pick columns with columns=a,b and sort with sort_by=\"col desc\". rows=array returns each row as an array in column order. Before the run finishes this returns its status with result null.\n\nCredits: 0.","tags":["SQL"],"x-credits":0,"x-tide-name":"sql.results","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"execution_id","in":"path","required":true,"description":"execution_id","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer"}},{"name":"columns","in":"query","required":false,"schema":{"type":"string"}},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string"}},{"name":"rows","in":"query","required":false,"schema":{"type":"string","enum":["object","array"]}},{"name":"wait_ms","in":"query","required":false,"schema":{"type":"integer"}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/execution/{execution_id}/results/csv":{"get":{"operationId":"sql_results_csv","summary":"Results of a SQL run as CSV","description":"The full result of a finished run as CSV with a header row. Ids print as 0x hex.\n\nCredits: 0.","tags":["SQL"],"x-credits":0,"x-tide-name":"sql.results_csv","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"execution_id","in":"path","required":true,"description":"execution_id","schema":{"type":"string"}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/execution/{execution_id}/cancel":{"post":{"operationId":"sql_cancel","summary":"Cancel a SQL run","description":"Stops a pending or running run started by the same key, session or IP. A cancelled run costs nothing.\n\nCredits: 0.","tags":["SQL"],"x-credits":0,"x-tide-name":"sql.cancel","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"parameters":[{"name":"execution_id","in":"path","required":true,"description":"execution_id","schema":{"type":"string"}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/sql/schema":{"get":{"operationId":"sql_schema","summary":"The public SQL tables and columns","description":"Every public table with its columns and types, grouped by namespace (sui, dex, prices, nft, lending, launchpad, labels, suins, validators, staking, walrus and more). The same list the editor's schema browser shows.\n\nCredits: 0.","tags":["SQL"],"x-credits":0,"x-tide-name":"sql.schema","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"security":[{},{"ApiKeyQuery":[]},{"ApiKeyHeader":[]}],"parameters":[{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/sql/translate":{"post":{"operationId":"sql_translate","summary":"Trino SQL to tide SQL","description":"Translates a query written in the Trino dialect for the standard Sui table names into the tide SQL that runs here, without running it. dbt/jinja wrappers are stripped, 0x ids are padded to 32 bytes and {{name}} parameters are kept. Errors come back as invalid_params with line and column when known.\n\nCredits: 0.","tags":["SQL"],"x-credits":0,"x-tide-name":"sql.translate","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"security":[{},{"ApiKeyQuery":[]},{"ApiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"sql":{"type":"string","description":"One SELECT in Trino SQL."}},"required":["sql"]}}}},"parameters":[{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/sql/limits":{"get":{"operationId":"sql_limits","summary":"Your SQL limits","description":"The caller's plan limits for SQL: runs at once, queue depth, time limit, bytes and rows a run may read, result rows, how long results are kept, and the engine's current load.\n\nCredits: 0.","tags":["SQL"],"x-credits":0,"x-tide-name":"sql.limits","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/sql/pulse":{"get":{"operationId":"sql_pulse","summary":"Live numbers for Sui","description":"The latest indexed checkpoint and how far behind the chain it is, transactions per second now and the 1 hour peak, total transactions since genesis, active wallets and transactions today, SUI staked, the storage fund, live Walrus blobs and DEX volume. Refreshed every second (fast numbers) and every minute (the rest). Free, no key.\n\nCredits: 0.","tags":["SQL"],"x-credits":0,"x-tide-name":"sql.pulse","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"security":[{},{"ApiKeyQuery":[]},{"ApiKeyHeader":[]}],"parameters":[{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/query":{"post":{"operationId":"query_create","summary":"Save a query","description":"Saves a SQL query with its parameters and visualizations under your account and returns its query_id. Queries are public unless is_private is true. Needs a login or an API key.\n\nCredits: 0.","tags":["SQL"],"x-credits":0,"x-tide-name":"query.create","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"query_sql":{"type":"string","description":"The SQL (also accepted as sql)."},"dialect":{"type":"string","enum":["tide","trino"]},"query_parameters":{"type":"array","description":"[{ key, type: text | number | date | list, value, options? }]"},"visualizations":{"type":"array","description":"[{ id, type, name, config }]"},"tags":{"type":"array"},"is_private":{"type":"boolean"}}}}}},"parameters":[{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/query/{query_id}":{"get":{"operationId":"query_get","summary":"A saved query","description":"A saved query: name, description, owner, SQL, parameters with defaults, visualizations, stars, forks and its latest execution_id. Private queries are visible to their owner only.\n\nCredits: 0.","tags":["SQL"],"x-credits":0,"x-tide-name":"query.get","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"query_id","in":"path","required":true,"description":"query_id","schema":{"type":"integer"}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]},"put":{"operationId":"query_update","summary":"Update a saved query","description":"Changes any of name, description, query_sql, dialect, query_parameters, visualizations, tags, is_private or is_archived. Owner only. PUT, or POST to /v1/query/{query_id}/update.\n\nCredits: 0.","tags":["SQL"],"x-credits":0,"x-tide-name":"query.update","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"query_sql":{"type":"string","description":"The SQL (also accepted as sql)."},"dialect":{"type":"string","enum":["tide","trino"]},"query_parameters":{"type":"array","description":"[{ key, type: text | number | date | list, value, options? }]"},"visualizations":{"type":"array","description":"[{ id, type, name, config }]"},"tags":{"type":"array"},"is_private":{"type":"boolean"},"is_archived":{"type":"boolean"}}}}}},"parameters":[{"name":"query_id","in":"path","required":true,"description":"query_id","schema":{"type":"integer"}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/query/{query_id}/fork":{"post":{"operationId":"query_fork","summary":"Fork a query","description":"Copies a public query (or your own) into your account and returns the new query. The original's fork count goes up by one.\n\nCredits: 0.","tags":["SQL"],"x-credits":0,"x-tide-name":"query.fork","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"parameters":[{"name":"query_id","in":"path","required":true,"description":"query_id","schema":{"type":"integer"}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/query/{query_id}/star":{"post":{"operationId":"query_star","summary":"Star or unstar a query","description":"Stars a query (on: true, the default) or removes your star (on: false). Returns the star count.\n\nCredits: 0.","tags":["SQL"],"x-credits":0,"x-tide-name":"query.star","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"on":{"type":"boolean"}}}}}},"parameters":[{"name":"query_id","in":"path","required":true,"description":"query_id","schema":{"type":"integer"}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/queries":{"get":{"operationId":"query_list","summary":"Browse saved queries","description":"Public queries sorted by trending (stars, forks, views and runs this week), new, top or updated. Filter by owner (address), q (text in name, description or tags) or starred=1 (what you starred). Pages with limit and offset.\n\nCredits: 0.","tags":["SQL"],"x-credits":0,"x-tide-name":"query.list","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"sort","in":"query","required":false,"schema":{"type":"string","enum":["trending","new","top","updated"]}},{"name":"owner","in":"query","required":false,"schema":{"type":"string"}},{"name":"q","in":"query","required":false,"schema":{"type":"string"}},{"name":"starred","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer"}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/query/{query_id}/execute":{"post":{"operationId":"query_execute","summary":"Run a saved query","description":"Runs a saved query with its saved parameter defaults, overridden by query_parameters ({ name: value } or [{ key, value }]). Returns an execution_id to poll like sql.execute; with wait_ms (max 30000) it waits and returns the status. Credits are charged to the caller: 20 plus 1 per 50 MB read; max_age reuses a recent identical run for 2.\n\nCredits: varies.","tags":["SQL"],"x-credits":"varies","x-tide-name":"query.execute","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"query_parameters":{"type":"object"},"max_age":{"type":"integer"},"wait_ms":{"type":"integer"},"performance":{"type":"string"}}}}}},"parameters":[{"name":"query_id","in":"path","required":true,"description":"query_id","schema":{"type":"integer"}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/query/{query_id}/results":{"get":{"operationId":"query_results","summary":"Latest results of a saved query","description":"The rows of the most recent finished run of a saved query, without running it, in the same shape as /v1/execution/{execution_id}/results (limit, offset, columns, sort_by, rows=array). 404 when it has never finished a run.\n\nCredits: 0.","tags":["SQL"],"x-credits":0,"x-tide-name":"query.results","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"query_id","in":"path","required":true,"description":"query_id","schema":{"type":"integer"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer"}},{"name":"columns","in":"query","required":false,"schema":{"type":"string"}},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string"}},{"name":"rows","in":"query","required":false,"schema":{"type":"string"}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/dashboard":{"post":{"operationId":"dashboard_create","summary":"Create a dashboard","description":"Creates a dashboard of saved-query visualizations, text and section widgets with shared filters, a theme and a refresh schedule. Needs a login or an API key.\n\nCredits: 0.","tags":["SQL"],"x-credits":0,"x-tide-name":"dashboard.create","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"slug":{"type":"string"},"description":{"type":"string"},"widgets":{"type":"array","description":"[{ id, kind: viz | text | section, query_id, viz_id, text, title, link?, x, y, w, h }] on a 12 column grid. A section may carry link: { label, href } shown beside its title."},"params":{"type":"array","description":"Shared filters: [{ key, type: text | number | date | list, value, options?, label? }]. A filter applies to every widget whose query has a parameter with the same key."},"theme":{"type":"string","enum":["dark","light"]},"refresh_sec":{"type":"integer","description":"Re-run every widget's query this often (10 s to 7 days, 0 = never). Short schedules run while someone is viewing."},"tags":{"type":"array"},"links":{"type":"array","description":"Up to 4 outward links shown in the header: [{ label, href }], href a full https URL."},"is_private":{"type":"boolean"}}}}}},"parameters":[{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/dashboard/{dashboard}":{"get":{"operationId":"dashboard_get","summary":"A dashboard with its results","description":"A dashboard with its widgets, filters, each widget's saved query and visualizations, and each query's latest results inline (up to 5,000 rows), so it renders complete at once. as_of on each result says which checkpoint it reflects.\n\nCredits: 0.","tags":["SQL"],"x-credits":0,"x-tide-name":"dashboard.get","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"dashboard","in":"path","required":true,"description":"Slug or numeric id.","schema":{"type":"string","description":"Slug or numeric id."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]},"put":{"operationId":"dashboard_update","summary":"Update a dashboard","description":"Changes any of name, slug, description, widgets, params, theme, refresh_sec, tags, is_private or is_archived. Owner only. PUT, or POST to /v1/dashboard/{dashboard}/update.\n\nCredits: 0.","tags":["SQL"],"x-credits":0,"x-tide-name":"dashboard.update","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"slug":{"type":"string"},"description":{"type":"string"},"widgets":{"type":"array","description":"[{ id, kind: viz | text | section, query_id, viz_id, text, title, link?, x, y, w, h }] on a 12 column grid. A section may carry link: { label, href } shown beside its title."},"params":{"type":"array","description":"Shared filters: [{ key, type: text | number | date | list, value, options?, label? }]. A filter applies to every widget whose query has a parameter with the same key."},"theme":{"type":"string","enum":["dark","light"]},"refresh_sec":{"type":"integer","description":"Re-run every widget's query this often (10 s to 7 days, 0 = never). Short schedules run while someone is viewing."},"tags":{"type":"array"},"links":{"type":"array","description":"Up to 4 outward links shown in the header: [{ label, href }], href a full https URL."},"is_private":{"type":"boolean"},"is_archived":{"type":"boolean"}}}}}},"parameters":[{"name":"dashboard","in":"path","required":true,"description":"dashboard","schema":{"type":"string"}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/dashboard/{dashboard}/fork":{"post":{"operationId":"dashboard_fork","summary":"Fork a dashboard","description":"Copies a dashboard into your account (widgets keep pointing at the same saved queries; fork a query to change its SQL).\n\nCredits: 0.","tags":["SQL"],"x-credits":0,"x-tide-name":"dashboard.fork","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"parameters":[{"name":"dashboard","in":"path","required":true,"description":"Slug or numeric id.","schema":{"type":"string","description":"Slug or numeric id."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/dashboard/{dashboard}/star":{"post":{"operationId":"dashboard_star","summary":"Star or unstar a dashboard","description":"Stars a dashboard (on: true, the default) or removes your star (on: false). Returns the star count.\n\nCredits: 0.","tags":["SQL"],"x-credits":0,"x-tide-name":"dashboard.star","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"on":{"type":"boolean"}}}}}},"parameters":[{"name":"dashboard","in":"path","required":true,"description":"Slug or numeric id.","schema":{"type":"string","description":"Slug or numeric id."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/dashboard/{dashboard}/run":{"post":{"operationId":"dashboard_run","summary":"Run a dashboard with filter values","description":"Runs every widget's query with the dashboard's filters set to params ({ key: value }) and returns { query_id: execution_id }; poll each like sql.execute. Identical runs from the last max_age seconds (default 60) are reused for 2 credits; new runs cost 20 plus 1 per 50 MB read, charged to the caller.\n\nCredits: varies.","tags":["SQL"],"x-credits":"varies","x-tide-name":"dashboard.run","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"params":{"type":"object"},"max_age":{"type":"integer"}}}}}},"parameters":[{"name":"dashboard","in":"path","required":true,"description":"Slug or numeric id.","schema":{"type":"string","description":"Slug or numeric id."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/dashboards":{"get":{"operationId":"dashboard_list","summary":"Browse dashboards","description":"Public dashboards sorted by trending (featured first, then stars, forks and views this week), new or top. Filter by owner (address), q (text), starred=1 or featured=1. Pages with limit and offset.\n\nCredits: 0.","tags":["SQL"],"x-credits":0,"x-tide-name":"dashboard.list","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"sort","in":"query","required":false,"schema":{"type":"string","enum":["trending","new","top"]}},{"name":"owner","in":"query","required":false,"schema":{"type":"string"}},{"name":"q","in":"query","required":false,"schema":{"type":"string"}},{"name":"starred","in":"query","required":false,"schema":{"type":"string"}},{"name":"featured","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer"}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/intel/cases":{"post":{"operationId":"intel_cases_create","summary":"Save an investigation as a case file.","description":"Saves a graph investigation (graph state, notes, annotations and timeline) under your account and returns it with its id. Private unless visibility is link. Up to 1000 cases per account and 2 MB per case. Free; needs a login.\n\nCredits: 0.","tags":["Account and keys"],"x-credits":0,"x-tide-name":"intel.cases.create","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","description":"Up to 140 characters."},"visibility":{"type":"string","enum":["private","link"],"description":"private (owner only, the default) or link (anyone with the link can read it)."},"graph":{"type":"object","description":"The visualizer's graph state: nodes with positions, pins, groups, hidden nodes, filters and mode."},"notes":{"type":"string","description":"Markdown notes."},"annotations":{"type":"array","description":"[{ id, target: { kind: node, id } | { kind: edge, key }, text }]"},"entries":{"type":"array","description":"Manual timeline entries: [{ id, atMs, text }]."},"flows":{"type":"array","description":"The case's flows for the timeline: [{ key, from, to, fromName, toName, usd, count, coins, firstCheckpoint, lastCheckpoint }]. Times are filled in from the checkpoints."},"nodeCount":{"type":"integer","description":"Visible nodes, shown in the case list."}}}}}},"parameters":[{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]},"get":{"operationId":"intel_cases_list","summary":"List your case files.","description":"Every case on your account, most recently updated first: id, title, visibility, version, node and flow counts and size. Free; needs a login.\n\nCredits: 0.","tags":["Account and keys"],"x-credits":0,"x-tide-name":"intel.cases.list","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/intel/cases/{caseID}":{"get":{"operationId":"intel_cases_get","summary":"Read one case file.","description":"The whole case: graph state, notes, annotations, manual timeline entries and flows with their first and last times. Owners can always read their cases; anyone can read a case whose visibility is link. mine says whether the caller owns it. Free.\n\nCredits: 0.","tags":["Account and keys"],"x-credits":0,"x-tide-name":"intel.cases.get","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"caseID","in":"path","required":true,"description":"The case id from its link (tide.ad/intel/case/<id>).","schema":{"type":"string","description":"The case id from its link (tide.ad/intel/case/<id>)."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]},"put":{"operationId":"intel_cases_update","summary":"Save changes to a case file.","description":"Send only what changed: title, visibility, graph, notes, annotations, entries, flows, nodeCount. Pass the version you loaded; when the case changed since, the answer is 409 with the current version. Leave version out to overwrite. Owner only, free.\n\nCredits: 0.","tags":["Account and keys"],"x-credits":0,"x-tide-name":"intel.cases.update","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","description":"Up to 140 characters."},"visibility":{"type":"string","enum":["private","link"],"description":"private (owner only, the default) or link (anyone with the link can read it)."},"graph":{"type":"object","description":"The visualizer's graph state: nodes with positions, pins, groups, hidden nodes, filters and mode."},"notes":{"type":"string","description":"Markdown notes."},"annotations":{"type":"array","description":"[{ id, target: { kind: node, id } | { kind: edge, key }, text }]"},"entries":{"type":"array","description":"Manual timeline entries: [{ id, atMs, text }]."},"flows":{"type":"array","description":"The case's flows for the timeline: [{ key, from, to, fromName, toName, usd, count, coins, firstCheckpoint, lastCheckpoint }]. Times are filled in from the checkpoints."},"nodeCount":{"type":"integer","description":"Visible nodes, shown in the case list."},"version":{"type":"integer","description":"The version you loaded."}}}}}},"parameters":[{"name":"caseID","in":"path","required":true,"description":"The case id from its link (tide.ad/intel/case/<id>).","schema":{"type":"string","description":"The case id from its link (tide.ad/intel/case/<id>)."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]},"delete":{"operationId":"intel_cases_delete","summary":"Delete a case file.","description":"Deletes the case for good; its link stops working. Owner only, free.\n\nCredits: 0.","tags":["Account and keys"],"x-credits":0,"x-tide-name":"intel.cases.delete","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"caseID","in":"path","required":true,"description":"The case id from its link (tide.ad/intel/case/<id>).","schema":{"type":"string","description":"The case id from its link (tide.ad/intel/case/<id>)."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}},"/v1/intel/cases/{caseID}/duplicate":{"post":{"operationId":"intel_cases_duplicate","summary":"Copy a case into your account.","description":"Copies a case you own, or one shared by link, into your account as a new private case and returns it. Free; needs a login.\n\nCredits: 0.","tags":["Account and keys"],"x-credits":0,"x-tide-name":"intel.cases.duplicate","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","description":"Up to 140 characters."}}}}}},"parameters":[{"name":"caseID","in":"path","required":true,"description":"The case id from its link (tide.ad/intel/case/<id>).","schema":{"type":"string","description":"The case id from its link (tide.ad/intel/case/<id>)."}},{"name":"fields","in":"query","required":false,"description":"Comma-separated field paths to keep, for example digest,type.","schema":{"type":"string"}},{"name":"view","in":"query","required":false,"description":"Use compact to drop explain text, steps and raw blocks.","schema":{"type":"string","enum":["compact"]}}]}}},"components":{"securitySchemes":{"ApiKeyQuery":{"type":"apiKey","in":"query","name":"api-key"},"ApiKeyHeader":{"type":"apiKey","in":"header","name":"x-api-key"}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","status"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"status":{"type":"integer"},"docs":{"type":"string"}}}}}},"responses":{"Error":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}