addedInput schema / properties / api_key / description
Added value: +"API key for this call. Omit to fall back to the Authorization: Bearer / X-API-Key request header (streamable-HTTP only), then the VHGENGINE_API_KEY env var (the stdio default). No key resolvable -> unauthorized."
addedInput schema / properties / compare / description
Added value: +"Switch on compare mode, which requires `sets` and returns per-set rankings + a winner instead of one flat ranking. Leave false for the ordinary texts ranking."
addedInput schema / properties / idempotency_key / description
Added value: +"Caller-chosen replay key (any string, unique per intended effect). A repeat call with the SAME key returns the stored result and is NEVER charged twice; the same key with different arguments is an idempotency_conflict. Omit and every call is a fresh, separately charged operation."
addedInput schema / properties / platform / description
Added value: +"Target platform, which selects the length/format conventions the hooks are written and scored against. Defaults to tiktok when omitted."
addedInput schema / properties / sets / description
Added value: +"Compare mode input: 2-4 NAMED variant lists, e.g. {\"curiosity\": [\"...\"], \"contrarian\": [\"...\"]}, each 1-25 texts and <=25 texts across all sets. Requires compare=true and excludes `texts`. Every set is scored by the SAME heuristic scorer, so the winner is a craft comparison, never a view prediction."
changedInput schema / properties / tags / anyOf
Previous value: -[
- {
- "items": {
- "maxLength": 40,
- "minLength": 1,
- "pattern": "^[a-z0-9_-]+$",
- "type": "string"
- },
- "maxItems": 5,
- "minItems": 1,
- "type": "array"
- },
- {
- "type": "null"
- }
-]New value: +[
+ {
+ "items": {
+ "maxLength": 40,
+ "minLength": 1,
+ "pattern": "^[a-z0-9_-]+$",
+ "type": "string"
+ },
+ "maxItems": 5,
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+]
addedInput schema / properties / tags / description
Added value: +"1-5 lowercase slug tags ([a-z0-9_-], <=40 chars) stamped on this call's usage event so a fleet can attribute spend per campaign. Omit for no tagging. Filter later with get_usage(tag=...) / list_hooks(tag=...)."
addedInput schema / properties / tags / items
Added value: +{
+ "maxLength": 40,
+ "minLength": 1,
+ "pattern": "^[a-z0-9_-]+$",
+ "type": "string"
+}
addedInput schema / properties / tags / maxItems
Added value: +5
addedInput schema / properties / texts / description
Added value: +"1-25 hook lines (3-300 chars each) to score and rank. Use this OR sets, never both: texts is the plain ranked mode, sets is the compare mode. 1 credit per text either way."
addedInput schema / properties / texts / items
Added value: +{
+ "maxLength": 300,
+ "minLength": 3,
+ "type": "string"
+}
addedInput schema / properties / texts / maxItems
Added value: +25
addedInput schema / properties / texts / minItems
Added value: +1
addedInput schema / properties / topic
Added value: +{
+ "anyOf": [
+ {
+ "maxLength": 200,
+ "minLength": 3,
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null,
+ "description": "What the hooks are about, 3-200 chars. Supply it to score these lines the way they were generated: the scorer penalises a line that only echoes its own topic back, and it cannot apply that penalty to a topic it was never told. Omit and the scores are topic-blind, so they will not match the numbers a topic-aware call was charged for.",
+ "maxLength": 200,
+ "minLength": 3,
+ "title": "Topic"
+}
addedInput schema / properties / verbosity / description
Added value: +"How much of the response envelope to return: minimal (ids/text/totals only), standard (the default), full (adds per-dimension score attribution and timings). Shapes the RESPONSE only, never what is generated, persisted, hashed for idempotency, or charged."
addedOutput schema / description
Added value: +"Ranked scores for many hooks, or a per-set comparison. 1 credit per text."
addedOutput schema / properties
Added value: +{
+ "best": {
+ "description": "Plain mode: the highest-scoring entry."
+ },
+ "credits_charged": {
+ "description": "Credits this call actually cost.",
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "credits_remaining": {
+ "description": "Your balance AFTER this charge.",
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "replayed": {
+ "description": "true when an idempotency_key replayed a stored result, so nothing was charged again. The credits_charged below is what the ORIGINAL call cost.",
+ "type": [
+ "boolean",
+ "null"
+ ]
+ },
+ "replayed_at_charge": {
+ "description": "true when the replay was detected at the charge boundary rather than up front; either way you are billed exactly once.",
+ "type": [
+ "boolean",
+ "null"
+ ]
+ },
+ "request_id": {
+ "description": "Id of this call. Keep it: get_usage(request_id=...) itemises exactly what it charged, and it identifies the call in a support question.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "results": {
+ "description": "Plain mode: one scored entry per text, ranked.",
+ "type": [
+ "array",
+ "null"
+ ]
+ },
+ "sets": {
+ "description": "Compare mode: per-set rankings and avg_score, keyed by your set names.",
+ "type": [
+ "object",
+ "null"
+ ]
+ },
+ "winner": {
+ "description": "Compare mode: the winning set name.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "winner_summary": {
+ "description": "Compare mode: an honest reading of the win. The same heuristic scorer runs on every set, so this is a craft comparison, never a view prediction.",
+ "type": [
+ "string",
+ "null"
+ ]
+ }
+}
removedOutput schema / title
Removed value: -"score_hooks_batchDictOutput"