save_research
Save a HookLayer result the user already received in this conversation so it appears under Saved Research in their HookMafia dashboard. 0 credits: this stores the result you already hold, it never re-runs the research tool. After a research result, offer once in one line to save it to HookMafia; call this only when the user says yes or asks to save, keep or bookmark a result. Pass the tool's structured result as result (billing and chain fields are dropped server-side), the kind that matches the tool, a short title, and a stable request_id so a retried save is deduplicated instead of duplicated. Returns the saved id and a dashboard link. Use list_saved_research / get_saved_research to read it back and compare_saved_products for 2-4 saved analyze_product results.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | creator_analysis (analyze_account), hook_score (score_hook), virality_prediction (predict_virality), product_scout (product_scout), product_analysis (analyze_product), script (viral_remix, match_voice), template (find_viral_template, brief_to_blueprint) | |
| title | Yes | Short plain-text title, e.g. "@handle TikTok analysis" or the product name | |
| result | Yes | The structured result of the earlier tool call, exactly as received. Up to 64 KB after server-side allowlisting. | |
| tool_name | Yes | The HookLayer tool that produced the result, e.g. analyze_product | |
| product_id | No | Canonical product id for product_analysis / product_scout results | |
| request_id | No | Idempotency key. Reuse the same value when retrying the same save; a different result under the same key is refused. | |
| product_url | No | http(s) product page URL | |
| input_summary | No | What was asked: handle, platform, topic, product URL. Up to 4 KB. Never include credentials. | |
| source_timestamp | No | ISO 8601 time the research ran (the result's as_of / fetched_at when present) |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| saved | No | ||
| deduplicated | No | true when the same request_id and identical content had already been saved; nothing new was written | |
| dashboard_url | No | ||
| dropped_fields | No | Top-level result fields that are not persisted (billing, chain hints, unknown keys) | |
| credits_charged | No | Always 0 |