---
title: "Get full public profile (consolidated)"
method: GET
path: "/v1/profiles/{handle}/full"
tags: ["profiles"]
---

# Get full public profile (consolidated)

`GET /v1/profiles/{handle}/full`

Get all public profile data in a single request.

Combines profile metadata, stats, earning addresses, social links,
supporters, top content, leaderboard rank, and active giveaways.

Replaces the need for 5+ separate API calls per profile page load,
reducing database connection usage from 5-12 to 1-2 connections.

This is a public endpoint - no authentication required.

## Path parameters

- `handle` string, required — User handle (case-insensitive)

## Query parameters

- `enrich` boolean — Include content metadata (title, description, thumbnail).
- `window` '24h' | '7d' | '30d' | 'all' — Time window for leaderboard rank.

## Response `200`

Successful Response

- PublicProfileFullResponse — Response model for GET /v1/profiles/{handle}/full. Consolidated endpoint that returns all profile data in a single response, replacing 5+ separate API calls per profile page load.
  - `handle` string, required — User's handle (e.g., 'alice')
  - `description` string, nullable — Profile bio (max 280 characters)
  - `avatar_url` string, nullable — User-selected avatar URL
  - `theme` ProfileTheme — Theme customization for a public profile.
    - `accent_color` string, nullable — Hex accent color (e.g., '#4CAF50')
    - `preset` string, nullable — Theme preset name (e.g., 'dark', 'light', 'ocean')
  - `created_at` string, required — Account creation date (ISO 8601)
  - `stats` ProfileStats, required — Aggregated tip statistics for a public profile.
    - `tips_sent_count` integer, required — Total number of tips sent
    - `tips_sent_usd` string, required — Total USD value of tips sent
    - `tips_received_count` integer, required — Total number of tips received
    - `tips_received_usd` string, required — Total USD value of tips received
  - `earning_addresses` ProfileEarningAddress[] — Wallets that can earn tips
    - `address` string, required — Wallet address for earning tips
    - `network` string, required — Network (e.g., 'base', 'solana')
    - `label` string, required — Display label (e.g., 'Earning Wallet', 'Linked Wallet')
    - `is_primary` boolean — Whether this is the primary earning wallet
  - `social_links` ProfileSocialLink[] — Linked social profiles
    - `platform` string, required — Platform name (e.g., 'x', 'github', 'youtube')
    - `url` string, required — Full URL to the social profile
    - `verified` boolean — Whether ownership has been verified
    - `verified_at` string, nullable — When ownership was verified (ISO 8601)
    - `is_featured` boolean — Whether this link is featured prominently on the profile
    - `display_name` string, nullable — Display name from the platform profile
  - `referral_code` string, nullable — User's shareable referral code
  - `tip_to_talk_min` number, nullable — Minimum tip in USD for paid messages (Tip to Talk). NULL = disabled.
  - `is_claimed` boolean — Whether this profile has been claimed by the creator. Pre-registered profiles are unclaimed until the creator authenticates.
  - `tip_button_label` string — CTA label for the tip button on the profile page. Feed/content contexts should always show 'Tip' regardless.
  - `supporters` ProfileSupportersResponse, required — Response model for GET /v1/profiles/{handle}/supporters.
    - `supporters` ProfileSupporter[] — Supporters ordered by total USD
      - `handle` string, nullable — Supporter's Grove handle (if they have one)
      - `address` string, required — Supporter's wallet address
      - `amount_usd` string, required — Total USD tipped to this profile
      - `tip_count` integer, required — Number of tips sent to this profile
      - `last_tipped_at` string, required — Most recent tip timestamp (ISO 8601)
    - `total_count` integer — Total unique supporters
  - `top_content` ProfileTopContentResponse, required — Response model for GET /v1/profiles/{handle}/top-content.
    - `items` ProfileTopContentItem[] — Top content ordered by total USD
      - `url` string, required — URL of the tipped content
      - `platform` string, required — Detected platform (e.g., 'youtube', 'x', 'github')
      - `total_usd` string, required — Total USD tipped to this content
      - `tip_count` integer, required — Number of tips received
      - `unique_tippers` integer, required — Number of unique tippers
      - `last_tipped_at` string, nullable — Most recent tip timestamp (ISO 8601)
      - `content` ProfileTopContentContent — Enriched content metadata for a top content item.
        - `title` string, nullable — Content title (video title, post title, article headline).
        - `description` string, nullable — Content excerpt or description (truncated).
        - `image_url` string, nullable — Thumbnail or preview image URL (HTTPS only).
        - `author_name` string, nullable — Content author or channel name.
        - `published_at` string, nullable — Original publish date (ISO 8601).
      - `enrichment_status` string — Status of content enrichment: 'cached', 'pending', or 'unavailable'.
  - `rank` LeaderboardRankResponse, required — Response model for GET /v1/leaderboard/rank/{handle}.
    - `handle` string, required — User's handle
    - `tipper_rank` integer, nullable — 1-indexed tipper rank, null if no tipping activity
    - `tippee_rank` integer, nullable — 1-indexed tippee/earner rank, null if no earning activity
    - `tipper_total_usd` string, nullable — Total USD tipped
    - `tippee_total_usd` string, nullable — Total USD earned from tips
    - `total_tippers` integer — Total participants on tipper leaderboard
    - `total_tippees` integer — Total participants on tippee leaderboard
  - `giveaways` ProfileGiveawaysResponse, required — Response model for GET /v1/profiles/{handle}/giveaways.
    - `giveaways` ProfileGiveaway[] — Active giveaways
      - `id` string, required — Giveaway ID
      - `title` string, required — Giveaway title
      - `description` string, required — Giveaway description
      - `minimum_tip_usd` string, required — Minimum tip to enter
      - `num_winners` integer, required — Number of winners to be drawn
      - `ends_at` string, required — End timestamp (ISO 8601)
      - `entry_count` integer — Total entries so far
      - `unique_participants` integer — Number of unique tippers who entered
      - `total_tips_usd` string — Total USD tipped into this giveaway
      - `status` string, required — Giveaway status (active)

## Other responses

- `404` — Profile not found or private
- `422` — Validation Error

---

[API](https://skmtc.net/grove/apis/grove-api.md) · [All operations](https://skmtc.net/grove/apis/grove-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/grove/grove-api/revisions/f286b48a8105/schema)
