---
title: "Hook taxonomy with effectiveness stats"
method: GET
path: "/v1/hooks/types"
tags: ["Hooks"]
---

# Hook taxonomy with effectiveness stats

`GET /v1/hooks/types`

## Request

- Base URL: `https://api.virlo.ai`
- URL: `https://api.virlo.ai/v1/hooks/types`
- Auth: HTTP bearer

The two hook vocabularies with per-value corpus stats: hook_type (spoken/text opening-line types; Virlo adds new ones over time) and visual_hook_type (12 first-frame visual types). They are orthogonal: every analyzed video has one of each. Stats come from the latest daily snapshot of the ~970k-video hook corpus: count and share, views, and Virality Score (ln(views/followers) x ln(followers), comparable across creator sizes and platforms). To answer "which hook types work best", use sort=strong_hit_rate: the share of videos using that type that scored strong or better (>= 18). avg_weighted_score reads negative for most types and is not a ranking signal. Also the place to discover the values the hook_type and visual_hook_type filters accept. Free.

## Query parameters

- `dimension` 'hook_type' | 'visual_hook_type'
- `platform` 'tiktok' | 'youtube' | 'instagram'
- `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'
- `sort` 'video_count' | 'strong_hit_rate' | 'median_weighted_score' | 'p90_weighted_score'

## Response `200`

- HookTypesResponseDto
  - `data` HookTypesDataDto, required
    - `dimension` 'hook_type' | 'visual_hook_type', required
    - `platform` string, required: Platform slice ('all' when not filtered).
    - `category` string, required: Category slice ('all' when not filtered).
    - `snapshot_date` string, nullable: Date of the daily snapshot the stats come from.
    - `types` HookTypeStatDto[], required
      - `value` string, required: Taxonomy value. Includes 'none' (no discernible hook) for corpus accounting.
      - `video_count` number, required: Hooks in the corpus with this value for the selected slice.
      - `share_of_corpus` number, nullable: Share of the slice corpus (0-1).
      - `total_views` number, nullable
      - `avg_views` number, nullable
      - `median_views` number, nullable
      - `avg_weighted_score` number, nullable: Mean Virality Score. Reads negative for most types because about half of all videos get fewer views than their creator has followers; do not rank types by it. Use strong_hit_rate or median_weighted_score.
      - `median_weighted_score` number, nullable: Median Virality Score: the typical outcome for a video using this hook type.
      - `p90_weighted_score` number, nullable: 90th-percentile Virality Score: how good the winners get.
      - `strong_hit_rate` number, nullable: Share of videos using this hook type that scored strong or better (Virality Score >= 18), 0-1. The best single number for "which hook types work".

## Other responses

- `401`: Missing or invalid API key (`missing_api_key` / `invalid_api_key`)
- `429`: Rate limit exceeded (`rate_limit_exceeded`); see the Retry-After header

---

[API](https://skmtc.dev/virlo/apis/virlo-public-api.md) · [All operations](https://skmtc.dev/virlo/apis/virlo-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/virlo/apis/virlo-public-api/revisions/3b69c6145087?raw)
