---
title: "Get profile by username"
method: GET
path: "/api/v1/profiles/u/{username}"
tags: ["Profiles"]
---

# Get profile by username

`GET /api/v1/profiles/u/{username}`

## Request

- Base URL: `https://api.proof.holdings`
- URL: `https://api.proof.holdings/api/v1/profiles/u/{username}`
- Auth: none declared

Get a public profile by username.

## Path parameters

- `username` string, required: Username

## Response `200`

Public profile

- PublicProfile: Public profile
  - `id` string, required: MongoDB ObjectId
  - `display_name` string
  - `bio` string
  - `avatar_url` string
  - `business_name` string
  - `is_business` boolean
  - `is_public` boolean, required
  - `is_primary` boolean
  - `username` string
  - `theme` ProfileTheme: Profile theme customization
    - `primary_color` string
    - `background_type` 'solid' | 'gradient'
    - `background_color` string
    - `gradient_start` string
    - `gradient_end` string
    - `font_style` 'default' | 'modern' | 'classic'
  - `custom_links` CustomLink[]
    - `title` string, required
    - `url` string, uri, required
    - `icon` string
    - `is_visible` boolean
    - `display_order` integer
  - `proofs` object[]
    - `type` 'phone' | 'email' | 'domain' | 'social' | 'wallet' | 'account' | 'telegram_bot', required: Type of asset being verified
    - `channel` 'whatsapp' | 'telegram' | 'sms' | 'email' | 'dns' | 'http' | 'auto' | 'github' | 'google' | 'facebook' | 'x' | 'linkedin' | 'instagram' | 'youtube' | 'tiktok' | 'ethereum' | 'solana' | 'bitcoin' | 'coinbase' | 'kraken' | 'telegram_bot_token': Channel used for verification
    - `identifier` string
    - `verified_at` string, date-time
  - `show_delegations` boolean: The owner's switch for the public Delegations section (default true). Returned to the owner.
  - `email_theme` 'dark' | 'light' | 'null', nullable: Theme of this project's emails; null when unset (read as `dark`). Returned to the owner.
  - `support_email` string, nullable: Support address shown in this project's messages. Returned to the owner.
  - `delegations` PublicProfileDelegation[], nullable: Present on the public reads (`GET /api/v1/profiles/p/{profileId}`, `GET /api/v1/profiles/u/{username}`) only: the published, in-force delegations for the domains this profile shows in full. Empty when the owner turned `show_delegations` off; null when they could not be read — never an empty list standing in for an unknown.
    - `delegate` string, required: The canonical artifact identity
    - `delegate_type` 'url' | 'purl', required
    - `principal` string, required: The domain, shown on this profile, that authorized the artifact
    - `scope` string[], required
    - `issued_at` string, date-time, required
    - `expires_at` string, date-time, required
    - `artifact_path` string, nullable, required: The artifact's page on proof.holdings; null for a class with no page
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required

## Other responses

- `404`: Profile not found

---

[API](https://skmtc.dev/proof/apis/proof-holdings-api.md) · [All operations](https://skmtc.dev/proof/apis/proof-holdings-api/llms.txt) · [OpenAPI document](https://skmtc.dev/proof/apis/proof-holdings-api/revisions/b15f506de696?raw)
