# Enrich by handle profile

Enrich a creator profile with identity, contact, and vetting data using their social media handle.
**What you get**
- Returns the identity/contact/vetting subset of the [Enrich by handle full](/openapi/enrich-by-handle-full) response: validated email, name, gender, location, cross-platform presence, and core profile/vetting fields (verification, account type, follower/media counts, bio, niche classification).
- No deeper performance data — no growth curves, medians, income estimates or audience demographics. Use [Enrich by handle analytics](/openapi/enrich-by-handle-analytics) for those. Instagram, YouTube, TikTok, OnlyFans and Twitter do include a headline `engagement_percent`.
- Works with all 11 platforms: Instagram, YouTube, TikTok, OnlyFans, Twitter, Twitch, Snapchat, Discord, Pinterest, Facebook and LinkedIn. Facebook, Pinterest, Snapchat, Discord and LinkedIn carry basic identity data only — there is no analytics counterpart for them.
- Optional email requirement setting available.

**Credits**
- 0.2 credits per successful request. If no data is returned, no credits are deducted. If `email_required` is `must_have` and no valid email is found, no credits are deducted.

<div class="ic-ai-prompt-root" data-endpoint="handle-profile"></div>

Endpoint: POST /public/v1/creators/enrich/handle/profile/
Version: 1.0.0
Security: Bearer

## Request fields (application/json):

  - `handle` (string, required)
    Creator identifier — username, profile URL, or YouTube channel ID (UC...).

  - `platform` (string, required)
    Platform to enrich from (e.g., instagram, youtube).
    Enum: "instagram", "youtube", "tiktok", "onlyfans", "twitter", "snapchat", "discord", "pinterest", "facebook", "linkedin", "twitch"

  - `email_required` (string)
    Whether a validated email is required: 'must_have' rejects the match if no valid email is found (no credits charged), 'preferred' returns the match regardless. Defaults to 'preferred'.
    Enum: "must_have", "preferred"

## Response 200 fields (application/json):

  - `result` (object)

  - `result.email` (string)
    The creator's email address.

  - `result.email_type` (string)

  - `result.first_name` (string)

  - `result.gender` (string)

  - `result.has_brand_deals` (boolean)

  - `result.has_link_in_bio` (boolean)

  - `result.instagram_link` (string)

  - `result.is_business` (boolean)

  - `result.is_creator` (boolean)

  - `result.linkedin_link` (string)

  - `result.links_in_bio` (array)

  - `result.location` (string)

  - `result.onlyfans_link` (string)

  - `result.other_links` (array)

  - `result.patreon_link` (string)

  - `result.speaking_language` (string)

  - `result.tiktok_link` (string)

  - `result.twitch_link` (string)

  - `result.twitter_link` (string)

  - `result.youtube_link` (string)

  - `result.instagram` (object)

  - `result.instagram.account_type` (integer)

  - `result.instagram.avg_comments` (number)

  - `result.instagram.avg_likes` (number)

  - `result.instagram.biography` (string)

  - `result.instagram.category` (string)

  - `result.instagram.city` (string)

  - `result.instagram.contact_phone_number` (string)

  - `result.instagram.country` (string)

  - `result.instagram.engagement_percent` (number)

  - `result.instagram.exists` (boolean)

  - `result.instagram.follower_count` (integer)

  - `result.instagram.following_count` (integer)

  - `result.instagram.full_name` (string)

  - `result.instagram.has_profile_pic` (boolean)

  - `result.instagram.is_business_account` (boolean)

  - `result.instagram.is_private` (boolean)

  - `result.instagram.is_verified` (boolean)

  - `result.instagram.language_code` (array)

  - `result.instagram.links_in_bio` (array)

  - `result.instagram.location` (string)

  - `result.instagram.location_source` (array)

  - `result.instagram.media_count` (integer)

  - `result.instagram.most_recent_post_date` (string)

  - `result.instagram.niche_class` (array)

  - `result.instagram.profile_picture` (string)
    URL to the creator's profile picture. This URL is temporary and expires after 24 hours. To keep the image, download it to your own storage before it expires.

  - `result.instagram.profile_picture_hd` (string)
    URL to the creator's high-definition profile picture. This URL is temporary and expires after 24 hours. To keep the image, download it to your own storage before it expires.

  - `result.instagram.state` (string)

  - `result.instagram.streamer` (boolean)

  - `result.instagram.userid` (string)

  - `result.instagram.username` (string)
    The creator's username on the platform.

  - `result.instagram.uses_link_in_bio` (boolean)

  - `result.instagram.video_content_creator` (boolean)

  - `result.youtube` (object)

  - `result.youtube.avg_comments` (integer)

  - `result.youtube.avg_likes` (number)

  - `result.youtube.avg_views` (number)

  - `result.youtube.country` (string)

  - `result.youtube.custom_url` (string)

  - `result.youtube.description` (string)

  - `result.youtube.engagement_percent` (number)

  - `result.youtube.exists` (boolean)

  - `result.youtube.first_name` (string)

  - `result.youtube.has_community_posts` (boolean)

  - `result.youtube.has_paid_partnership` (boolean)

  - `result.youtube.has_shorts` (boolean)

  - `result.youtube.id` (string)

  - `result.youtube.is_monetization_enabled` (boolean)

  - `result.youtube.is_verified` (boolean)

  - `result.youtube.language_code` (array)

  - `result.youtube.link` (string)

  - `result.youtube.links_in_bio` (array)

  - `result.youtube.location` (string)

  - `result.youtube.made_for_kids` (boolean)

  - `result.youtube.moderate_comments` (boolean)

  - `result.youtube.most_recent_post_date` (string)

  - `result.youtube.niche_class` (array)

  - `result.youtube.privacy_status` (string)

  - `result.youtube.profile_picture` (string)
    URL to the creator's profile picture. This URL is temporary and expires after 24 hours. To keep the image, download it to your own storage before it expires.

  - `result.youtube.profile_picture_hd` (string)
    URL to the creator's high-definition profile picture. This URL is temporary and expires after 24 hours. To keep the image, download it to your own storage before it expires.

  - `result.youtube.published_at` (string)

  - `result.youtube.related_playlist_id` (string)

  - `result.youtube.streamer` (boolean)

  - `result.youtube.subscriber_count` (integer)

  - `result.youtube.title` (string)

  - `result.youtube.unsubscribed_trailer_id` (string)

  - `result.youtube.uses_link_in_bio` (boolean)

  - `result.youtube.video_count` (integer)

  - `result.youtube.view_count` (integer)

  - `result.tiktok` (object)

  - `result.tiktok.avg_likes` (number)

  - `result.tiktok.biography` (string)

  - `result.tiktok.category` (string)

  - `result.tiktok.duet_setting` (boolean)

  - `result.tiktok.engagement_percent` (number)

  - `result.tiktok.exists` (boolean)

  - `result.tiktok.follower_count` (integer)

  - `result.tiktok.following_count` (integer)

  - `result.tiktok.full_name` (string)

  - `result.tiktok.is_ad` (boolean)

  - `result.tiktok.is_commerce` (boolean)

  - `result.tiktok.is_private` (boolean)

  - `result.tiktok.is_verified` (boolean)

  - `result.tiktok.language_code` (array)

  - `result.tiktok.links_in_bio` (array)

  - `result.tiktok.mention_status` (string)

  - `result.tiktok.most_recent_post_date` (string)

  - `result.tiktok.niche_class` (array)

  - `result.tiktok.paid_partnership` (boolean)

  - `result.tiktok.profile_picture` (string)
    URL to the creator's profile picture. This URL is temporary and expires after 24 hours. To keep the image, download it to your own storage before it expires.

  - `result.tiktok.profile_picture_hd` (string)
    URL to the creator's high-definition profile picture. This URL is temporary and expires after 24 hours. To keep the image, download it to your own storage before it expires.

  - `result.tiktok.region` (string)

  - `result.tiktok.sec_user_id` (string)

  - `result.tiktok.streamer` (boolean)

  - `result.tiktok.tt_seller` (boolean)

  - `result.tiktok.user_id` (string)
    The creator's unique platform identifier.

  - `result.tiktok.username` (string)
    The creator's username on the platform.

  - `result.tiktok.uses_link_in_bio` (boolean)

  - `result.tiktok.video_count` (integer)

  - `result.onlyfans` (object)

  - `result.onlyfans.avg_comments` (number)

  - `result.onlyfans.avg_likes` (number)

  - `result.onlyfans.biography` (string)

  - `result.onlyfans.can_chat` (boolean)

  - `result.onlyfans.can_create_promotion` (boolean)

  - `result.onlyfans.can_earn` (boolean)

  - `result.onlyfans.can_receive_chat_message` (boolean)

  - `result.onlyfans.country` (string)

  - `result.onlyfans.engagement_percent` (number)

  - `result.onlyfans.exists` (boolean)

  - `result.onlyfans.first_name` (string)

  - `result.onlyfans.first_published_post_date` (string)

  - `result.onlyfans.full_name` (string)

  - `result.onlyfans.is_adult_content` (boolean)

  - `result.onlyfans.is_real_performer` (boolean)

  - `result.onlyfans.is_verified` (boolean)

  - `result.onlyfans.join_date` (string)

  - `result.onlyfans.language_code` (array)

  - `result.onlyfans.links_in_bio` (array)

  - `result.onlyfans.linktree` (string)

  - `result.onlyfans.location_source` (array)

  - `result.onlyfans.media_count` (integer)

  - `result.onlyfans.profile_picture` (string)
    URL to the creator's profile picture. This URL is temporary and expires after 24 hours. To keep the image, download it to your own storage before it expires.

  - `result.onlyfans.profile_picture_hd` (string)
    URL to the creator's high-definition profile picture. This URL is temporary and expires after 24 hours. To keep the image, download it to your own storage before it expires.

  - `result.onlyfans.streamer` (boolean)

  - `result.onlyfans.subscribe_price` (integer)

  - `result.onlyfans.user_id` (string)
    The creator's unique platform identifier.

  - `result.onlyfans.username` (string)
    The creator's username on the platform.

  - `result.onlyfans.uses_link_in_bio` (boolean)

  - `result.twitter` (object)

  - `result.twitter.avg_likes` (number)

  - `result.twitter.biography` (string)

  - `result.twitter.country` (string)

  - `result.twitter.direct_messaging` (boolean)

  - `result.twitter.engagement_percent` (number)

  - `result.twitter.exists` (boolean)

  - `result.twitter.follower_count` (integer)

  - `result.twitter.following_count` (integer)

  - `result.twitter.full_name` (string)

  - `result.twitter.is_verified` (boolean)

  - `result.twitter.join_date` (string)

  - `result.twitter.language_code` (array)

  - `result.twitter.links_in_bio` (array)

  - `result.twitter.location` (string)

  - `result.twitter.location_source` (string)

  - `result.twitter.media_count` (integer)

  - `result.twitter.most_recent_post_date` (string)

  - `result.twitter.other_links` (array)

  - `result.twitter.patreon` (string)

  - `result.twitter.profile_picture` (string)
    URL to the creator's profile picture. This URL is temporary and expires after 24 hours. To keep the image, download it to your own storage before it expires.

  - `result.twitter.profile_picture_hd` (string)
    URL to the creator's high-definition profile picture. This URL is temporary and expires after 24 hours. To keep the image, download it to your own storage before it expires.

  - `result.twitter.streamer` (boolean)

  - `result.twitter.subscriber_button` (boolean)

  - `result.twitter.super_followed_by` (boolean)

  - `result.twitter.userid` (string)

  - `result.twitter.username` (string)
    The creator's username on the platform.

  - `result.twitter.uses_link_in_bio` (boolean)

  - `result.twitch` (object)

  - `result.twitch.description` (string)

  - `result.twitch.displayName` (string)

  - `result.twitch.isPartner` (boolean)

  - `result.twitch.language_code` (array)

  - `result.twitch.links_in_bio` (array)

  - `result.twitch.other_links` (array)

  - `result.twitch.panels_descriptions` (array)

  - `result.twitch.panels_image` (array)

  - `result.twitch.panels_titles` (array)

  - `result.twitch.panels_type` (array)

  - `result.twitch.panels_urls` (array)

  - `result.twitch.profileImageURL` (string)
    URL to the creator's profile picture. This URL is temporary and expires after 24 hours. To keep the image, download it to your own storage before it expires.

  - `result.twitch.profile_picture_hd` (string)
    URL to the creator's high-definition profile picture. This URL is temporary and expires after 24 hours. To keep the image, download it to your own storage before it expires.

  - `result.twitch.total_followers` (integer)

  - `result.twitch.user_id` (string)
    The creator's unique platform identifier.

  - `result.twitch.username` (string)
    The creator's username on the platform.

  - `result.linkedin` (object)

  - `result.linkedin.biography` (string)

  - `result.linkedin.connections` (integer)

  - `result.linkedin.first_name` (string)

  - `result.linkedin.follower_count` (integer)

  - `result.linkedin.full_name` (string)

  - `result.linkedin.hashtags` (array)

  - `result.linkedin.is_verified` (boolean)

  - `result.linkedin.profile_picture_hd` (string)
    URL to the creator's high-definition profile picture. This URL is temporary and expires after 24 hours. To keep the image, download it to your own storage before it expires.

  - `result.linkedin.user_id` (string)
    The creator's unique platform identifier.

  - `result.linkedin.username` (string)
    The creator's username on the platform.

  - `result.facebook` (object)

  - `result.facebook.user_id` (string)
    The creator's unique platform identifier.

  - `result.facebook.profile_picture` (string)
    URL to the creator's profile picture. This URL is temporary and expires after 24 hours. To keep the image, download it to your own storage before it expires.

  - `result.facebook.profile_picture_hd` (string)
    URL to the creator's high-definition profile picture. This URL is temporary and expires after 24 hours. To keep the image, download it to your own storage before it expires.

  - `result.pinterest` (object)

  - `result.pinterest.username` (string)
    The creator's username on the platform.

  - `result.pinterest.pk` (string)

  - `result.pinterest.profile_picture` (string)
    URL to the creator's profile picture. This URL is temporary and expires after 24 hours. To keep the image, download it to your own storage before it expires.

  - `result.pinterest.profile_picture_hd` (string)
    URL to the creator's high-definition profile picture. This URL is temporary and expires after 24 hours. To keep the image, download it to your own storage before it expires.

  - `result.snapchat` (object)

  - `result.snapchat.username` (string)
    The creator's username on the platform.

  - `result.snapchat.is_private` (boolean)

  - `result.snapchat.profile_picture_url` (string)
    URL to the creator's profile picture. This URL is temporary and expires after 24 hours. To keep the image, download it to your own storage before it expires.

  - `result.snapchat.profile_picture_hd` (string)
    URL to the creator's high-definition profile picture. This URL is temporary and expires after 24 hours. To keep the image, download it to your own storage before it expires.

  - `result.snapchat.title` (string)

  - `result.snapchat.biography` (string)

  - `result.snapchat.subscriber_count` (integer)

  - `result.snapchat.address` (string)

  - `result.snapchat.has_curated_highlights` (boolean)

  - `result.snapchat.has_spotlight_highlights` (boolean)

  - `result.snapchat.page_description` (string)

  - `result.snapchat.curated_highlights_story_titles` (array)

  - `result.snapchat.links_in_bio` (array)

  - `result.snapchat.other_links` (array)

  - `result.discord` (object)

  - `result.discord.type` (integer)

  - `result.discord.code` (string)

  - `result.discord.id` (integer)

  - `result.discord.expires_at` (string)

  - `result.discord.flags` (integer)

  - `result.discord.profile_picture` (string)
    URL to the creator's profile picture. This URL is temporary and expires after 24 hours. To keep the image, download it to your own storage before it expires.

  - `result.discord.profile_picture_hd` (string)
    URL to the creator's high-definition profile picture. This URL is temporary and expires after 24 hours. To keep the image, download it to your own storage before it expires.

  - `credits_cost` (number)
    Example: 0.2

## Response 400 fields (application/json):

  - `error` (any)
    Human-readable description of what went wrong. Shape varies per endpoint: string on most paths, DRF field-error object on validation paths of creators_api enrich/* and enrichment_batch_api create, list of strings on discovery filter validation. See the per-endpoint example response.
    Example: Insufficient credits.

  - `error_code` (string, required)
    Machine-readable snake_case slug identifying the error class. Stable across API versions; **the only field guaranteed present on every public-API error**. Use for programmatic branching instead of parsing `error`.
    Example: insufficient_credits

  - `message` (string)
    Optional long-form detail sibling to `error`. Present on endpoints that historically returned both a short label and a long explanation (rate limits, polling, batch state, insufficient_credits on resume).
    Example: Poll every 30-60 seconds. Excessive polling results in rate limiting.

  - `retry_after` (integer)
    Seconds the caller should wait before retrying. Present on 429s where the OLD endpoint set it; mirrored in the `Retry-After` HTTP header.
    Example: 60

  - `available_credits` (number)
    Credits currently available. Present on the 403 insufficient_credits response of `POST /public/v1/enrichment/batch/{id}/resume/`.

  - `required_minimum` (number)
    Minimum credits needed. Pairs with `available_credits`.

  - `current_status` (string)
    Current resource state. Present on 400 responses where the operation requires a different state (e.g. `batch_not_ready`, `batch_not_resumable`).

  - `active_batches` (integer)
    Active batch count when `error_code: batch_limit_reached`.

  - `max_allowed` (integer)
    Per-client batch ceiling. Pairs with `active_batches`.

## Response 403 fields (application/json):

  - `error` (any)
    Human-readable description of what went wrong. Shape varies per endpoint: string on most paths, DRF field-error object on validation paths of creators_api enrich/* and enrichment_batch_api create, list of strings on discovery filter validation. See the per-endpoint example response.
    Example: Insufficient credits.

  - `error_code` (string, required)
    Machine-readable snake_case slug identifying the error class. Stable across API versions; **the only field guaranteed present on every public-API error**. Use for programmatic branching instead of parsing `error`.
    Example: insufficient_credits

  - `message` (string)
    Optional long-form detail sibling to `error`. Present on endpoints that historically returned both a short label and a long explanation (rate limits, polling, batch state, insufficient_credits on resume).
    Example: Poll every 30-60 seconds. Excessive polling results in rate limiting.

  - `retry_after` (integer)
    Seconds the caller should wait before retrying. Present on 429s where the OLD endpoint set it; mirrored in the `Retry-After` HTTP header.
    Example: 60

  - `available_credits` (number)
    Credits currently available. Present on the 403 insufficient_credits response of `POST /public/v1/enrichment/batch/{id}/resume/`.

  - `required_minimum` (number)
    Minimum credits needed. Pairs with `available_credits`.

  - `current_status` (string)
    Current resource state. Present on 400 responses where the operation requires a different state (e.g. `batch_not_ready`, `batch_not_resumable`).

  - `active_batches` (integer)
    Active batch count when `error_code: batch_limit_reached`.

  - `max_allowed` (integer)
    Per-client batch ceiling. Pairs with `active_batches`.

## Response 429 fields (application/json):

  - `error` (any)
    Human-readable description of what went wrong. Shape varies per endpoint: string on most paths, DRF field-error object on validation paths of creators_api enrich/* and enrichment_batch_api create, list of strings on discovery filter validation. See the per-endpoint example response.
    Example: Insufficient credits.

  - `error_code` (string, required)
    Machine-readable snake_case slug identifying the error class. Stable across API versions; **the only field guaranteed present on every public-API error**. Use for programmatic branching instead of parsing `error`.
    Example: insufficient_credits

  - `message` (string)
    Optional long-form detail sibling to `error`. Present on endpoints that historically returned both a short label and a long explanation (rate limits, polling, batch state, insufficient_credits on resume).
    Example: Poll every 30-60 seconds. Excessive polling results in rate limiting.

  - `retry_after` (integer)
    Seconds the caller should wait before retrying. Present on 429s where the OLD endpoint set it; mirrored in the `Retry-After` HTTP header.
    Example: 60

  - `available_credits` (number)
    Credits currently available. Present on the 403 insufficient_credits response of `POST /public/v1/enrichment/batch/{id}/resume/`.

  - `required_minimum` (number)
    Minimum credits needed. Pairs with `available_credits`.

  - `current_status` (string)
    Current resource state. Present on 400 responses where the operation requires a different state (e.g. `batch_not_ready`, `batch_not_resumable`).

  - `active_batches` (integer)
    Active batch count when `error_code: batch_limit_reached`.

  - `max_allowed` (integer)
    Per-client batch ceiling. Pairs with `active_batches`.

