Find long-form hooks: how the YouTube outliers on a topic open.
Start a long-form run and return its run_id at once. It searches YouTube for long-form videos on the topic (never Shorts), keeps only the outliers (videos whose views are at least min_outlier times the median of their own channel's recent uploads, 2 by default) posted in 2023 or later, reads the first intro_seconds (60 by default) of each one's transcript and says why that opening holds a viewer. Then GET /v1/runs/{run_id}?wait=55 until status is done or failed: the results are the run's finds, each with hook and intro (verbatim, timed lines), hook_type, mechanism, promise, open_loop, beats, template and steal_it; report.patterns says which opening types several of them share, report.shape how the openings are built (how long the hook runs, which beats they use and when, counted from the finds) and report.openers holds up to openers (3 by default) openings written for your topic from those structures, always labelled as written, never counted as a find. While it runs, progress.items holds the finds written so far, as cards, and progress.scan the videos it is looking at. It reserves up to 90 credits for 20 videos or fewer and 5 more for each video above that (140 for the largest count, 30; less on a smaller balance, down to 25) and charges only the provider calls it made (the searches, one call per channel measured, one per transcript read); a failed run costs nothing, and so does one that finds nothing, inside the same allowance a hook run has. How long it takes has not been measured yet: poll, never assume a time. A second long or packaging run on the same topic within a week starts from the videos the first one bought (reuse), and a video you already had read is delivered from that read (analysis_from_earlier_read).
topic may be a YouTube address instead of a subject: a channel's (https://www.youtube.com/@name, or @name) returns that channel's own outliers among its recent long-form uploads (one provider call, no search), and a long-form video's returns that one video whatever its multiple (requested is 1). The run's options.link says which ("channel" or "video"); no openings are written for a link. channel_size (small, medium, large) keeps only channels of that size, by what their uploads usually get. report.landscape is the subject at a glance, counted. Starts are limited per account per hour (429). Needs research. MCP: find_long_hooks.
Request
- Base URL: https://api.hookdetector.com (the document declares no server; this is the origin it was published from)
- URL: https://api.hookdetector.com/v1/longform
- Auth: none declared
Headers
retry safely: the same key within 24 hours returns the first run and reserves nothing
Bearer hd_... from POST /v1/accounts or POST /v1/keys
Request body
Example request
{
"topic": "home espresso",
"language": "Spanish",
"country": "US",
"min_outlier": 3,
"posted_within_days": 365,
"channel_size": "small",
"intro_seconds": 60,
"openers": 3
}Response
a replay of an earlier start with the same Idempotency-Key; nothing was reserved
Example response
{
"created_at": "2026-09-23T10:00:00.000000+00:00",
"credits_reserved": 200,
"requested": 10,
"run_id": "8f1c2d3e-4b5a-4c6d-8e7f-9a0b1c2d3e4f",
"status": "queued",
"topic": "cold plunge recovery"
}Changes
No recorded changes to this operation across all 1 revision of this API.