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
| Field | Description |
|---|---|
total_feeds_created | Number of feeds this wallet has created |
total_entries_published | Total entries published across all feeds |
total_revenue_earned | Total USDC earned from content sales (in wei) |
total_items_sold | Number of individual entry purchases |
unique_buyers_count | Distinct wallets that purchased from this user |
total_purchases_made | Number of purchases this wallet made |
total_amount_spent | Total USDC spent on content (in wei) |
unique_feeds_purchased_from | Distinct feeds purchased from |
revenue_rank | Platform ranking by revenue (null if unranked) |
purchases_rank | Platform ranking by purchases (null if unranked) |
last_calculated_at | When 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
- wallets.get() - Get wallet profile
- leaderboards.topProviders() - Top providers by revenue
- leaderboards.topBuyers() - Top buyers by purchases