gRPC
Stream proprietary trading indicators for liquidity pools. Indicators are calculated and delivered every 1 minute for pools that have been updated in our system.
Endpoint
enterprise.guardis.io:443Authentication
Include your API key in the request metadata using the x-api-key field.
x-api-key: your_api_key_hereService Definition
syntax = "proto3";
package guardis.indicators.v1;
import "google/protobuf/timestamp.proto";
service IndicatorsService {
// Stream indicator updates every minute for updated pools
rpc StreamIndicators(StreamIndicatorsRequest) returns (stream IndicatorUpdate);
}
message StreamIndicatorsRequest {
// Reserved for future filtering options
}
message IndicatorUpdate {
// Timestamp when the update was generated
google.protobuf.Timestamp timestamp = 1;
// All indicators for pools updated during this interval
repeated CurrentIndicator indicators = 2;
}
message CurrentIndicator {
// Identification
string pair_address = 1;
string token_address = 2;
// Wallet metrics
int64 total_wallets = 3;
int64 organic_wallets = 4;
int64 organic_profitable_wallets = 5;
string organic_to_total_wallets_ratio = 6;
string bot_to_total_wallets_ratio = 7;
string profitable_organic_to_total_organic_ratio = 8;
// Volume metrics
string total_volume_usd = 9;
string organic_volume_usd = 10;
string bot_volume_ratio = 11;
string organic_volume_ratio = 12;
string profitable_volume = 13;
string profitable_volume_total_volume_ratio = 14;
// Behavioral metrics
string organic_mean_hold_seconds = 15;
string organic_mean_trade_frequency_seconds = 16;
// Smart money metrics
string smart_money_score = 17;
string raw_smart_money_score = 18;
string smart_money_influx_10min = 19;
string smart_money_outflux_10min = 20;
string raw_smart_money_influx = 21;
string raw_smart_money_outflux = 22;
int64 smart_holders = 23;
int64 raw_holders = 24;
string smart_to_raw_holders_ratio = 25;
// Social metrics
string social_sentiment_score = 26;
int64 social_blast_radius_score = 27;
// Price & status
string price_usd = 28;
string status = 29;
int32 attempts = 30;
google.protobuf.Timestamp created_at = 31;
google.protobuf.Timestamp updated_at = 32;
}Request Parameters
StreamIndicatorsRequest
Currently accepts no parameters. Future versions may support filtering options.
Response Format
The server streams IndicatorUpdate messages every minute containing indicators for all pools that were updated during that interval.
IndicatorUpdate
timestamp
google.protobuf.Timestamp
Timestamp when the update was generated
indicators
repeated CurrentIndicator
All indicators for pools updated during this interval
CurrentIndicator
Identification
pair_address
string
The on-chain address of the liquidity pool
token_address
string
The mint address of the token
Wallet Metrics
total_wallets
int64
Total number of unique wallets that have traded this token
organic_wallets
int64
Number of wallets classified as organic (non-bot) traders
organic_profitable_wallets
int64
Number of organic wallets currently in profit
organic_to_total_wallets_ratio
string
Ratio of organic wallets to total wallets (0-1)
bot_to_total_wallets_ratio
string
Ratio of bot wallets to total wallets (0-1)
profitable_organic_to_total_organic_ratio
string
Ratio of profitable organic wallets to total organic wallets (0-1)
Volume Metrics
total_volume_usd
string
Total trading volume in USD
organic_volume_usd
string
Trading volume from organic wallets in USD
bot_volume_ratio
string
Ratio of bot volume to total volume (0-1)
organic_volume_ratio
string
Ratio of organic volume to total volume (0-1)
profitable_volume
string
Volume from profitable trades in USD
profitable_volume_total_volume_ratio
string
Ratio of profitable volume to total volume (0-1)
Behavioral Metrics
organic_mean_hold_seconds
string
Average hold time for organic wallets in seconds
organic_mean_trade_frequency_seconds
string
Average time between trades for organic wallets in seconds
Smart Money Metrics
smart_money_score
string
Proprietary score indicating smart money activity (0-100)
raw_smart_money_score
string
Unadjusted smart money score before normalization
smart_money_influx_10min
string
Smart money inflow over the last 10 minutes in USD
smart_money_outflux_10min
string
Smart money outflow over the last 10 minutes in USD
raw_smart_money_influx
string
Unadjusted smart money inflow in USD
raw_smart_money_outflux
string
Unadjusted smart money outflow in USD
smart_holders
int64
Number of wallets classified as smart money
raw_holders
int64
Total number of current holders
smart_to_raw_holders_ratio
string
Ratio of smart money holders to total holders (0-1)
Social Metrics
social_sentiment_score
string
Sentiment score derived from social signals (-1 to 1)
social_blast_radius_score
int64
Estimated social reach/exposure metric
Price & Status
price_usd
string
Current token price in USD
status
string
Processing status of the indicator
attempts
int32
Number of calculation attempts
created_at
google.protobuf.Timestamp
Timestamp when the indicator was first created
updated_at
google.protobuf.Timestamp
Timestamp when the indicator was last updated
Note: Decimal values are returned as strings to preserve precision.
Example Usage
Python:
import grpc
from guardis.indicators.v1 import indicators_pb2, indicators_pb2_grpc
metadata = [("x-api-key", "your_api_key_here")]
with grpc.secure_channel("enterprise.guardis.io:443", grpc.ssl_channel_credentials()) as channel:
stub = indicators_pb2_grpc.IndicatorsServiceStub(channel)
request = indicators_pb2.StreamIndicatorsRequest()
for update in stub.StreamIndicators(request, metadata=metadata):
print(f"Update at {update.timestamp}: {len(update.indicators)} pools")
for indicator in update.indicators:
print(f"{indicator.token_address}:")
print(f" Smart Money Score: {indicator.smart_money_score}")
print(f" Organic Ratio: {float(indicator.organic_to_total_wallets_ratio) * 100:.1f}%")
print(f" 10min Influx: ${indicator.smart_money_influx_10min}")Go:
package main
import (
"context"
"log"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials"
"google.golang.org/grpc/metadata"
pb "github.com/your-org/guardis-go/indicators/v1"
)
func main() {
creds := credentials.NewTLS(nil)
conn, err := grpc.Dial("enterprise.guardis.io:443", grpc.WithTransportCredentials(creds))
if err != nil {
log.Fatalf("Failed to connect: %v", err)
}
defer conn.Close()
client := pb.NewIndicatorsServiceClient(conn)
ctx := metadata.AppendToOutgoingContext(
context.Background(),
"x-api-key", "your_api_key_here",
)
request := &pb.StreamIndicatorsRequest{}
stream, err := client.StreamIndicators(ctx, request)
if err != nil {
log.Fatalf("Failed to stream: %v", err)
}
for {
update, err := stream.Recv()
if err != nil {
log.Fatalf("Stream error: %v", err)
}
log.Printf("Update at %v: %d pools", update.Timestamp, len(update.Indicators))
for _, indicator := range update.Indicators {
log.Printf("%s:", indicator.TokenAddress)
log.Printf(" Smart Money Score: %s", indicator.SmartMoneyScore)
log.Printf(" 10min Influx: $%s", indicator.SmartMoneyInflux_10Min)
}
}
}Connection Best Practices
Expect updates every minute — Plan your processing around this cadence
Implement reconnection logic — Network interruptions happen; automatically reconnect with exponential backoff
Use deadlines — Set appropriate deadlines for your streaming calls to handle stale connections
Handle stream errors gracefully — Check for
io.EOFand gRPC status codes to determine if reconnection is needed
Last updated
