Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.
get_api_artifactsOne API's artifacts, grouped by type.
get_openapiThe primary OpenAPI for this API.
find_similar_apisAPIs that look like this one.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/hookdetector-com:hookdetector-com-free-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Hook Detector Free API
description: 'Find short-form hooks that already work.
Sign up with a beta access code (ask at https://hookdetector.com/access): one POST to
`/v1/accounts` with `access_code` gives an API key and free credits. The same operations are available as MCP tools at `/mcp`.
Full guide, always current, at `/llms.txt`.'
contact:
name: Hook Detector
url: https://hookdetector.com/
email: contact@hookdetector.com
version: 3.0.0
tags:
- name: free
paths:
/v1/free/title:
post:
tags:
- free
summary: 'Free: score your title against real outliers, no key'
description: 'Score a title (and an optional subject) against the counted patterns of real outliers in
the shared index: title device and length, part by part, each "N of M outliers"; the
`pattern_match` (0 to 100) is the mean share and says what it is computed from (`basis`),
never a predicted click-through rate. No key. 5 uses per visitor per 24 hours, and a daily
allowance for everyone; free. The full tool is score_package (1 credit, thumbnails too).'
operationId: free_title_v1_free_title_post
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/TitleIn'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/TitleOut'
'413':
description: request body over the size cap
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorOut'
'422':
description: invalid input
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorOut'
'500':
description: our fault; names the request id
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorOut'
'429':
description: 'rate_limited: this visitor used the tool 5 times in the last 24 hours (by address and by browser); see Retry-After'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorOut'
'503':
description: 'at_capacity: today''s free uses for everyone are used up, or the free tools are paused; model_unavailable or provider_unavailable: our side failed and the use was not counted'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorOut'
/v1/free/outlier:
get:
tags:
- free
summary: 'Free: is this video an outlier, no key'
description: 'A YouTube video link (`url`): its multiple over its channel''s median views, the band in
words, views per hour (between two reads when the index has them, and its average pace since
posted), from the video scorecard. No key. 5 uses per visitor per 24 hours; a link to no
public video counts as a use. The full tool is video_scorecard.'
operationId: free_outlier_v1_free_outlier_get
parameters:
- name: url
in: query
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: Url
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/OutlierOut'
'413':
description: request body over the size cap
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorOut'
'422':
description: invalid input
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorOut'
'500':
description: our fault; names the request id
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorOut'
'429':
description: 'rate_limited: this visitor used the tool 5 times in the last 24 hours (by address and by browser); see Retry-After'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorOut'
'503':
description: 'at_capacity: today''s free uses for everyone are used up, or the free tools are paused; model_unavailable or provider_unavailable: our side failed and the use was not counted'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorOut'
/v1/free/preview:
get:
tags:
- free
summary: 'Free: real outliers for your thumbnail''s feed preview, no key'
description: 'Up to 11 real outliers (title, channel, views, multiple, i.ytimg thumbnail) on a
`subject`, or at random when it is left out or too few match, for the web''s feed mock (home,
search, phone; light and dark). Your own picture never reaches this API: the page draws it
from your browser. No key. 5 uses per visitor per 24 hours. The full tool is preview_package.'
operationId: free_preview_v1_free_preview_get
parameters:
- name: subject
in: query
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: Subject
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/hookdetector__rest__p62_routes__PreviewOut'
'413':
description: request body over the size cap
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorOut'
'422':
description: invalid input
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorOut'
'500':
description: our fault; names the request id
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorOut'
'429':
description: 'rate_limited: this visitor used the tool 5 times in the last 24 hours (by address and by browser); see Retry-After'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorOut'
'503':
description: 'at_capacity: today''s free uses for everyone are used up, or the free tools are paused; model_unavailable or provider_unavailable: our side failed and the use was not counted'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorOut'
/v1/free/thumbnail:
get:
tags:
- free
summary: 'Free: a video''s thumbnail at every size, no key'
description: 'A YouTube video link (`url`) gives its thumbnail''s i.ytimg.com URLs at maxresdefault
(1280x720), hq720 and hqdefault (480x360), each checked (`exists`). Only i.ytimg.com URLs; no
video is downloaded and no image passes through this API. No key. 5 uses per visitor per 24
hours.'
operationId: free_thumbnail_v1_free_thumbnail_get
parameters:
- name: url
in: query
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: Url
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/ThumbnailOut'
'413':
description: request body over the size cap
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorOut'
'422':
description: invalid input
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorOut'
'500':
description: our fault; names the request id
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorOut'
'429':
description: 'rate_limited: this visitor used the tool 5 times in the last 24 hours (by address and by browser); see Retry-After'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorOut'
'503':
description: 'at_capacity: today''s free uses for everyone are used up, or the free tools are paused; model_unavailable or provider_unavailable: our side failed and the use was not counted'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorOut'
/v1/free/hooks:
post:
tags:
- free
summary: 'Free: 5 short-form hook lines from real hooks, no key'
description: 'A `subject` gives 5 short-form opening lines, each borrowing the move (never the words)
of a numbered real opening from short videos that beat their creator''s usual plays (`sources`,
public fields only). Written by Claude. No key. 5 uses per visitor per 24 hours; a failure on
our side is not counted. The full tool is find_hooks (real hooks, with their videos).'
operationId: free_hooks_v1_free_hooks_post
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/HooksIn'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/HooksOut'
'413':
description: request body over the size cap
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorOut'
'422':
description: invalid input
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorOut'
'500':
description: our fault; names the request id
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorOut'
'429':
description: 'rate_limited: this visitor used the tool 5 times in the last 24 hours (by address and by browser); see Retry-After'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorOut'
'503':
description: 'at_capacity: today''s free uses for everyone are used up, or the free tools are paused; model_unavailable or provider_unavailable: our side failed and the use was not counted'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorOut'
components:
schemas:
HooksOut:
properties:
tool:
type: string
title: Tool
description: title, outlier, preview, thumbnail or hooks
uses_left:
type: integer
title: Uses Left
description: free uses of this tool left to this visitor in the next 24 hours
limit:
type: integer
title: Limit
description: free uses per tool per visitor per 24 hours
signup_url:
type: string
title: Signup Url
description: sign up for the full tool
full_tool:
type: string
title: Full Tool
description: the full tool this one samples
credits:
type: integer
title: Credits
default: 0
hooks:
items:
additionalProperties: true
type: object
type: array
title: Hooks
additionalProperties: true
type: object
required:
- tool
- uses_left
- limit
- signup_url
- full_tool
- hooks
title: HooksOut
examples:
- credits: 0
full_tool: Short form hooks
hooks:
- based_on: 3
line: Nobody tells you what cold showers do to your mornings
move: the hidden truth
limit: 5
signup_url: https://hookdetector.com/signin?return_to=%2Fpackaging
sources:
- creator: someone
line: Nobody tells you this about sleep
n: 3
platform: tiktok
views: 2100000
subject: cold showers
tool: hooks
uses_left: 4
ErrorOut:
properties:
detail:
type: string
title: Detail
description: one sentence a person can read
code:
type: string
title: Code
description: stable machine code; see the Errors section of /llms.txt
errors:
anyOf:
- items:
additionalProperties: true
type: object
type: array
- type: 'null'
title: Errors
description: 'on a 422 only: the field level list'
additionalProperties: true
type: object
required:
- detail
- code
title: ErrorOut
examples:
- code: run_not_found
detail: no such run for this account
HooksIn:
properties:
subject:
anyOf:
- type: string
- type: 'null'
title: Subject
description: what the video is about, 2 to 100 characters
examples:
- cold showers
type: object
title: HooksIn
ThumbnailOut:
properties:
tool:
type: string
title: Tool
description: title, outlier, preview, thumbnail or hooks
uses_left:
type: integer
title: Uses Left
description: free uses of this tool left to this visitor in the next 24 hours
limit:
type: integer
title: Limit
description: free uses per tool per visitor per 24 hours
signup_url:
type: string
title: Signup Url
description: sign up for the full tool
full_tool:
type: string
title: Full Tool
description: the full tool this one samples
credits:
type: integer
title: Credits
default: 0
sizes:
items:
additionalProperties: true
type: object
type: array
title: Sizes
additionalProperties: true
type: object
required:
- tool
- uses_left
- limit
- signup_url
- full_tool
- sizes
title: ThumbnailOut
examples:
- credits: 0
full_tool: Packaging
limit: 5
signup_url: https://hookdetector.com/signin?return_to=%2Fpackaging
sizes:
- bytes: 81234
exists: true
height: 720
name: maxresdefault
url: https://i.ytimg.com/vi/dQw4w9WgXcQ/maxresdefault.jpg
width: 1280
tool: thumbnail
uses_left: 4
video_id: dQw4w9WgXcQ
hookdetector__rest__p62_routes__PreviewOut:
properties:
tool:
type: string
title: Tool
description: title, outlier, preview, thumbnail or hooks
uses_left:
type: integer
title: Uses Left
description: free uses of this tool left to this visitor in the next 24 hours
limit:
type: integer
title: Limit
description: free uses per tool per visitor per 24 hours
signup_url:
type: string
title: Signup Url
description: sign up for the full tool
full_tool:
type: string
title: Full Tool
description: the full tool this one samples
credits:
type: integer
title: Credits
default: 0
outliers:
items:
additionalProperties: true
type: object
type: array
title: Outliers
additionalProperties: true
type: object
required:
- tool
- uses_left
- limit
- signup_url
- full_tool
- outliers
title: PreviewOut
examples:
- credits: 0
full_tool: Test yours on Packaging
limit: 5
matched: subject
outliers:
- multiple: 4.1
thumbnail_url: https://i.ytimg.com/vi/dQw4w9WgXcQ/mqdefault.jpg
title: '...'
video_id: dQw4w9WgXcQ
signup_url: https://hookdetector.com/signin?return_to=%2Fpackaging
subject: meal prep
tool: preview
uses_left: 4
OutlierOut:
properties:
tool:
type: string
title: Tool
description: title, outlier, preview, thumbnail or hooks
uses_left:
type: integer
title: Uses Left
description: free uses of this tool left to this visitor in the next 24 hours
limit:
type: integer
title: Limit
description: free uses per tool per visitor per 24 hours
signup_url:
type: string
title: Signup Url
description: sign up for the full tool
full_tool:
type: string
title: Full Tool
description: the full tool this one samples
credits:
type: integer
title: Credits
default: 0
multiple:
anyOf:
- type: number
- type: 'null'
title: Multiple
additionalProperties: true
type: object
required:
- tool
- uses_left
- limit
- signup_url
- full_tool
title: OutlierOut
examples:
- band: 5x
band_words: 5x to 10x over the channel's usual views
channel_median_views: 120000
credits: 0
full_tool: Video scorecard on Explore
limit: 5
multiple: 6.2
signup_url: https://hookdetector.com/signin?return_to=%2Fpackaging
tool: outlier
uses_left: 4
video:
title: '...'
video_id: dQw4w9WgXcQ
views_per_hour: 310.5
TitleIn:
properties:
title:
anyOf:
- type: string
- type: 'null'
title: Title
description: your title, 1 to 150 characters
examples:
- I tried 75 Hard for 30 days
subject:
anyOf:
- type: string
- type: 'null'
title: Subject
description: 'optional: the subject to compare against (2 to 100 characters); the title itself when left out'
type: object
title: TitleIn
TitleOut:
properties:
tool:
type: string
title: Tool
description: title, outlier, preview, thumbnail or hooks
uses_left:
type: integer
title: Uses Left
description: free uses of this tool left to this visitor in the next 24 hours
limit:
type: integer
title: Limit
description: free uses per tool per visitor per 24 hours
signup_url:
type: string
title: Signup Url
description: sign up for the full tool
full_tool:
type: string
title: Full Tool
description: the full tool this one samples
credits:
type: integer
title: Credits
default: 0
pattern_match:
anyOf:
- type: integer
- type: 'null'
title: Pattern Match
additionalProperties: true
type: object
required:
- tool
- uses_left
- limit
- signup_url
- full_tool
title: TitleOut
examples:
- basis: Counted against the 14 real outliers on this subject ...
credits: 0
full_tool: Score my package on Packaging
limit: 5
outliers: 14
parts:
- matches: 9
of: 14
part: title device
said: 9 of 14 outliers use the same title device (story)
share: 0.643
pattern_match: 62
signup_url: https://hookdetector.com/signin?return_to=%2Fpackaging
title: I tried 75 Hard for 30 days
tool: title
uses_left: 4