{"openapi":"3.0.0","info":{"version":"v1","title":"Sui Blockchain API","description":"API for interacting with Sui blockchain data. All endpoints require API key authentication."},"servers":[{"url":"https://api.inodra.com/v1","description":"Production server"}],"components":{"schemas":{"ErrorResponse":{"type":"object","properties":{"error":{"type":"string","description":"Error message","example":"Invalid request"},"code":{"type":"string","description":"Error code","example":"INVALID_REQUEST"}},"required":["error"]},"Account":{"type":"object","properties":{"address":{"type":"string","description":"Account address","example":"0xda5d04ee7c23ed899e456b97c781e896c1e7c0f40c7cde841e7e6b323715b368"},"balance":{"type":"string","description":"SUI balance in MIST","example":"1000000000"},"usdValue":{"type":"number","description":"USD value of balance","example":100.5},"transactionCount":{"type":"number","description":"Number of transactions","example":42},"objectCount":{"type":"number","description":"Number of owned objects","example":15},"firstActivity":{"type":"string","description":"First transaction timestamp","example":"2024-01-01T00:00:00Z"},"lastActivity":{"type":"string","description":"Last transaction timestamp","example":"2024-12-01T00:00:00Z"}},"required":["address","balance"]},"Balance":{"type":"object","properties":{"coinType":{"type":"string","description":"Type of the coin","example":"0x2::sui::SUI"},"balance":{"type":"string","description":"Balance amount in MIST (smallest unit)","example":"1000000000"},"totalBalance":{"type":"string","description":"Total balance including locked coins","example":"1000000000"}},"required":["coinType","balance","totalBalance"]},"SuiObject":{"type":"object","properties":{"objectId":{"type":"string","description":"Unique identifier for the object","example":"0x0000000000000000000000000000000000000000000000000000000000000000"},"version":{"type":"string","description":"Version number of the object","example":"1"},"digest":{"type":"string","description":"Content digest of the object","example":"AbCdEfGhIjKlMnOpQrStUvWxYz0123456789+/="},"type":{"type":"string","description":"Type of the object","example":"0x2::coin::Coin<0x2::sui::SUI>"},"owner":{"type":"string","description":"Owner of the object","example":"AddressOwner(0x1234567890abcdef)"},"storageRebate":{"type":"string","description":"Storage rebate amount","example":"100000"}},"required":["objectId","version","digest","type","owner","storageRebate"]},"SuiObjectResponse":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/SuiObject"},"error":{"type":"string"}}},"SuiTransactionBlockResponse":{"type":"object","properties":{"digest":{"type":"string"},"checkpoint":{"type":"string","nullable":true},"timestampMs":{"type":"string","nullable":true},"transaction":{"nullable":true},"effects":{"nullable":true},"events":{"type":"array","nullable":true,"items":{"type":"object","properties":{"id":{"type":"object","properties":{"txDigest":{"type":"string"},"eventSeq":{"type":"string"}},"required":["txDigest","eventSeq"]},"packageId":{"type":"string","nullable":true},"transactionModule":{"type":"string","nullable":true},"sender":{"type":"string","nullable":true},"type":{"type":"string"},"timestampMs":{"type":"string","nullable":true}},"required":["id","type"]}},"objectChanges":{"type":"array","nullable":true,"items":{"nullable":true}},"balanceChanges":{"type":"array","nullable":true,"items":{"type":"object","properties":{"owner":{"type":"object","additionalProperties":{"type":"string"},"description":"Owner enum-like object"},"coinType":{"type":"string"},"amount":{"type":"string"}},"required":["owner","coinType","amount"]}},"confirmedLocalExecution":{"type":"boolean","nullable":true},"errors":{"type":"array","items":{"type":"string"}}},"required":["digest"]},"TransactionStats":{"type":"object","properties":{"success":{"type":"number","description":"Number of successful transactions","example":1000},"error":{"type":"number","description":"Number of failed transactions","example":50},"total":{"type":"number","description":"Total number of transactions","example":1050}},"required":["success","error","total"]},"CoinMetadata":{"type":"object","properties":{"type":{"type":"string","description":"Coin type identifier","example":"0x2::sui::SUI"},"name":{"type":"string","description":"Coin name","example":"Sui"},"symbol":{"type":"string","description":"Coin symbol","example":"SUI"},"description":{"type":"string","description":"Coin description","example":"The native token of Sui"},"decimals":{"type":"number","description":"Number of decimals","example":9},"iconUrl":{"type":"string","format":"uri","description":"Icon URL","example":"https://example.com/sui-icon.png"},"totalSupply":{"type":"string","description":"Total supply","example":"10000000000000000000"},"verified":{"type":"boolean","description":"Whether coin is verified","example":true},"marketCap":{"type":"number","description":"Market cap in USD","example":1000000000}},"required":["type","name","symbol","description","decimals"]},"ObjectMetadata":{"type":"object","properties":{"objectId":{"type":"string","description":"Object ID","example":"0x1234567890abcdef1234567890abcdef12345678"},"type":{"type":"string","description":"Object type","example":"0x2::coin::Coin<0x2::sui::SUI>"},"name":{"type":"string","description":"Object name","example":"My NFT"},"image":{"type":"string","format":"uri","description":"Object image URL","example":"https://example.com/nft.png"},"projectName":{"type":"string","description":"Project name","example":"Example Project"},"projectImage":{"type":"string","format":"uri","description":"Project logo URL","example":"https://example.com/project-logo.png"},"description":{"type":"string","description":"Object description","example":"A unique digital collectible"}},"required":["objectId","type"]},"Package":{"type":"object","properties":{"packageId":{"type":"string","description":"Package ID","example":"0x1234567890abcdef1234567890abcdef12345678"},"version":{"type":"string","description":"Package version","example":"1"},"digest":{"type":"string","description":"Package digest","example":"AbCdEfGhIjKlMnOpQrStUvWxYz0123456789+/="},"modules":{"type":"array","items":{"type":"string"},"description":"Package modules","example":["module1","module2"]}},"required":["packageId","version","digest"]},"ChainInfo":{"type":"object","properties":{"chainId":{"type":"string","description":"Chain identifier","example":"sui:mainnet"},"version":{"type":"string","description":"Chain version","example":"1.0.0"},"latestCheckpoint":{"type":"string","description":"Latest checkpoint sequence","example":"12345678"},"totalTransactions":{"type":"string","description":"Total transaction count","example":"1000000"},"networkTps":{"type":"number","description":"Network TPS","example":297.5}},"required":["chainId","version","latestCheckpoint","totalTransactions"]},"StakingParameters":{"type":"object","properties":{"epochLength":{"type":"string","description":"Epoch length in milliseconds","example":"86400000"},"minValidatorStake":{"type":"string","description":"Minimum validator stake","example":"30000000000000"},"maxValidatorCount":{"type":"number","description":"Maximum validator count","example":150},"minValidatorJoiningStake":{"type":"string","description":"Minimum stake to join as validator","example":"30000000000000"},"validatorLowStakeThreshold":{"type":"string","description":"Low stake threshold for validators","example":"20000000000000"},"validatorVeryLowStakeThreshold":{"type":"string","description":"Very low stake threshold for validators","example":"15000000000000"},"validatorLowStakeGracePeriod":{"type":"string","description":"Grace period for low stake validators (epochs)","example":"7"}},"required":["epochLength","minValidatorStake","maxValidatorCount","minValidatorJoiningStake","validatorLowStakeThreshold","validatorVeryLowStakeThreshold","validatorLowStakeGracePeriod"]},"NetworkStats":{"type":"object","properties":{"totalValidators":{"type":"number","description":"Total number of active validators","example":150},"totalStake":{"type":"string","description":"Total staked SUI in MIST","example":"200000000000000000"},"totalCheckpoints":{"type":"string","description":"Total number of checkpoints","example":"186008522"},"totalTransactions":{"type":"string","description":"Total number of transactions","example":"4073836074"},"epoch":{"type":"string","description":"Current epoch number","example":"712"},"epochStartTimestamp":{"type":"string","description":"Epoch start timestamp in milliseconds","example":"1735152000000"},"epochDurationMs":{"type":"string","description":"Epoch duration in milliseconds","example":"86400000"}},"required":["totalValidators","totalStake","totalCheckpoints","totalTransactions","epoch","epochStartTimestamp","epochDurationMs"]},"ValidatorApy":{"type":"object","properties":{"validatorAddress":{"type":"string","description":"Validator address","example":"0x1234567890abcdef1234567890abcdef12345678"},"apy":{"type":"number","description":"Annual percentage yield","example":4.5},"epoch":{"type":"string","description":"Epoch number","example":"100"}},"required":["validatorAddress","apy","epoch"]},"Validator":{"type":"object","properties":{"suiAddress":{"type":"string","description":"SUI address of the validator","example":"0x0000000000000000000000000000000000000000000000000000000000000000"},"name":{"type":"string","description":"Name of the validator","example":"Validator Node 1"},"description":{"type":"string","description":"Description of the validator","example":"A reliable validator node"},"imageUrl":{"type":"string","format":"uri","description":"URL to validator logo image","example":"https://example.com/validator-logo.png"},"projectUrl":{"type":"string","format":"uri","description":"URL to validator project website","example":"https://validator-website.com"},"votingPower":{"type":"string","description":"Voting power of the validator","example":"100000000"},"stakeAmount":{"type":"string","description":"Total stake amount","example":"500000000000"},"commissionRate":{"type":"string","description":"Commission rate (0-1)","example":"0.05"},"nextEpochStake":{"type":"string","description":"Stake amount for next epoch","example":"500000000000"}},"required":["suiAddress","name","description","votingPower","stakeAmount","commissionRate","nextEpochStake"]},"Checkpoint":{"type":"object","properties":{"sequenceNumber":{"type":"number","description":"Checkpoint sequence number","example":12345},"digest":{"type":"string","description":"Checkpoint digest","example":"AbCdEfGhIjKlMnOpQrStUvWxYz0123456789AbCdEfG="},"prevDigest":{"type":"string","nullable":true,"description":"Previous checkpoint digest","example":"XyZwVuTsRqPoNmLkJiHgFeDcBa9876543210ZyXwVuT="},"timestampMs":{"type":"number","description":"Checkpoint timestamp in milliseconds","example":1640995200000},"epoch":{"type":"number","description":"Epoch number","example":100},"networkTxCount":{"type":"number","description":"Total network transaction count","example":1000},"transactionBlockCount":{"type":"number","description":"Transaction block count in this checkpoint","example":500}},"required":["sequenceNumber","digest","prevDigest","timestampMs","epoch","networkTxCount","transactionBlockCount"]},"SuiNSResolveResponse":{"type":"object","properties":{"name":{"type":"string","description":"The resolved SuiNS name","example":"example.sui"},"address":{"type":"string","pattern":"^0x[a-fA-F0-9]{64}$","description":"The resolved SUI address","example":"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef"},"expiration":{"type":"string","description":"Name expiration timestamp","example":"2025-12-31T23:59:59.000Z"},"avatar":{"type":"string","format":"uri","description":"Avatar URL if set","example":"https://example.com/avatar.png"},"contentHash":{"type":"string","description":"Content hash if set","example":"0xabcd1234..."}},"required":["name","address"]},"SuiNSReverseResolveResponse":{"type":"object","properties":{"address":{"type":"string","pattern":"^0x[a-fA-F0-9]{64}$","description":"The SUI address","example":"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef"},"name":{"type":"string","nullable":true,"description":"The default SuiNS name for this address, null if none set","example":"example.sui"}},"required":["address","name"]},"SuiNSBatchResolveResponse":{"type":"object","properties":{"results":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"address":{"type":"string","nullable":true,"pattern":"^0x[a-fA-F0-9]{64}$"},"error":{"type":"string"}},"required":["name","address"]},"description":"Array of resolution results"}},"required":["results"]},"SuiNSBatchResolveRequest":{"type":"object","properties":{"names":{"type":"array","items":{"type":"string","minLength":1,"maxLength":63},"minItems":1,"maxItems":100,"description":"Array of SuiNS names to resolve (without .sui extension)","example":["example","test","demo"]}},"required":["names"]},"SuiNSAvailabilityResponse":{"type":"object","properties":{"name":{"type":"string","description":"The checked SuiNS name","example":"example.sui"},"available":{"type":"boolean","description":"Whether the name is available for registration","example":false},"registered":{"type":"boolean","description":"Whether the name is currently registered","example":true},"expiration":{"type":"string","description":"Expiration date if registered","example":"2025-12-31T23:59:59.000Z"}},"required":["name","available","registered"]}},"parameters":{},"securitySchemes":{"ApiKeyAuth":{"type":"http","scheme":"bearer","bearerFormat":"API Key","description":"Enter your API key obtained from the Inodra dashboard"}}},"paths":{"/health":{"get":{"tags":["Health"],"summary":"Detailed health check","description":"Returns detailed health information including database statistics","responses":{"200":{"description":"Health check successful","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","description":"Health status of the service","example":"healthy"},"database":{"type":"string","description":"Database connection status","example":"connected"},"timestamp":{"type":"string","description":"Timestamp of the health check","example":"2024-01-01T00:00:00Z"},"stats":{"type":"object","properties":{"success":{"type":"number","description":"Number of successful transactions","example":1000},"error":{"type":"number","description":"Number of failed transactions","example":50},"total":{"type":"number","description":"Total number of transactions","example":1050}},"required":["success","error","total"],"description":"Transaction statistics"}},"required":["status","database","timestamp","stats"]}}}},"503":{"description":"Service unavailable","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string"},"database":{"type":"string"},"error":{"type":"string"}},"required":["status","database","error"]}}}}}}},"/auth/me":{"get":{"tags":["Authentication"],"summary":"Get API key information","description":"Returns information about the authenticated API key including the associated organization, project, network, subscription tier, and subscription details.","responses":{"200":{"description":"API key information","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"apiKey":{"type":"object","properties":{"id":{"type":"string","description":"API key ID"},"name":{"type":"string","nullable":true,"description":"API key name"}},"required":["id","name"]},"organization":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Organization ID"},"name":{"type":"string","nullable":true,"description":"Organization name"}},"required":["id","name"],"description":"Organization associated with this API key"},"project":{"type":"object","nullable":true,"properties":{"id":{"type":"string","description":"Project ID"},"name":{"type":"string","nullable":true,"description":"Project name"}},"required":["id","name"],"description":"Project associated with this API key"},"network":{"type":"string","nullable":true,"enum":["mainnet","testnet","devnet"],"description":"Network this API key is configured for"},"tier":{"type":"string","description":"Subscription tier (free, team, professional, business, enterprise)"},"subscription":{"type":"object","nullable":true,"properties":{"plan":{"type":"string","nullable":true,"description":"Subscription plan name (e.g., free, team_monthly, team_annual)"},"status":{"type":"string","nullable":true,"description":"Subscription status (active, canceled, past_due, incomplete, trialing)"}},"required":["plan","status"],"description":"Subscription details for the organization"}},"required":["apiKey","organization","project","network","tier","subscription"]}},"required":["data"]}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/accounts/{address}":{"get":{"tags":["Accounts"],"summary":"Get account by hash","description":"Get detailed account information by address hash","parameters":[{"schema":{"type":"string","pattern":"^0x[a-fA-F0-9]{64}$","description":"SUI address in hex format","example":"0x0000000000000000000000000000000000000000000000000000000000000000"},"required":true,"name":"address","in":"path"}],"responses":{"200":{"description":"Account details","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Account"}},"required":["data"]}}}},"400":{"description":"Invalid address format","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Account not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/accounts/{address}/balance":{"get":{"tags":["Accounts"],"summary":"Get account balance","description":"Get balances of all coin denominations for an account","parameters":[{"schema":{"type":"string","pattern":"^0x[a-fA-F0-9]{64}$","description":"SUI address in hex format","example":"0x0000000000000000000000000000000000000000000000000000000000000000"},"required":true,"name":"address","in":"path"}],"responses":{"200":{"description":"Account balances","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Balance"}}},"required":["data"]}}}},"400":{"description":"Invalid address format","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Account not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/accounts/{address}/objects":{"get":{"tags":["Accounts"],"summary":"Get account objects","description":"Get list of all objects owned by an account","parameters":[{"schema":{"type":"string","pattern":"^0x[a-fA-F0-9]{64}$","description":"SUI address in hex format","example":"0x0000000000000000000000000000000000000000000000000000000000000000"},"required":true,"name":"address","in":"path"},{"schema":{"type":"string","default":"50","description":"Number of items to return (1-100)","example":"50"},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination","example":"eyJhZGRyZXNzIjoiMHgxMjM0In0="},"required":false,"name":"cursor","in":"query"}],"responses":{"200":{"description":"Account objects","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/SuiObjectResponse"}},"pagination":{"type":"object","properties":{"limit":{"type":"number"},"cursor":{"type":"string"},"hasNext":{"type":"boolean"}},"required":["limit","hasNext"]}},"required":["data","pagination"]}}}},"400":{"description":"Invalid address format","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/accounts/{address}/transactions":{"get":{"tags":["Accounts"],"summary":"Get account transactions","description":"Get list of transaction blocks run by an account. Supports activity format and including received transactions.","parameters":[{"schema":{"type":"string","pattern":"^0x[a-fA-F0-9]{64}$","description":"SUI address in hex format","example":"0x0000000000000000000000000000000000000000000000000000000000000000"},"required":true,"name":"address","in":"path"},{"schema":{"type":"string","default":"50","description":"Number of items to return (1-100)","example":"50"},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination","example":"eyJhZGRyZXNzIjoiMHgxMjM0In0="},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"string","enum":["raw","activity"],"description":"Response format: 'raw' for transaction data, 'activity' for activity format with sent/received indicators","example":"activity"},"required":false,"name":"format","in":"query"},{"schema":{"type":"string","description":"Include transactions where the account is the receiver (default: false for raw format, true for activity format)","example":"true"},"required":false,"name":"includeReceived","in":"query"}],"responses":{"200":{"description":"Account transactions (format depends on 'format' query parameter)","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/SuiTransactionBlockResponse"}},{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["sent","received"]},"transactionDigest":{"type":"string"},"timestamp":{"type":"string"},"amount":{"type":"string","nullable":true},"coinType":{"type":"string","nullable":true},"counterparty":{"type":"string","nullable":true},"transaction":{"$ref":"#/components/schemas/SuiTransactionBlockResponse"}},"required":["type","transactionDigest","transaction"]}}]},"pagination":{"type":"object","properties":{"limit":{"type":"number"},"cursor":{"type":"string"},"hasNext":{"type":"boolean"}},"required":["limit","hasNext"]}},"required":["data","pagination"]}}}},"400":{"description":"Invalid address format","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/accounts/{address}/delegations":{"get":{"tags":["Accounts"],"summary":"Get account delegations","description":"Get all stake delegations for an account","parameters":[{"schema":{"type":"string","pattern":"^0x[a-fA-F0-9]{64}$","description":"SUI address in hex format","example":"0x0000000000000000000000000000000000000000000000000000000000000000"},"required":true,"name":"address","in":"path"}],"responses":{"200":{"description":"Account delegations","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"nullable":true}},"summary":{"type":"object","properties":{"totalStakes":{"type":"number"},"totalStaked":{"type":"string"}},"required":["totalStakes","totalStaked"]}},"required":["data","summary"]}}}},"400":{"description":"Invalid address format","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/transactions/latest":{"get":{"tags":["Transactions"],"summary":"Get latest transactions","description":"Get the most recent transactions on the Sui Network using RPC","parameters":[{"schema":{"type":"string","description":"Number of latest transactions to return (max 50)","example":"20"},"required":false,"name":"limit","in":"query"}],"responses":{"200":{"description":"Latest transactions","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/SuiTransactionBlockResponse"}},"pagination":{"type":"object","properties":{"limit":{"type":"number"},"cursor":{"type":"string"},"hasNextPage":{"type":"boolean"}},"required":["limit","hasNextPage"]}},"required":["data","pagination"]}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/transactions/stats":{"get":{"tags":["Transactions"],"summary":"Get transaction statistics","description":"Get overall statistics about transactions","responses":{"200":{"description":"Transaction statistics","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/TransactionStats"}},"required":["data"]}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/transactions":{"get":{"tags":["Transactions"],"summary":"Get transactions","description":"Get a list of all transaction blocks","parameters":[{"schema":{"type":"string","default":"50","description":"Number of items to return (1-100)","example":"50"},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination","example":"eyJhZGRyZXNzIjoiMHgxMjM0In0="},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"string","enum":["Success","Error"],"description":"Filter by transaction status","example":"Success"},"required":false,"name":"status","in":"query"},{"schema":{"type":"string","description":"Filter by sender address","example":"0xda5d04ee7c23ed899e456b97c781e896c1e7c0f40c7cde841e7e6b323715b368"},"required":false,"name":"sender","in":"query"},{"schema":{"type":"string","enum":["asc","desc"],"default":"desc","description":"Order transactions by timestamp","example":"desc"},"required":false,"name":"orderBy","in":"query"},{"schema":{"type":"string","description":"Include transaction metadata (gas data, signatures)","example":"true"},"required":false,"name":"includeMetadata","in":"query"},{"schema":{"type":"string","description":"Include transaction events","example":"true"},"required":false,"name":"includeEvents","in":"query"},{"schema":{"type":"string","description":"Include transaction commands","example":"true"},"required":false,"name":"includeCommands","in":"query"},{"schema":{"type":"string","description":"Include balance changes","example":"true"},"required":false,"name":"includeBalanceChanges","in":"query"}],"responses":{"200":{"description":"List of transactions","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/SuiTransactionBlockResponse"}},"pagination":{"type":"object","properties":{"limit":{"type":"number"},"cursor":{"type":"string"},"hasNextPage":{"type":"boolean"}},"required":["limit","hasNextPage"]}},"required":["data","pagination"]}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/transactions/batch":{"post":{"tags":["Transactions"],"summary":"Get batch transactions by digests","description":"Get multiple transactions by their digests (up to 100)","parameters":[{"schema":{"type":"string","description":"Include transaction metadata","example":"true"},"required":false,"name":"includeMetadata","in":"query"},{"schema":{"type":"string","description":"Include transaction events","example":"true"},"required":false,"name":"includeEvents","in":"query"},{"schema":{"type":"string","description":"Include transaction commands","example":"true"},"required":false,"name":"includeCommands","in":"query"},{"schema":{"type":"string","description":"Include balance changes","example":"true"},"required":false,"name":"includeBalanceChanges","in":"query"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"digests":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":100,"description":"Array of transaction digests (base58 format)","example":["37e2P3KSDGUUGMgkSeBMprCbispSnN2Psw9pkY9cUMDJ","9WnUmGJZLLaJzQqRxJBCE3JPBM8SjwJxpqKSGQYXcDaC"]}},"required":["digests"]}}}},"responses":{"200":{"description":"Batch of transactions","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/SuiTransactionBlockResponse"}},"summary":{"type":"object","properties":{"total":{"type":"number","description":"Total number of digests requested"},"found":{"type":"number","description":"Number of transactions found"},"fromDatabase":{"type":"number","description":"Number of transactions from database"},"fromRpc":{"type":"number","description":"Number of transactions from RPC fallback"}},"required":["total","found","fromDatabase","fromRpc"]}},"required":["data","summary"]}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/transactions/{digest}/raw":{"get":{"tags":["Transactions"],"summary":"Get raw transaction by hash","description":"Get details of transaction in a raw JSON format by hash","parameters":[{"schema":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]+$","description":"Transaction digest (base58)","example":"7VvJGm5eTrsQU7KrRKxJB6UMYTbpnUL9EqJpFJRBBQYE"},"required":true,"name":"digest","in":"path"}],"responses":{"200":{"description":"Raw transaction details","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/SuiTransactionBlockResponse"}},"required":["data"]}}}},"400":{"description":"Invalid digest format","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Transaction not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/transactions/{digest}":{"get":{"tags":["Transactions"],"summary":"Get transaction by digest","description":"Get details of a specific transaction by its digest","parameters":[{"schema":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]+$","description":"Transaction digest (base58)","example":"7VvJGm5eTrsQU7KrRKxJB6UMYTbpnUL9EqJpFJRBBQYE"},"required":true,"name":"digest","in":"path"},{"schema":{"type":"string","description":"Include transaction metadata","example":"true"},"required":false,"name":"includeMetadata","in":"query"},{"schema":{"type":"string","description":"Include transaction events","example":"true"},"required":false,"name":"includeEvents","in":"query"},{"schema":{"type":"string","description":"Include transaction commands","example":"true"},"required":false,"name":"includeCommands","in":"query"},{"schema":{"type":"string","description":"Include balance changes","example":"true"},"required":false,"name":"includeBalanceChanges","in":"query"}],"responses":{"200":{"description":"Transaction details","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/SuiTransactionBlockResponse"}},"required":["data"]}}}},"400":{"description":"Invalid digest format","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Transaction not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/coins/type/{coinType}":{"get":{"tags":["Coins"],"summary":"Get coin by coin type","description":"Get coin denomination by coin type","parameters":[{"schema":{"type":"string","description":"Coin type identifier","example":"0x2::sui::SUI"},"required":true,"name":"coinType","in":"path"}],"responses":{"200":{"description":"Coin denomination details","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/CoinMetadata"}},"required":["data"]}}}},"400":{"description":"Invalid coin type format","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Coin not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/coins/{coinType}":{"get":{"tags":["Coins"],"summary":"Get coin metadata","description":"Get details of a coin denomination like name, symbol, URL link, description, social links, etc.","parameters":[{"schema":{"type":"string","description":"Coin type identifier","example":"0x2::sui::SUI"},"required":true,"name":"coinType","in":"path"}],"responses":{"200":{"description":"Coin metadata","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/CoinMetadata"}},"required":["data"]}}}},"400":{"description":"Invalid coin type format","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Coin not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/objects/metadata":{"post":{"tags":["Objects"],"summary":"Get object metadata","description":"Get the metadata (type, name, image, project name and image, etc.) of the queried object","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"objectId":{"type":"string","description":"Object ID to get metadata for","example":"0x1234567890abcdef1234567890abcdef12345678"}},"required":["objectId"]}}}},"responses":{"200":{"description":"Object metadata","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ObjectMetadata"}},"required":["data"]}}}},"400":{"description":"Invalid object ID format","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Object not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/objects/{objectId}/transactions":{"get":{"tags":["Objects"],"summary":"Get object transactions by hash","description":"Get a list of all transaction blocks run with an object by hash","parameters":[{"schema":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"Object ID in hex format","example":"0x1234567890abcdef1234567890abcdef12345678"},"required":true,"name":"objectId","in":"path"},{"schema":{"type":"string","default":"50","description":"Number of items to return (1-100)","example":"50"},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination","example":"eyJhZGRyZXNzIjoiMHgxMjM0In0="},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"string","enum":["asc","desc"],"default":"desc","description":"Order transactions by timestamp","example":"desc"},"required":false,"name":"orderBy","in":"query"}],"responses":{"200":{"description":"List of transactions for the object","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/SuiTransactionBlockResponse"}},"pagination":{"type":"object","properties":{"limit":{"type":"number"},"cursor":{"type":"string"},"hasNext":{"type":"boolean"}},"required":["limit","hasNext"]}},"required":["data","pagination"]}}}},"400":{"description":"Invalid object ID format","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Object not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/packages/{packageId}":{"get":{"tags":["Packages"],"summary":"Get package by ID","description":"Get package details by id","parameters":[{"schema":{"type":"string","pattern":"^0x[a-fA-F0-9]+$","description":"Package ID in hex format","example":"0x1234567890abcdef1234567890abcdef12345678"},"required":true,"name":"packageId","in":"path"}],"responses":{"200":{"description":"Package details","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Package"}},"required":["data"]}}}},"400":{"description":"Invalid package ID format","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Package not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/chain/info":{"get":{"tags":["Chain"],"summary":"Get chain info parameters","description":"Get a chart showing Sui blockchain information: data structure, hashing functions, chain ID, chain version, etc.","responses":{"200":{"description":"Chain information parameters","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ChainInfo"}},"required":["data"]}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/chain/staking":{"get":{"tags":["Chain"],"summary":"Get staking parameters","description":"Get a chart showing staking parameters for the selected period","parameters":[{"schema":{"type":"string","enum":["1d","7d","30d","90d","1y"],"default":"30d","description":"Time period for staking parameters","example":"30d"},"required":false,"name":"period","in":"query"}],"responses":{"200":{"description":"Staking parameters","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/StakingParameters"}},"required":["data"]}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/chain/stats":{"get":{"tags":["Chain"],"summary":"Get network statistics","description":"Get current network statistics including validators, stake, checkpoints, transactions, and epoch information","responses":{"200":{"description":"Network statistics","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/NetworkStats"}},"required":["data"]}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/validators/apy":{"get":{"tags":["Validators"],"summary":"Get validators APY","description":"Get chart of average APY across validators","parameters":[{"schema":{"type":"string","enum":["1d","7d","30d","90d","1y"],"default":"30d","description":"Time period for APY calculation","example":"30d"},"required":false,"name":"period","in":"query"},{"schema":{"type":"number","minimum":1,"maximum":100,"default":50,"description":"Number of validators to include","example":50},"required":false,"name":"limit","in":"query"}],"responses":{"200":{"description":"Validator APY data","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ValidatorApy"}},"summary":{"type":"object","properties":{"averageApy":{"type":"number"},"maxApy":{"type":"number"},"minApy":{"type":"number"},"period":{"type":"string"}},"required":["averageApy","maxApy","minApy","period"]}},"required":["data","summary"]}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/validators/commission":{"get":{"tags":["Validators"],"summary":"Get validators commission","description":"Get commission rates charged by validators","parameters":[{"schema":{"type":"string","default":"50","description":"Number of items to return (1-100)","example":"50"},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination","example":"eyJhZGRyZXNzIjoiMHgxMjM0In0="},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"number","nullable":true,"minimum":0,"maximum":1,"description":"Minimum commission rate filter","example":0.05},"required":false,"name":"minCommission","in":"query"},{"schema":{"type":"number","nullable":true,"minimum":0,"maximum":1,"description":"Maximum commission rate filter","example":0.1},"required":false,"name":"maxCommission","in":"query"}],"responses":{"200":{"description":"Validator commission data","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"validatorAddress":{"type":"string"},"name":{"type":"string"},"commissionRate":{"type":"string"},"stakeAmount":{"type":"string"}},"required":["validatorAddress","commissionRate","stakeAmount"]}},"pagination":{"type":"object","properties":{"limit":{"type":"number"},"cursor":{"type":"string"},"hasNext":{"type":"boolean"}},"required":["limit","hasNext"]}},"required":["data","pagination"]}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/validators":{"get":{"tags":["Validators"],"summary":"Get validators","description":"Get a list of all validators on the Sui Network","parameters":[{"schema":{"type":"string","default":"50","description":"Number of items to return (1-100)","example":"50"},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination","example":"eyJhZGRyZXNzIjoiMHgxMjM0In0="},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"string","description":"Filter by active validators only","example":"true"},"required":false,"name":"active","in":"query"},{"schema":{"type":"string","enum":["stake","apy","commission","name"],"default":"stake","description":"Sort validators by field","example":"stake"},"required":false,"name":"sortBy","in":"query"},{"schema":{"type":"string","enum":["asc","desc"],"default":"desc","description":"Sort order","example":"desc"},"required":false,"name":"order","in":"query"}],"responses":{"200":{"description":"List of validators","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Validator"}},"pagination":{"type":"object","properties":{"limit":{"type":"number"},"cursor":{"type":"string"},"hasNext":{"type":"boolean"}},"required":["limit","hasNext"]}},"required":["data","pagination"]}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/validators/{validatorAddress}":{"get":{"tags":["Validators"],"summary":"Get validator by address","description":"Get detailed validator information","parameters":[{"schema":{"type":"string","pattern":"^0x[a-fA-F0-9]{64}$","description":"Validator address in hex format","example":"0xda5d04ee7c23ed899e456b97c781e896c1e7c0f40c7cde841e7e6b323715b368"},"required":true,"name":"validatorAddress","in":"path"}],"responses":{"200":{"description":"Validator details","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Validator"}},"required":["data"]}}}},"400":{"description":"Invalid validator address format","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Validator not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/checkpoints/recent":{"get":{"tags":["Checkpoints"],"summary":"Get recent checkpoints","description":"Get a list of the most recent checkpoints on the Sui Network using RPC","parameters":[{"schema":{"type":"string","description":"Number of recent checkpoints to return (max 20)","example":"10"},"required":false,"name":"limit","in":"query"}],"responses":{"200":{"description":"Recent checkpoints","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Checkpoint"}},"pagination":{"type":"object","properties":{"limit":{"type":"number"},"cursor":{"type":"string"},"hasNextPage":{"type":"boolean"}},"required":["limit","hasNextPage"]}},"required":["data","pagination"]}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/checkpoints":{"get":{"tags":["Checkpoints"],"summary":"Get checkpoints","description":"Get a list of all checkpoints on the Sui Network","parameters":[{"schema":{"type":"string","default":"50","description":"Number of items to return (1-100)","example":"50"},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","description":"Cursor for pagination","example":"eyJhZGRyZXNzIjoiMHgxMjM0In0="},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"string","enum":["asc","desc"],"default":"desc","description":"Order checkpoints by sequence number","example":"desc"},"required":false,"name":"orderBy","in":"query"}],"responses":{"200":{"description":"List of checkpoints","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Checkpoint"}},"pagination":{"type":"object","properties":{"limit":{"type":"number"},"cursor":{"type":"string"},"hasNext":{"type":"boolean"}},"required":["limit","hasNext"]}},"required":["data","pagination"]}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/checkpoints/latest":{"get":{"tags":["Checkpoints"],"summary":"Get latest checkpoint","description":"Retrieve the most recent checkpoint","responses":{"200":{"description":"Latest checkpoint","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Checkpoint"}},"required":["data"]}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/checkpoints/{sequenceNumber}":{"get":{"tags":["Checkpoints"],"summary":"Get checkpoint by sequence number","description":"Retrieve a specific checkpoint by its sequence number","parameters":[{"schema":{"type":"string","description":"Checkpoint sequence number","example":"12345"},"required":true,"name":"sequenceNumber","in":"path"}],"responses":{"200":{"description":"Checkpoint details","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Checkpoint"}},"required":["data"]}}}},"400":{"description":"Invalid sequence number","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Checkpoint not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/jsonrpc":{"post":{"tags":["JSON-RPC"],"summary":"Proxy JSON-RPC to Sui node","description":"Accepts any JSON-RPC 2.0 request and forwards it to the configured Sui RPC endpoint.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"jsonrpc":{"type":"string","enum":["2.0"]},"method":{"type":"string"},"params":{"anyOf":[{"type":"array","items":{"nullable":true}},{"type":"object","additionalProperties":{"nullable":true}}]},"id":{"anyOf":[{"type":"string"},{"type":"number"},{"nullable":true},{"nullable":true}]}},"required":["jsonrpc","method"]}}}},"responses":{"200":{"description":"JSON-RPC 2.0 response. Errors are encoded in the JSON body.","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"jsonrpc":{"type":"string","enum":["2.0"]},"result":{"nullable":true},"id":{"anyOf":[{"type":"string"},{"type":"number"},{"nullable":true},{"nullable":true}]}},"required":["jsonrpc","id"]},{"type":"object","properties":{"jsonrpc":{"type":"string","enum":["2.0"]},"error":{"type":"object","properties":{"code":{"type":"number"},"message":{"type":"string"},"data":{"nullable":true}},"required":["code","message"]},"id":{"anyOf":[{"type":"string"},{"type":"number"},{"nullable":true},{"nullable":true}]}},"required":["jsonrpc","error","id"]}]}}}},"400":{"description":"Malformed JSON (not a valid JSON-RPC envelope)."},"502":{"description":"Upstream Sui node unreachable or timed out."}}}},"/graphql":{"post":{"tags":["GraphQL"],"summary":"Proxy GraphQL requests to Sui node","description":"Accepts GraphQL queries and forwards them to the configured Sui GraphQL endpoint. Validates query structure and enforces size limits (max 100KB query).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string","minLength":1,"maxLength":100000},"variables":{"type":"object","additionalProperties":{"nullable":true}},"operationName":{"type":"string"}},"required":["query"]}}}},"responses":{"200":{"description":"GraphQL response from Sui node.","content":{"application/json":{"schema":{"nullable":true}}}},"400":{"description":"Malformed request (invalid JSON, missing query field, or query exceeds size limits)."},"502":{"description":"Upstream Sui node unreachable or timed out."}}}},"/suins/resolve/{name}":{"get":{"tags":["SuiNS"],"summary":"Resolve SuiNS name to address","description":"Resolves a SuiNS name to its associated SUI address and metadata","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":67,"pattern":"^[a-z0-9]+(-[a-z0-9]+)*(\\.sui)?$","description":"SuiNS name (with or without .sui extension)","example":"example"},"required":true,"name":"name","in":"path"}],"responses":{"200":{"description":"Successfully resolved SuiNS name","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuiNSResolveResponse"}}}},"400":{"description":"Invalid name format","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"SuiNS name not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/suins/reverse/{address}":{"get":{"tags":["SuiNS"],"summary":"Reverse resolve address to SuiNS name","description":"Performs reverse lookup to find the default SuiNS name for an address","parameters":[{"schema":{"type":"string","pattern":"^0x[a-fA-F0-9]{64}$","description":"SUI address in hex format","example":"0x0000000000000000000000000000000000000000000000000000000000000000"},"required":true,"name":"address","in":"path"}],"responses":{"200":{"description":"Successfully performed reverse lookup","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuiNSReverseResolveResponse"}}}},"400":{"description":"Invalid address format","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/suins/resolve/batch":{"post":{"tags":["SuiNS"],"summary":"Batch resolve multiple SuiNS names","description":"Resolves multiple SuiNS names in a single request for improved performance","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuiNSBatchResolveRequest"}}}},"responses":{"200":{"description":"Batch resolution results","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuiNSBatchResolveResponse"}}}},"400":{"description":"Invalid request format","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/suins/availability/{name}":{"get":{"tags":["SuiNS"],"summary":"Check SuiNS name availability","description":"Checks if a SuiNS name is available for registration or currently registered","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":67,"pattern":"^[a-z0-9]+(-[a-z0-9]+)*(\\.sui)?$","description":"SuiNS name (with or without .sui extension)","example":"example"},"required":true,"name":"name","in":"path"}],"responses":{"200":{"description":"Name availability status","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuiNSAvailabilityResponse"}}}},"400":{"description":"Invalid name format","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/usage/stats":{"get":{"tags":["Usage"],"summary":"Get usage statistics","description":"Returns comprehensive usage statistics for the authenticated organization including CU consumption, request metrics, performance data, and error analytics for the current billing period","security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Usage statistics retrieved successfully","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"organization":{"type":"object","properties":{"id":{"type":"string"},"tier":{"type":"string"}},"required":["id","tier"]},"billingPeriod":{"type":"object","properties":{"start":{"type":"string"},"end":{"type":"string"}},"required":["start","end"]},"computeUnits":{"type":"object","properties":{"consumed":{"type":"number"},"limit":{"type":"number"},"remaining":{"type":"number"},"percentUsed":{"type":"number"},"formatted":{"type":"object","properties":{"consumed":{"type":"string"},"limit":{"type":"string"},"remaining":{"type":"string"}},"required":["consumed","limit","remaining"]}},"required":["consumed","limit","remaining","percentUsed","formatted"]},"requests":{"type":"object","properties":{"total":{"type":"number"},"successful":{"type":"number"},"failed":{"type":"number"},"errorRate":{"type":"number"}},"required":["total","successful","failed","errorRate"]},"performance":{"type":"object","properties":{"avgResponseTimeMs":{"type":"number"},"p95ResponseTimeMs":{"type":"number","nullable":true},"p99ResponseTimeMs":{"type":"number","nullable":true}},"required":["avgResponseTimeMs","p95ResponseTimeMs","p99ResponseTimeMs"]},"topEndpoints":{"type":"array","items":{"type":"object","properties":{"endpoint":{"type":"string"},"requests":{"type":"number"},"avgResponseTimeMs":{"type":"number"},"errorRate":{"type":"number"}},"required":["endpoint","requests","avgResponseTimeMs","errorRate"]}},"errorBreakdown":{"type":"array","items":{"type":"object","properties":{"errorType":{"type":"string"},"count":{"type":"number"},"percentage":{"type":"number"}},"required":["errorType","count","percentage"]}}},"required":["organization","billingPeriod","computeUnits","requests","performance","topEndpoints","errorBreakdown"]}},"required":["data"]}}}},"401":{"description":"Unauthorized - API key required","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error"]}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error"]}}}}}}},"/events/schema":{"get":{"tags":["Events"],"summary":"Get event schema","description":"Check if an event type exists in the struct registry and get its field definitions. This is useful for setting up field-level filtering on webhooks.","parameters":[{"schema":{"type":"string","description":"Fully qualified event type (package::module::struct). The package address should be the full 64-character hex address.","example":"0x2::sui::NewCoin"},"required":true,"name":"eventType","in":"query"}],"responses":{"200":{"description":"Event schema response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"exists":{"type":"boolean","description":"Whether the event type exists in the struct registry","example":true},"fields":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","example":"from"},"type":{"type":"string","example":"address"}},"required":["name","type"]},"description":"Array of field definitions if event exists","example":[{"name":"from","type":"address"},{"name":"amount","type":"u64"}]}},"required":["exists"]}},"required":["data"]}}}},"400":{"description":"Invalid event type format","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/webhooks/events":{"post":{"tags":["Webhooks"],"summary":"Create event webhook","description":"Create a new webhook for monitoring Move package events. The webhook will be triggered when events matching the specified type are emitted on-chain.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"eventType":{"type":"string","minLength":1,"maxLength":200,"description":"The Move event type to track (e.g., 0x2::coin::CoinBalanceChange)"},"webhookUrl":{"type":"string","format":"uri","description":"The URL to send webhook payloads to"},"sender":{"type":"string","maxLength":100,"description":"Optional sender address filter"},"eventFieldFilters":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","maxLength":100,"description":"The field name to filter on"},"moveType":{"type":"string","maxLength":100,"description":"The Move type of the field (e.g., u64, address, bool)"},"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","contains"],"description":"The comparison operator"},"value":{"type":"string","maxLength":500,"description":"The value to compare against"}},"required":["field","moveType","operator","value"]},"maxItems":10,"description":"Optional field-level filters (max 10)"}},"required":["eventType","webhookUrl"]}}}},"responses":{"201":{"description":"Webhook created successfully","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["event"]},"eventType":{"type":"string"},"sender":{"type":"string","nullable":true},"eventFieldFilters":{"type":"array","nullable":true,"items":{"type":"object","properties":{"field":{"type":"string","maxLength":100,"description":"The field name to filter on"},"moveType":{"type":"string","maxLength":100,"description":"The Move type of the field (e.g., u64, address, bool)"},"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","contains"],"description":"The comparison operator"},"value":{"type":"string","maxLength":500,"description":"The value to compare against"}},"required":["field","moveType","operator","value"]}},"address":{"type":"string","nullable":true},"coinType":{"type":"string","nullable":true},"objectId":{"type":"string","nullable":true},"webhookUrl":{"type":"string","nullable":true},"webhookSecret":{"type":"string","nullable":true},"active":{"type":"boolean"},"organizationId":{"type":"string"},"projectId":{"type":"string"},"createdAt":{"type":"string","nullable":true},"updatedAt":{"type":"string","nullable":true}},"required":["id","type","eventType","sender","eventFieldFilters","webhookUrl","webhookSecret","active","organizationId","projectId"]}},"required":["data"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Webhook limit reached for subscription tier","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/webhooks/addresses":{"post":{"tags":["Webhooks"],"summary":"Create address webhook","description":"Create a new webhook for monitoring a Sui address activity. The webhook will be triggered when the address sends or receives transactions.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string","minLength":1,"maxLength":100,"description":"The Sui address to monitor for activity"},"webhookUrl":{"type":"string","format":"uri","description":"The URL to send webhook payloads to"}},"required":["address","webhookUrl"]}}}},"responses":{"201":{"description":"Webhook created successfully","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["address"]},"eventType":{"type":"string","nullable":true},"sender":{"type":"string","nullable":true},"eventFieldFilters":{"type":"array","nullable":true,"items":{"type":"object","properties":{"field":{"type":"string","maxLength":100,"description":"The field name to filter on"},"moveType":{"type":"string","maxLength":100,"description":"The Move type of the field (e.g., u64, address, bool)"},"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","contains"],"description":"The comparison operator"},"value":{"type":"string","maxLength":500,"description":"The value to compare against"}},"required":["field","moveType","operator","value"]}},"address":{"type":"string"},"coinType":{"type":"string","nullable":true},"objectId":{"type":"string","nullable":true},"webhookUrl":{"type":"string","nullable":true},"webhookSecret":{"type":"string","nullable":true},"active":{"type":"boolean"},"organizationId":{"type":"string"},"projectId":{"type":"string"},"createdAt":{"type":"string","nullable":true},"updatedAt":{"type":"string","nullable":true}},"required":["id","type","eventType","sender","eventFieldFilters","address","webhookUrl","webhookSecret","active","organizationId","projectId"]}},"required":["data"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Webhook limit reached for subscription tier","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/webhooks/coins":{"post":{"tags":["Webhooks"],"summary":"Create coin webhook","description":"Create a new webhook for monitoring coin balance changes. The webhook will be triggered when the specified coin type balance changes for the address.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string","minLength":1,"maxLength":100,"description":"The Sui address to monitor for coin balance changes"},"coinType":{"type":"string","minLength":1,"maxLength":200,"description":"The coin type to track (e.g., 0x2::sui::SUI). Omit to track all coin types."},"webhookUrl":{"type":"string","format":"uri","description":"The URL to send webhook payloads to"}},"required":["address","webhookUrl"]}}}},"responses":{"201":{"description":"Webhook created successfully","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["coin"]},"eventType":{"type":"string","nullable":true},"sender":{"type":"string","nullable":true},"eventFieldFilters":{"type":"array","nullable":true,"items":{"type":"object","properties":{"field":{"type":"string","maxLength":100,"description":"The field name to filter on"},"moveType":{"type":"string","maxLength":100,"description":"The Move type of the field (e.g., u64, address, bool)"},"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","contains"],"description":"The comparison operator"},"value":{"type":"string","maxLength":500,"description":"The value to compare against"}},"required":["field","moveType","operator","value"]}},"address":{"type":"string"},"coinType":{"type":"string","nullable":true},"objectId":{"type":"string","nullable":true},"webhookUrl":{"type":"string","nullable":true},"webhookSecret":{"type":"string","nullable":true},"active":{"type":"boolean"},"organizationId":{"type":"string"},"projectId":{"type":"string"},"createdAt":{"type":"string","nullable":true},"updatedAt":{"type":"string","nullable":true}},"required":["id","type","eventType","sender","eventFieldFilters","address","coinType","webhookUrl","webhookSecret","active","organizationId","projectId"]}},"required":["data"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Webhook limit reached for subscription tier","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/webhooks/objects":{"post":{"tags":["Webhooks"],"summary":"Create object webhook","description":"Create a new webhook for monitoring a Sui object. The webhook will be triggered when the object is modified.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"objectId":{"type":"string","minLength":1,"maxLength":100,"description":"The Sui object ID to monitor for changes"},"webhookUrl":{"type":"string","format":"uri","description":"The URL to send webhook payloads to"}},"required":["objectId","webhookUrl"]}}}},"responses":{"201":{"description":"Webhook created successfully","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["object"]},"eventType":{"type":"string","nullable":true},"sender":{"type":"string","nullable":true},"eventFieldFilters":{"type":"array","nullable":true,"items":{"type":"object","properties":{"field":{"type":"string","maxLength":100,"description":"The field name to filter on"},"moveType":{"type":"string","maxLength":100,"description":"The Move type of the field (e.g., u64, address, bool)"},"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","contains"],"description":"The comparison operator"},"value":{"type":"string","maxLength":500,"description":"The value to compare against"}},"required":["field","moveType","operator","value"]}},"address":{"type":"string","nullable":true},"coinType":{"type":"string","nullable":true},"objectId":{"type":"string"},"webhookUrl":{"type":"string","nullable":true},"webhookSecret":{"type":"string","nullable":true},"active":{"type":"boolean"},"organizationId":{"type":"string"},"projectId":{"type":"string"},"createdAt":{"type":"string","nullable":true},"updatedAt":{"type":"string","nullable":true}},"required":["id","type","eventType","sender","eventFieldFilters","objectId","webhookUrl","webhookSecret","active","organizationId","projectId"]}},"required":["data"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Webhook limit reached for subscription tier","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/webhooks":{"get":{"tags":["Webhooks"],"summary":"List webhooks","description":"List all webhooks for the current project (determined by API key)","responses":{"200":{"description":"List of webhooks","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["event","address","coin","object"]},"eventType":{"type":"string","nullable":true},"sender":{"type":"string","nullable":true},"eventFieldFilters":{"type":"array","nullable":true,"items":{"type":"object","properties":{"field":{"type":"string","maxLength":100,"description":"The field name to filter on"},"moveType":{"type":"string","maxLength":100,"description":"The Move type of the field (e.g., u64, address, bool)"},"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","contains"],"description":"The comparison operator"},"value":{"type":"string","maxLength":500,"description":"The value to compare against"}},"required":["field","moveType","operator","value"]}},"address":{"type":"string","nullable":true},"coinType":{"type":"string","nullable":true},"objectId":{"type":"string","nullable":true},"webhookUrl":{"type":"string","nullable":true},"webhookSecret":{"type":"string","nullable":true},"active":{"type":"boolean"},"organizationId":{"type":"string"},"projectId":{"type":"string"},"createdAt":{"type":"string","nullable":true},"updatedAt":{"type":"string","nullable":true}},"required":["id","type","webhookUrl","webhookSecret","active","organizationId","projectId"]}}},"required":["data"]}}}},"401":{"description":"Unauthorized - invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/webhooks/{id}":{"get":{"tags":["Webhooks"],"summary":"Get webhook","description":"Get details of a specific webhook by ID","parameters":[{"schema":{"type":"string","minLength":1,"description":"The webhook ID"},"required":true,"description":"The webhook ID","name":"id","in":"path"}],"responses":{"200":{"description":"Webhook details","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["event","address","coin","object"]},"eventType":{"type":"string","nullable":true},"sender":{"type":"string","nullable":true},"eventFieldFilters":{"type":"array","nullable":true,"items":{"type":"object","properties":{"field":{"type":"string","maxLength":100,"description":"The field name to filter on"},"moveType":{"type":"string","maxLength":100,"description":"The Move type of the field (e.g., u64, address, bool)"},"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","contains"],"description":"The comparison operator"},"value":{"type":"string","maxLength":500,"description":"The value to compare against"}},"required":["field","moveType","operator","value"]}},"address":{"type":"string","nullable":true},"coinType":{"type":"string","nullable":true},"objectId":{"type":"string","nullable":true},"webhookUrl":{"type":"string","nullable":true},"webhookSecret":{"type":"string","nullable":true},"active":{"type":"boolean"},"organizationId":{"type":"string"},"projectId":{"type":"string"},"createdAt":{"type":"string","nullable":true},"updatedAt":{"type":"string","nullable":true}},"required":["id","type","webhookUrl","webhookSecret","active","organizationId","projectId"]}},"required":["data"]}}}},"401":{"description":"Unauthorized - invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Webhook not found or does not belong to this project","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"put":{"tags":["Webhooks"],"summary":"Update webhook","description":"Update a webhook (e.g., change URL, toggle active status)","parameters":[{"schema":{"type":"string","minLength":1,"description":"The webhook ID to update"},"required":true,"description":"The webhook ID to update","name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"webhookUrl":{"type":"string","format":"uri","description":"New webhook URL"},"active":{"type":"boolean","description":"Enable or disable the webhook"}}}}}},"responses":{"200":{"description":"Webhook updated successfully","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["event","address","coin","object"]},"eventType":{"type":"string","nullable":true},"sender":{"type":"string","nullable":true},"eventFieldFilters":{"type":"array","nullable":true,"items":{"type":"object","properties":{"field":{"type":"string","maxLength":100,"description":"The field name to filter on"},"moveType":{"type":"string","maxLength":100,"description":"The Move type of the field (e.g., u64, address, bool)"},"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","contains"],"description":"The comparison operator"},"value":{"type":"string","maxLength":500,"description":"The value to compare against"}},"required":["field","moveType","operator","value"]}},"address":{"type":"string","nullable":true},"coinType":{"type":"string","nullable":true},"objectId":{"type":"string","nullable":true},"webhookUrl":{"type":"string","nullable":true},"webhookSecret":{"type":"string","nullable":true},"active":{"type":"boolean"},"organizationId":{"type":"string"},"projectId":{"type":"string"},"createdAt":{"type":"string","nullable":true},"updatedAt":{"type":"string","nullable":true}},"required":["id","type","webhookUrl","webhookSecret","active","organizationId","projectId"]}},"required":["data"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Webhook not found or does not belong to this project","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["Webhooks"],"summary":"Delete webhook","description":"Delete an event webhook by ID","parameters":[{"schema":{"type":"string","minLength":1,"description":"The webhook ID to delete"},"required":true,"description":"The webhook ID to delete","name":"id","in":"path"}],"responses":{"200":{"description":"Webhook deleted successfully","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"]}}}},"401":{"description":"Unauthorized - invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Webhook not found or does not belong to this project","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/warp/{subscriptionId}/stream":{"get":{"tags":["Warp"],"summary":"Stream real-time events via SSE","description":"Opens a Server-Sent Events (SSE) stream for a Warp subscription.\n\nWarp streams are available over both **SSE** (this endpoint) and **WebSocket** (`/ws` endpoint).\n\n**Prerequisites:**\nCreate a Warp subscription first using POST /v1/warp/events (or /addresses, /coins, /objects).\n\n**Authentication:**\nProvide your API key via one of:\n- `Authorization: Bearer YOUR_API_KEY` header (recommended)\n- `x-api-key: YOUR_API_KEY` header\n- `?api_key=YOUR_API_KEY` query parameter (useful when headers are awkward, e.g., EventSource)\n\n**Security Note:** Using `api_key` query parameter may expose your key in server logs and browser history. Prefer header-based authentication when possible.\n\n**Billing:**\n- 3 CU per 15 seconds of connection time (~12 CU/min)\n- 100 CU per event delivered\n\n**Connection Limits:**\n- Free: 1 concurrent connection\n- Team: 5 concurrent connections\n- Professional: 10 concurrent connections\n- Enterprise: Custom limit\n\n**Note:** Only one connection per subscription (either SSE or WebSocket, not both).\n\n**Event Types:**\n- `connected` - Initial connection confirmation with subscription details\n- `event` - Package event matching your subscription\n- `address` - Address activity event\n- `coin` - Coin balance change event\n- `object` - Object change event\n- `quota_exceeded` - CU quota exhausted, stream closing\n- `error` - Error notification\n\n**Delivery Guarantee:**\n- At-least-once delivery (messages ACKed after 30s delay)\n- On ungraceful disconnect, up to 30s of messages may be redelivered\n- For exactly-once delivery, use the WebSocket endpoint with client ACKs\n\n**Reconnection:**\nUse the `Last-Event-ID` header with the `id` from the last received event to resume\nthe stream. Events are retained for 1 hour for reconnection support.\n\n**Example:**\n```bash\ncurl -N -H \"Authorization: Bearer YOUR_API_KEY\" \\\n  \"https://mainnet-api.inodra.com/v1/warp/sub_abc123/stream\"\n```\n","parameters":[{"schema":{"type":"string","description":"The subscription ID to stream events for (from tracked_event, tracked_address, etc.)","example":"sub_abc123xyz"},"required":true,"name":"subscriptionId","in":"path"},{"schema":{"type":"string","description":"API key for authentication (alternative to Authorization header). Note: Using query parameters for API keys may expose them in logs and browser history. Prefer header authentication when possible.","example":"inodra_abc123..."},"required":false,"name":"api_key","in":"query"}],"responses":{"200":{"description":"SSE stream established","headers":{"Content-Type":{"schema":{"type":"string","enum":["text/event-stream"]},"required":true},"Cache-Control":{"schema":{"type":"string","enum":["no-cache"]},"required":true},"Connection":{"schema":{"type":"string","enum":["keep-alive"]},"required":true}},"content":{"text/event-stream":{"schema":{"type":"string","description":"Server-Sent Events stream with events in SSE format","example":"event: connected\ndata: {\"subscriptionId\":\"sub_abc123\",\"subscriptionType\":\"event\",\"protocol\":\"sse\"}\n\nevent: event\nid: 12345678\ndata: {\"activityType\":\"package_event\",\"txDigest\":\"0x...\",\"checkpoint\":12345678}\n"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Subscription not found or not owned by this organization","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Connection limit exceeded or CU quota exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/warp/events":{"post":{"tags":["Warp"],"summary":"Create event stream subscription","description":"Create a new Warp subscription for monitoring Move package events. Connect to the stream via GET /v1/warp/{id}/connect to receive real-time events.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"eventType":{"type":"string","minLength":1,"maxLength":200,"description":"The Move event type to track (e.g., 0x2::coin::CoinBalanceChange)"},"sender":{"type":"string","maxLength":100,"description":"Optional sender address filter"},"eventFieldFilters":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","maxLength":100,"description":"The field name to filter on"},"moveType":{"type":"string","maxLength":100,"description":"The Move type of the field (e.g., u64, address, bool)"},"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","contains"],"description":"The comparison operator"},"value":{"type":"string","maxLength":500,"description":"The value to compare against"}},"required":["field","moveType","operator","value"]},"maxItems":10,"description":"Optional field-level filters (max 10)"}},"required":["eventType"]}}}},"responses":{"201":{"description":"Warp subscription created successfully","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["event","address","coin","object"]},"eventType":{"type":"string","nullable":true},"sender":{"type":"string","nullable":true},"eventFieldFilters":{"type":"array","nullable":true,"items":{"type":"object","properties":{"field":{"type":"string","maxLength":100,"description":"The field name to filter on"},"moveType":{"type":"string","maxLength":100,"description":"The Move type of the field (e.g., u64, address, bool)"},"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","contains"],"description":"The comparison operator"},"value":{"type":"string","maxLength":500,"description":"The value to compare against"}},"required":["field","moveType","operator","value"]}},"address":{"type":"string","nullable":true},"coinType":{"type":"string","nullable":true},"objectId":{"type":"string","nullable":true},"active":{"type":"boolean"},"organizationId":{"type":"string"},"projectId":{"type":"string"},"createdAt":{"type":"string","nullable":true},"updatedAt":{"type":"string","nullable":true}},"required":["id","type","active","organizationId","projectId"]}},"required":["data"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Warp subscription limit reached for subscription tier","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/warp/addresses":{"post":{"tags":["Warp"],"summary":"Create address stream subscription","description":"Create a new Warp subscription for monitoring a Sui address. Connect to the stream via GET /v1/warp/{id}/connect to receive real-time activity events.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string","minLength":1,"maxLength":100,"description":"The Sui address to monitor for activity"}},"required":["address"]}}}},"responses":{"201":{"description":"Warp subscription created successfully","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["address"]},"eventType":{"type":"string","nullable":true},"sender":{"type":"string","nullable":true},"eventFieldFilters":{"type":"array","nullable":true,"items":{"type":"object","properties":{"field":{"type":"string","maxLength":100,"description":"The field name to filter on"},"moveType":{"type":"string","maxLength":100,"description":"The Move type of the field (e.g., u64, address, bool)"},"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","contains"],"description":"The comparison operator"},"value":{"type":"string","maxLength":500,"description":"The value to compare against"}},"required":["field","moveType","operator","value"]}},"address":{"type":"string"},"coinType":{"type":"string","nullable":true},"objectId":{"type":"string","nullable":true},"active":{"type":"boolean"},"organizationId":{"type":"string"},"projectId":{"type":"string"},"createdAt":{"type":"string","nullable":true},"updatedAt":{"type":"string","nullable":true}},"required":["id","type","eventType","sender","eventFieldFilters","address","active","organizationId","projectId"]}},"required":["data"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Warp subscription limit reached for subscription tier","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/warp/coins":{"post":{"tags":["Warp"],"summary":"Create coin stream subscription","description":"Create a new Warp subscription for monitoring coin balance changes. Connect to the stream via GET /v1/warp/{id}/connect to receive real-time balance change events.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"address":{"type":"string","minLength":1,"maxLength":100,"description":"The Sui address to monitor for coin balance changes"},"coinType":{"type":"string","minLength":1,"maxLength":200,"description":"The coin type to track (e.g., 0x2::sui::SUI)"}},"required":["address","coinType"]}}}},"responses":{"201":{"description":"Warp subscription created successfully","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["coin"]},"eventType":{"type":"string","nullable":true},"sender":{"type":"string","nullable":true},"eventFieldFilters":{"type":"array","nullable":true,"items":{"type":"object","properties":{"field":{"type":"string","maxLength":100,"description":"The field name to filter on"},"moveType":{"type":"string","maxLength":100,"description":"The Move type of the field (e.g., u64, address, bool)"},"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","contains"],"description":"The comparison operator"},"value":{"type":"string","maxLength":500,"description":"The value to compare against"}},"required":["field","moveType","operator","value"]}},"address":{"type":"string"},"coinType":{"type":"string","nullable":true},"objectId":{"type":"string","nullable":true},"active":{"type":"boolean"},"organizationId":{"type":"string"},"projectId":{"type":"string"},"createdAt":{"type":"string","nullable":true},"updatedAt":{"type":"string","nullable":true}},"required":["id","type","eventType","sender","eventFieldFilters","address","coinType","active","organizationId","projectId"]}},"required":["data"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Warp subscription limit reached for subscription tier","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/warp/objects":{"post":{"tags":["Warp"],"summary":"Create object stream subscription","description":"Create a new Warp subscription for monitoring a Sui object. Connect to the stream via GET /v1/warp/{id}/connect to receive real-time object change events.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"objectId":{"type":"string","minLength":1,"maxLength":100,"description":"The Sui object ID to monitor for changes"}},"required":["objectId"]}}}},"responses":{"201":{"description":"Warp subscription created successfully","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["object"]},"eventType":{"type":"string","nullable":true},"sender":{"type":"string","nullable":true},"eventFieldFilters":{"type":"array","nullable":true,"items":{"type":"object","properties":{"field":{"type":"string","maxLength":100,"description":"The field name to filter on"},"moveType":{"type":"string","maxLength":100,"description":"The Move type of the field (e.g., u64, address, bool)"},"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","contains"],"description":"The comparison operator"},"value":{"type":"string","maxLength":500,"description":"The value to compare against"}},"required":["field","moveType","operator","value"]}},"address":{"type":"string","nullable":true},"coinType":{"type":"string","nullable":true},"objectId":{"type":"string"},"active":{"type":"boolean"},"organizationId":{"type":"string"},"projectId":{"type":"string"},"createdAt":{"type":"string","nullable":true},"updatedAt":{"type":"string","nullable":true}},"required":["id","type","eventType","sender","eventFieldFilters","objectId","active","organizationId","projectId"]}},"required":["data"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Warp subscription limit reached for subscription tier","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/warp":{"get":{"tags":["Warp"],"summary":"List Warp subscriptions","description":"List all Warp subscriptions for the current project (determined by API key)","responses":{"200":{"description":"List of Warp subscriptions","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["event","address","coin","object"]},"eventType":{"type":"string","nullable":true},"sender":{"type":"string","nullable":true},"eventFieldFilters":{"type":"array","nullable":true,"items":{"type":"object","properties":{"field":{"type":"string","maxLength":100,"description":"The field name to filter on"},"moveType":{"type":"string","maxLength":100,"description":"The Move type of the field (e.g., u64, address, bool)"},"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","contains"],"description":"The comparison operator"},"value":{"type":"string","maxLength":500,"description":"The value to compare against"}},"required":["field","moveType","operator","value"]}},"address":{"type":"string","nullable":true},"coinType":{"type":"string","nullable":true},"objectId":{"type":"string","nullable":true},"active":{"type":"boolean"},"organizationId":{"type":"string"},"projectId":{"type":"string"},"createdAt":{"type":"string","nullable":true},"updatedAt":{"type":"string","nullable":true}},"required":["id","type","active","organizationId","projectId"]}}},"required":["data"]}}}},"401":{"description":"Unauthorized - invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/warp/{id}":{"get":{"tags":["Warp"],"summary":"Get Warp subscription","description":"Get details of a specific Warp subscription by ID","parameters":[{"schema":{"type":"string","minLength":1,"description":"The stream subscription ID"},"required":true,"description":"The stream subscription ID","name":"id","in":"path"}],"responses":{"200":{"description":"Warp subscription details","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["event","address","coin","object"]},"eventType":{"type":"string","nullable":true},"sender":{"type":"string","nullable":true},"eventFieldFilters":{"type":"array","nullable":true,"items":{"type":"object","properties":{"field":{"type":"string","maxLength":100,"description":"The field name to filter on"},"moveType":{"type":"string","maxLength":100,"description":"The Move type of the field (e.g., u64, address, bool)"},"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","contains"],"description":"The comparison operator"},"value":{"type":"string","maxLength":500,"description":"The value to compare against"}},"required":["field","moveType","operator","value"]}},"address":{"type":"string","nullable":true},"coinType":{"type":"string","nullable":true},"objectId":{"type":"string","nullable":true},"active":{"type":"boolean"},"organizationId":{"type":"string"},"projectId":{"type":"string"},"createdAt":{"type":"string","nullable":true},"updatedAt":{"type":"string","nullable":true}},"required":["id","type","active","organizationId","projectId"]}},"required":["data"]}}}},"401":{"description":"Unauthorized - invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Warp subscription not found or does not belong to this project","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"put":{"tags":["Warp"],"summary":"Update Warp subscription","description":"Update a Warp subscription (e.g., toggle active status)","parameters":[{"schema":{"type":"string","minLength":1,"description":"The stream subscription ID to update"},"required":true,"description":"The stream subscription ID to update","name":"id","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"active":{"type":"boolean","description":"Enable or disable the subscription"}}}}}},"responses":{"200":{"description":"Warp subscription updated successfully","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["event","address","coin","object"]},"eventType":{"type":"string","nullable":true},"sender":{"type":"string","nullable":true},"eventFieldFilters":{"type":"array","nullable":true,"items":{"type":"object","properties":{"field":{"type":"string","maxLength":100,"description":"The field name to filter on"},"moveType":{"type":"string","maxLength":100,"description":"The Move type of the field (e.g., u64, address, bool)"},"operator":{"type":"string","enum":["eq","neq","gt","gte","lt","lte","contains"],"description":"The comparison operator"},"value":{"type":"string","maxLength":500,"description":"The value to compare against"}},"required":["field","moveType","operator","value"]}},"address":{"type":"string","nullable":true},"coinType":{"type":"string","nullable":true},"objectId":{"type":"string","nullable":true},"active":{"type":"boolean"},"organizationId":{"type":"string"},"projectId":{"type":"string"},"createdAt":{"type":"string","nullable":true},"updatedAt":{"type":"string","nullable":true}},"required":["id","type","active","organizationId","projectId"]}},"required":["data"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Warp subscription not found or does not belong to this project","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"delete":{"tags":["Warp"],"summary":"Delete Warp subscription","description":"Delete a Warp subscription by ID","parameters":[{"schema":{"type":"string","minLength":1,"description":"The stream subscription ID to delete"},"required":true,"description":"The stream subscription ID to delete","name":"id","in":"path"}],"responses":{"200":{"description":"Warp subscription deleted successfully","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"]}}}},"401":{"description":"Unauthorized - invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Warp subscription not found or does not belong to this project","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}},"security":[{"ApiKeyAuth":[]}]}