---
title: "Make it mine: lines written from this hook's structure for your niche"
method: POST
path: "/v1/hooks/{hook_id}/remix"
tags: ["hooks"]
---

# Make it mine: lines written from this hook's structure for your niche

`POST /v1/hooks/{hook_id}/remix`

## 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/hooks/{hook_id}/remix`
- Auth: none declared

Write up to n new opening lines (1 to 5, default 3) for your niche that keep this
real hook's structure: the device that made it travel, with the subject swapped for
yours. Body: {"niche": "teeth whitening", "n": 2}. Every answer carries the label
"Written by Hook Detector from a real hook's structure", and each line names the
structure it kept: these are written lines, never found hooks; they are never mixed
into a deck, a keep or an export. Costs 1 credit per call (a cheap model), taken
before the model is asked and refunded if it does not answer (503). 404 for a hook
that is not yours. Limited per account per hour (429). Needs research. The answer
carries remix_id; GET /v1/hooks/{hook_id}/remixes and GET /v1/remixes/{remix_id} read
it back, free. MCP: remix_hook.

## Path parameters

- `hook_id` string, uuid, required

## Headers

- `Idempotency-Key` string, nullable: retry safely: the same key and body within 24 hours answer the saved remix (Idempotent-Replayed: true) and charge nothing; the same key with another body is 422 idempotency_key_reused
- `authorization` string, nullable: Bearer hd_... from POST /v1/accounts or POST /v1/keys

## Request body

- RemixHookIn: POST /v1/hooks/{hook_id}/remix. `mode` exists to refuse "intro" in a clear 422.
  - `niche` string: your niche, product or audience, as you would say it (1 to 120 characters)
  - `n` integer: how many lines to write, 1 to 5 (default 3)
  - `mode` 'openings' | 'null', nullable: leave out (or "openings"). Write my intro works from a long-form find (POST /v1/finds/{find_id}/remix), so "intro" is refused here with 422

## Response `200`

Successful Response

- RemixOut
  - `hook_id` string, required
  - `niche` string, required
  - `n` integer, required
  - `written` WrittenLine[], required: at most n lines; a line that copies the real hook is dropped
    - `line` string, required: the written opening line, one sentence
    - `kept_structure` string, nullable, required: what was kept from the real hook, in a few words
  - `label` string, required: always "Written by Hook Detector from a real hook's structure": these are written lines, never found hooks; show the label with them
  - `credits_charged` integer, required: always 1
  - `credits` integer, required: your balance after this call
  - `remix_id` string, nullable: this remix's id: GET /v1/remixes/{remix_id} reads it back, free
  - `created_at` string, nullable

## Other responses

- `401`: missing, invalid, revoked or expired API key (code key_expired)
- `402`: not enough credits
- `403`: the key lacks the scope this call needs (insufficient_scope), or its credit_limit is spent (key_credit_limit_reached)
- `404`: not found on this account
- `413`: request body over the size cap
- `422`: invalid input (invalid_request, idempotency_key_reused), or remix_not_possible: the model answered but nothing it wrote kept the rules, or it declined the content; detail says why and the credit was refunded
- `429`: rate limited; see Retry-After
- `500`: our fault; names the request id
- `503`: model_unavailable: the language model did not answer; the credit was refunded

---

[API](https://skmtc.dev/hookdetector/apis/hook-detector.md) · [All operations](https://skmtc.dev/hookdetector/apis/hook-detector/llms.txt) · [OpenAPI document](https://skmtc.dev/hookdetector/apis/hook-detector/revisions/b136a2804d2b?raw)
