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

API
Authentication and keys

Get started

Authentication and keys

Send a key with every call, or call without one at the keyless tier.

API keys

Keys look like tide_ followed by 32 letters and digits. Create them in the developer portal by signing in with a Sui wallet. A key is shown once, so copy it when you make it. tide stores only a hash.

Pass the key in any of three ways.

Query string
curl "https://api.tide.ad/v1/coins/0x2%3A%3Asui%3A%3ASUI?api-key=YOUR_API_KEY"
Header
curl "https://api.tide.ad/v1/coins/0x2%3A%3Asui%3A%3ASUI" \
  -H "x-api-key: YOUR_API_KEY"
Bearer token
curl "https://api.tide.ad/v1/coins/0x2%3A%3Asui%3A%3ASUI" \
  -H "Authorization: Bearer YOUR_API_KEY"

The header forms keep the key out of logs and browser history. Use them from servers. Never ship a key in a public web page without an allowed origin rule on it.

The keyless tier

With no key, calls are counted per client IP: 2 requests a second and 1,000 credits a day. Streams and webhooks need a key. Every keyless response has an x-tide-hint header that points to the free key page.

Keys for agents

An agent can get a Free key with one signed call. No email and no payment. It signs a challenge with any Sui key.

  1. POST /v0/auth/nonce with { "address": "0x..." } returns a message to sign.
  2. Sign the message as a Sui personal message. Any signature scheme works, including zkLogin and multisig.
  3. POST /v0/keys/agent with { "address": "0x...", "signature": "..." } returns a key.
Get a key
curl -X POST "https://api.tide.ad/v0/auth/nonce" \
  -H "content-type: application/json" \
  -d '{ "address": "0xYOUR_ADDRESS" }'

# sign the returned message with your Sui key, then:

curl -X POST "https://api.tide.ad/v0/keys/agent" \
  -H "content-type: application/json" \
  -d '{ "address": "0xYOUR_ADDRESS", "signature": "SIGNATURE" }'

The key belongs to that address. Keys made this way are Free plan keys. Developer portal sign-in uses the same two calls with /v0/auth/verify, which returns a session token that starts with tsess_.

Allowed origins and IPs

Each key can carry a list of allowed origins and a list of allowed IPs. A browser call from another origin, or any call from another IP, fails with forbidden_origin. Set the lists on the key in the developer portal. An empty list allows everything.

UseRule
A web app calling from the browserAllowed origin for your site, for example https://app.example.com
A server or botAllowed IP of the machine
Local developmentAllowed origin http://localhost:3000, or leave the key unrestricted

Response headers

HeaderMeaning
x-ratelimit-limitRequests a second your key may use in this class.
x-ratelimit-remainingRequests left in the current window.
x-ratelimit-resetWhen the window resets.
x-credits-costCredits this call used.
x-credits-remainingCredits left this month (keyless: today).
retry-afterSeconds to wait. Sent with a 429.
x-request-idQuote this when you ask for help.

Errors cost no credits.

Account methods

These calls manage keys and read usage. They use a session token or sign-in, not credits.

MethodWhat it doesCredits
auth.noncePOST /v0/auth/nonceStart a sign-in: get a message to sign with a Sui key.Free
auth.verifyPOST /v0/auth/verifyFinish sign-in: trade a signature for a 30-day session token.Free
keys.agentPOST /v0/keys/agentAgents: sign one message with any Sui key, get a Free API key.Free
keys.listGET /v0/keysList your API keys.Free
keys.createPOST /v0/keysCreate an API key.Free
keys.updatePUT /v0/keys/:idRename a key or change where it works.Free
keys.revokeDELETE /v0/keys/:idRevoke an API key.Free
account.getGET /v0/accountYour plan, credits used and left this month, and limits.Free
account.usageGET /v0/account/usageUsage per day and method.Free
intel.cases.createPOST /v1/intel/casesSave an investigation as a case file.Free
intel.cases.listGET /v1/intel/casesList your case files.Free
intel.cases.getGET /v1/intel/cases/:caseIDRead one case file.Free
intel.cases.updatePUT /v1/intel/cases/:caseIDSave changes to a case file.Free
intel.cases.deleteDELETE /v1/intel/cases/:caseIDDelete a case file.Free
intel.cases.duplicatePOST /v1/intel/cases/:caseID/duplicateCopy a case into your account.Free
account.pins.getGET /v1/account/pinsRead the pins on your home page.Free
account.pins.putPUT /v1/account/pinsSave the pins on your home page.Free