Skip to content

wallets.getStats()

Retrieve comprehensive statistics for a wallet, including revenue, purchases, and platform rankings.

Signature

wallets.getStats(walletId: string): Promise<WalletStats>

Parameters

walletId

  • Type: string
  • Required: Yes
  • Format: UUID

The unique identifier of the wallet.

Returns

  • Type: Promise<WalletStats>
interface WalletStats {
  wallet_id: string;
  total_feeds_created: number;
  total_entries_published: number;
  total_revenue_earned: string;        // Wei amount
  total_items_sold: number;
  unique_buyers_count: number;
  total_purchases_made: number;
  total_amount_spent: string;          // Wei amount
  unique_feeds_purchased_from: number;
  revenue_rank?: number | null;        // Platform ranking
  purchases_rank?: number | null;      // Platform ranking
  last_calculated_at: number;          // Unix timestamp
  created_at: number;
  updated_at: number;
}

Usage

Basic Example

const wallet = await grapevine.wallets.getByAddress('0x742d35Cc...');
const stats = await grapevine.wallets.getStats(wallet.id);
 
console.log('Feeds created:', stats.total_feeds_created);
console.log('Entries published:', stats.total_entries_published);
console.log('Items sold:', stats.total_items_sold);
console.log('Revenue:', formatUSDC(stats.total_revenue_earned));

Format Currency Values

function formatUSDC(weiAmount: string): string {
  // USDC has 6 decimals
  const usdc = Number(BigInt(weiAmount)) / 1e6;
  return new Intl.NumberFormat('en-US', {
    style: 'currency',
    currency: 'USD'
  }).format(usdc);
}
 
const stats = await grapevine.wallets.getStats(walletId);
console.log('Revenue earned:', formatUSDC(stats.total_revenue_earned)); // "$1,234.56"
console.log('Amount spent:', formatUSDC(stats.total_amount_spent));     // "$567.89"

Dashboard Display

async function getDashboardData() {
  const myWallet = await grapevine.wallets.getMe();
  const stats = await grapevine.wallets.getStats(myWallet.id);
  
  return {
    // Creator stats
    creator: {
      feedsCreated: stats.total_feeds_created,
      entriesPublished: stats.total_entries_published,
      revenue: formatUSDC(stats.total_revenue_earned),
      itemsSold: stats.total_items_sold,
      uniqueBuyers: stats.unique_buyers_count,
      revenueRank: stats.revenue_rank 
        ? `#${stats.revenue_rank}` 
        : 'Unranked'
    },
    // Consumer stats
    consumer: {
      purchasesMade: stats.total_purchases_made,
      amountSpent: formatUSDC(stats.total_amount_spent),
      feedsPurchasedFrom: stats.unique_feeds_purchased_from,
      purchasesRank: stats.purchases_rank 
        ? `#${stats.purchases_rank}` 
        : 'Unranked'
    },
    lastUpdated: new Date(stats.last_calculated_at * 1000)
  };
}

Compare Users

async function compareUsers(address1: string, address2: string) {
  const [wallet1, wallet2] = await Promise.all([
    grapevine.wallets.getByAddress(address1),
    grapevine.wallets.getByAddress(address2)
  ]);
  
  const [stats1, stats2] = await Promise.all([
    grapevine.wallets.getStats(wallet1.id),
    grapevine.wallets.getStats(wallet2.id)
  ]);
  
  return {
    user1: {
      username: wallet1.username,
      revenue: stats1.total_revenue_earned,
      rank: stats1.revenue_rank
    },
    user2: {
      username: wallet2.username,
      revenue: stats2.total_revenue_earned,
      rank: stats2.revenue_rank
    }
  };
}

React Component

function WalletStats({ walletId }: { walletId: string }) {
  const [stats, setStats] = useState<WalletStats | null>(null);
  
  useEffect(() => {
    grapevine.wallets.getStats(walletId)
      .then(setStats)
      .catch(console.error);
  }, [walletId]);
  
  if (!stats) return <div>Loading stats...</div>;
  
  return (
    <div className="grid grid-cols-2 gap-4">
      <StatCard 
        label="Revenue Earned" 
        value={formatUSDC(stats.total_revenue_earned)} 
      />
      <StatCard 
        label="Items Sold" 
        value={stats.total_items_sold.toString()} 
      />
      <StatCard 
        label="Purchases Made" 
        value={stats.total_purchases_made.toString()} 
      />
      <StatCard 
        label="Amount Spent" 
        value={formatUSDC(stats.total_amount_spent)} 
      />
      {stats.revenue_rank && (
        <StatCard 
          label="Revenue Rank" 
          value={`#${stats.revenue_rank}`} 
        />
      )}
    </div>
  );
}

Stats Fields Explained

FieldDescription
total_feeds_createdNumber of feeds this wallet has created
total_entries_publishedTotal entries published across all feeds
total_revenue_earnedTotal USDC earned from content sales (in wei)
total_items_soldNumber of individual entry purchases
unique_buyers_countDistinct wallets that purchased from this user
total_purchases_madeNumber of purchases this wallet made
total_amount_spentTotal USDC spent on content (in wei)
unique_feeds_purchased_fromDistinct feeds purchased from
revenue_rankPlatform ranking by revenue (null if unranked)
purchases_rankPlatform ranking by purchases (null if unranked)
last_calculated_atWhen stats were last recalculated

Notes

  • Authentication: Not required - public endpoint
  • Currency Format: All amounts are in wei (USDC has 6 decimals)
  • Rankings: May be null for new users or users with no activity
  • Caching: Stats are periodically recalculated, check last_calculated_at

Related