Skip to main content

Account & Authentication

  1. Login to ChainStream Dashboard
  2. Go to Apps page
  3. Click Create New App
  4. Get your Client ID and Client Secret
  5. Use Client ID and Client Secret to request an Access Token (JWT) from the Auth service
See Authentication docs for details.

Currently supported chains:
ChainStatusNotes
Ethereum✅ SupportedIncluding mainnet and major L2s
Solana✅ Supported
BSC✅ Supported
Polygon✅ Supported
Arbitrum✅ Supported
Optimism✅ Supported
Base✅ Supported
Tron✅ Supported
See Realtime Streaming for more details.
Data TypeLatency
Real-time price (WebSocket)< 2ms (P99)
REST API queries< 100ms
Historical data queries< 500ms
Latency may vary based on network conditions and data complexity.
Data TypeUpdate Frequency
Token priceReal-time (triggered by each trade)
Wallet holdingsUpdated per block
Smart Money labelsDaily updates
Use WebSocket for the most real-time data push.

Free plan limits:
  • Quota: 30K Units/month
  • Request rate: 10 requests/sec
  • Data latency: May have 1-2 second delay
  • SLA: Not guaranteed
  • Overage: Returns 403 error when quota exhausted, resets next month
Suitable for development testing and POC, not recommended for production.
  1. Login to Dashboard
  2. View current month usage, remaining quota, and historical trends on the Usage page
MethodSupported Plans
Credit Card (Visa, MasterCard, AMEX)All plans
Cryptocurrency (USDT, USDC)Starter and above
Bank TransferEnterprise / Custom
Cryptocurrency payments support ERC-20 and TRC-20 networks.
  • Upgrade: Takes effect immediately, prorated charges apply
  • Downgrade: Takes effect in next billing cycle
Manage in Dashboard → Billing → Subscription.
No. Monthly quotas reset at month end and do not roll over. Choose a plan based on your actual usage.

Technical Issues

  • 429 error: Request rate exceeded
  • 403 error: Quota exhausted
Troubleshooting:
  1. 429 - Check if rate limited
    • Free plan: 10 requests/minute
    • Paid plans: See API Security
  2. 403 - Check if quota exhausted
    • View remaining quota in Dashboard → Usage
    • Paid plans can purchase additional quota to restore service
Solutions:
  • 429: Implement request throttling or exponential backoff retry
  • 403: Purchase additional quota or upgrade plan
  • Use WebSocket instead of polling to reduce request count
// Error handling example
async function handleApiError(error) {
  if (error.status === 429) {
    // Rate limited, wait and retry
    await sleep(1000);
    return retry();
  } else if (error.status === 403) {
    // Quota exhausted, need to purchase additional quota
    console.error('Quota exhausted, please purchase additional quota in Dashboard');
  }
}
Implement an auto-reconnect mechanism:
class ChainStreamWebSocket {
  constructor(baseUrl, accessToken) {
    this.baseUrl = baseUrl;
    this.accessToken = accessToken;
    this.reconnectDelay = 1000;
    this.maxReconnectDelay = 30000;
    this.connect();
  }

  connect() {
    // Pass token via URL parameter
    const url = `${this.baseUrl}?token=${this.accessToken}`;
    this.ws = new WebSocket(url);
    this.ws.onopen = () => {
      console.log('Connected');
      this.reconnectDelay = 1000; // Reset delay
    };
    this.ws.onclose = () => {
      console.log('Disconnected, reconnecting...');
      setTimeout(() => this.connect(), this.reconnectDelay);
      // Exponential backoff
      this.reconnectDelay = Math.min(
        this.reconnectDelay * 2,
        this.maxReconnectDelay
      );
    };
    this.ws.onerror = (error) => {
      console.error('WebSocket error:', error);
    };
  }
}
Reconnection tips:
  • Use exponential backoff (1s → 2s → 4s → … → 30s)
  • Set maximum reconnect delay (e.g., 30 seconds)
  • Re-subscribe to data after successful reconnection
All APIs return JSON format.Success response:
{
  "chain": "solana",
  "address": "So11111111111111111111111111111111111111112",
  "name": "Wrapped SOL",
  "symbol": "SOL",
  "decimals": 9,
  "price": 95.42
}
Error response:
{
  "error": {
    "code": "INVALID_TOKEN",
    "message": "Token not found"
  }
}
See Error Codes for common error codes.
Method 1: Use API PlaygroundUse the “Try It” feature on API Reference pages to test without writing code.Method 2: Use cURLAdd -v flag for detailed request info:
curl -v "https://api.chainstream.io/v1/token/{chain}/{address}/metadata" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

FeatureKYA (Address Verification)KYT Report
PurposeVerify address risk and profile analysisTransaction-level risk reports
InputWallet addressTransaction hash or address
OutputRisk level + address type + risk exposuresTransaction-related risk analysis
Typical use caseAddress screening before user registration/depositCompliance check for specific transactions
See Security Compliance docs.
Address verification returns these fields:
FieldDescriptionExample Values
RiskRisk levelLow, Medium, High, Severe
StatusVerification statusCOMPLETE, PENDING
Address TypeAddress typePRIVATE_WALLET, EXCHANGE, CONTRACT, etc.
Risk ExposuresRisk exposure detailsRisk labels and associated amounts
Address Verification returns these risk levels:
Risk LevelMeaningRecommended Action
LowLow risk, no obvious suspicious associationsProcess normally
MediumMedium risk, some suspicious associationsManual review recommended
HighHigh risk, significant suspicious associationsReject or enhanced review recommended
SevereSevere risk, direct association with sanctioned/illegal entitiesStrongly recommend rejection
Note: Specific handling policies should be based on your business compliance requirements. Above are reference suggestions only.
Risk Exposures shows address associations with various risk entities. Common labels include:High-risk labels (Severe):
LabelDescription
sanctioned entityAssociated with sanctioned entity
sanctioned jurisdictionAssociated with sanctioned jurisdiction
terrorist financingAssociated with terrorist financing
Neutral/low-risk labels:
LabelDescription
bridgeFunds transferred via cross-chain bridge
decentralized exchangeTraded via DEX
atmTraded via crypto ATM
Other risk labels:
LabelDescription
mixerVia mixing service
gamblingAssociated with gambling platform
darknetAssociated with darknet market
Each label shows:
  • direct / indirect: Direct or indirect association
  • amount: Associated fund amount
  • percentage: Percentage of total transaction volume
TypeMeaningRisk Level
directAddress directly interacted with risk entityHigher
indirectAddress indirectly associated via intermediate addressesRelatively lower
Examples:
  • sanctioned entity + direct: Address directly transferred to sanctioned address
  • sanctioned entity + indirect: Associated address of this address previously interacted with sanctioned address
Even indirect associations warrant careful handling if involving Severe-level labels (sanctions, terrorist financing).
Address TypeDescription
PRIVATE_WALLETPersonal wallet address
EXCHANGECentralized exchange address
CONTRACTSmart contract address
MINING_POOLMining pool address
MERCHANTMerchant address
PAYMENT_PROCESSORPayment processor
Address type helps understand fund flow and business context.
curl -X POST "https://api.chainstream.io/v1/kya/address/verify" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "address": "So11111111111111111111111111111111111111112",
    "chain": "sol"
  }'
Response example:
{
  "address": "So11111111111111111111111111111111111111112",
  "risk": "Low",
  "status": "COMPLETE",
  "address_type": "PRIVATE_WALLET",
  "risk_exposures": [
    {
      "label": "sanctioned entity",
      "severity": "Severe",
      "type": "indirect",
      "amount": 372262.76,
      "percentage": 0.6
    },
    {
      "label": "bridge",
      "severity": "Info",
      "type": "indirect",
      "amount": 816082.22,
      "percentage": 1.3
    }
  ]
}
OperationResponse Time
New address first verificationUsually 1-5 seconds
Cached address query< 500ms
Complex address (many transactions)May take 5-10 seconds
Status PENDING indicates analysis in progress; retry later for complete results.
KYT/KYA APIs do not consume plan Units. They are charged from a separate KYT account balance (in USD).
OperationCost
Deposit Risk Assessment$0.25/call
Withdrawal Risk Assessment$0.25/call
Register Address$1.25/call
Please top up at Dashboard → KYT Service.

MCP (Model Context Protocol) is a protocol proposed by Anthropic that enables AI models to call external tools.ChainStream provides an MCP Server that lets Claude and other AIs directly query on-chain data.See MCP Server docs.
  1. Install ChainStream MCP Server
  2. Configure Claude Desktop’s MCP settings
  3. Restart Claude Desktop
  4. Start chatting - Claude can automatically call ChainStream to query data
See Claude Integration guide for detailed setup.
Not currently supported. ChainStream MCP Server only provides read operations:
  • Query token prices and information
  • Query wallet holdings and transaction history
  • Execute KYT/KYA risk assessments
Does not support automatic transaction execution, transfers, or other write operations for security reasons.
MCP calls are billed the same as direct API calls, consuming Units based on the actual API type called.

Contact Support

ChannelUse CaseResponse Time
Email [email protected]General questionsWithin 24 hours
Discord communityTechnical discussions, usage questionsCommunity help
Dedicated account managerEnterprise / Custom customersWithin 4 hours
When contacting, please provide:
  • Client ID
  • Error messages and reproduction steps
Thanks for helping us improve the documentation!

Didn’t find an answer?

Contact Us

If the above FAQ didn’t answer your question, please contact our technical support team.