Hooks

Search the hook corpus

Phrase and attribute search over every extracted hook, all time. With q, results come in tiers marked by match_type: exact (the hook IS your text; paste a hook you saw to find its source), then contains (hooks using your phrase, strongest Virality Score first, so "nobody talks about" returns the best-performing hooks built on it), then similar (near-matches, only when the first two tiers cannot fill the page). Phrase matching is whole-word, case-insensitive and ignores punctuation, emoji and line breaks between words. Without q, browse by hook_type / visual_hook_type ranked by Virality Score. At least one of q, hook_type, or visual_hook_type is required. No publish-date window (use /v1/hooks/trending for "right now"). Top 1,000 results. $0.25 per call.

get/v1/hooks/search

Request

  • Base URL: https://api.virlo.ai
  • URL: https://api.virlo.ai/v1/hooks/search
  • Auth: HTTP bearer

Query parameters

limitnumber

Items per page (1-100, default 20). Values above 100 are clamped.

pagenumber

Page number, 1-indexed (default 1).

qstring
Example:nobody talks about

Phrase to find in hook texts (multilingual, case-insensitive). Matches whole words in order and ignores punctuation, emoji and line breaks between them, so a pasted hook finds its on-screen source. Results come back in tiers (see match_type): the exact hook first, then hooks containing the phrase ranked by Virality Score, then near-matches when the first two tiers cannot fill the page. Needs at least one word of 3+ letters or digits. At least one of q, hook_type, or visual_hook_type is required.

content_type'video' | 'slideshow' | 'all'

Hooks from videos (default), slideshows, or both.

platform'tiktok' | 'youtube' | 'instagram'

Only hooks from this platform. Omit for all platforms.

category'art_design' | 'automotive' | 'beauty' | 'business_career' | 'crafts_diy' | 'education' | 'entertainment' | 'fashion' | 'finance' | 'fitness' | 'food_beverage' | 'gaming' | 'health_wellness' | 'home_garden' | 'kids_content' | 'lifestyle' | 'music' | 'news_politics' | 'parenting_family' | 'pets' | 'real_estate' | 'relationships_dating' | 'religion_spirituality' | 'science_nature' | 'sports' | 'tech' | 'travel' | 'other'

Content category of the source video. One of the listed slugs; anything else is a 400.

hook_typestring
Example:tutorial_promise

Only hooks of this spoken/text hook type (e.g. tutorial_promise). The list grows over time: GET /v1/hooks/types has the current values. An unknown value is a 400 that lists them.

visual_hook_type'text_hook' | 'extreme_closeup' | 'before_state' | 'shocking_image' | 'aesthetic_setup' | 'person_speaking_to_camera' | 'motion_action' | 'crowded_scene' | 'mystery_object' | 'dramatic_zoom' | 'animal_pet' | 'product_reveal'

Only hooks whose first frame is of this visual type. GET /v1/hooks/types lists the values.

languagestring

ISO language code (e.g. en, es, pt).

min_viewsnumber

Only hooks from videos with at least this many views.

Response

Example response

{
  "data": [
    {
      "hook_text": "Stop doing this if you want clear skin",
      "hook_type": "negation",
      "visual_hook_type": "person_speaking_to_camera",
      "language": "en",
      "outlier_ratio": 27.3,
      "weighted_score": 37.6,
      "usage_count": 1,
      "match_type": "contains",
      "match_score": 0.62
    }
  ],
  "pagination": {
    "page": 1,
    "limit": 20,
    "total": 42,
    "total_pages": 3,
    "has_next_page": true
  }
}

Changes

No recorded changes to this operation across all 1 revision of this API.