{"openapi":"3.1.0","info":{"title":"Hookline API","version":"0.1.0","description":"A fully local short-video hook & retention-structure reference: proven attention-retention structures for short-form video, each with genuine original analysis of why it works, grounded in established attention psychology.\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://hookline.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"hr@unifydynamics.com","url":"https://connectorbay.com/hookline/docs"},"termsOfService":"https://connectorbay.com/hookline/terms"},"servers":[{"url":"https://hookline.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/hookline/docs"},"security":[{},{"bearer":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/hook_type_info":{"post":{"operationId":"hook_type_info","summary":"One opening-hook technique's description, example, the attention-psychology reason it works, and its","description":"One opening-hook technique's description, example, the attention-psychology reason it works, and its\n    common failure mode. Use for \"why does the curiosity gap hook work\", \"explain the bold claim hook\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"hook_type":{"description":"A hook technique name.","examples":["curiosity gap","pattern interrupt","bold claim"],"minLength":1,"title":"Hook Type","type":"string"}},"required":["hook_type"],"title":"hook_type_infoArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_hook_types":{"post":{"operationId":"list_hook_types","summary":"Every opening-hook technique Hookline covers. Use for \"what hook types do you cover\".","description":"Every opening-hook technique Hookline covers. Use for \"what hook types do you cover\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_hook_typesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/retention_structure_info":{"post":{"operationId":"retention_structure_info","summary":"One whole-video retention structure's description, the attention-psychology reason it works, and its","description":"One whole-video retention structure's description, the attention-psychology reason it works, and its\n    typical use. Use for \"what's an open loop retention structure\", \"explain escalating stakes\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"structure":{"description":"A retention-structure name.","examples":["open loop","escalating stakes","before after bridge"],"minLength":1,"title":"Structure","type":"string"}},"required":["structure"],"title":"retention_structure_infoArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_retention_structures":{"post":{"operationId":"list_retention_structures","summary":"Every whole-video retention structure Hookline covers. Use for \"what retention structures do you","description":"Every whole-video retention structure Hookline covers. Use for \"what retention structures do you\n    cover\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_retention_structuresArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/first_3_seconds_checklist":{"post":{"operationId":"first_3_seconds_checklist","summary":"A practical checklist for a short-form video's opening seconds. Use for \"checklist for my video's first 3","description":"A practical checklist for a short-form video's opening seconds. Use for \"checklist for my video's first 3\n    seconds\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"first_3_seconds_checklistArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/recommend_hook":{"post":{"operationId":"recommend_hook","summary":"Suggests fitting hook types and retention structures for a stated content goal. Use for \"best hook for a","description":"Suggests fitting hook types and retention structures for a stated content goal. Use for \"best hook for a\n    tutorial video\", \"what structure should a story-time video use\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"content_goal":{"description":"A content type or goal, in plain language.","examples":["a tutorial video","a controversial opinion piece","a product demo"],"minLength":1,"title":"Content Goal","type":"string"}},"required":["content_goal"],"title":"recommend_hookArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/common_mistakes":{"post":{"operationId":"common_mistakes","summary":"Frequent hook and retention mistakes, with why each one hurts. Use for \"common mistakes that kill","description":"Frequent hook and retention mistakes, with why each one hurts. Use for \"common mistakes that kill\n    retention\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"common_mistakesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/hook_glossary":{"post":{"operationId":"hook_glossary","summary":"Definitions of core retention metrics and concepts: retention rate, average view duration, drop-off","description":"Definitions of core retention metrics and concepts: retention rate, average view duration, drop-off\n    point, watch time, loop rate, completion rate, hook, pattern interrupt, open loop, the Zeigarnik effect. Use\n    for \"what's the Zeigarnik effect\", \"what does drop-off point mean\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"term":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A specific term to look up; omit to list all.","title":"Term"}},"title":"hook_glossaryArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/search_reference":{"post":{"operationId":"search_reference","summary":"Keyword search across every hook type and retention structure. Use for \"anything about curiosity\",","description":"Keyword search across every hook type and retention structure. Use for \"anything about curiosity\",\n    \"which structures use a callback ending\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"query":{"description":"Keyword to search for.","minLength":1,"title":"Query","type":"string"}},"required":["query"],"title":"search_referenceArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}