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 / archetypes / description
Added value: +"Restrict generation to these archetype ids (see list_archetypes). Omit to let the engine spread across archetypes, which is what you want unless you are deliberately narrowing a deck."
addedInput schema / properties / archetypes / items
Added value: +{
+ "enum": [
+ "curiosity_gap",
+ "contrarian",
+ "data_shock",
+ "story",
+ "transformation",
+ "listicle",
+ "authority",
+ "urgency"
+ ],
+ "type": "string"
+}
addedInput schema / properties / count / description
Added value: +"Hooks per topic, 1-25. With `topics` this applies to every subject, so the job's cost scales with count * len(topics)."
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 / mode / description
Added value: +"Generation engine and therefore the price: instant (0 base + 1/hook, deterministic templates, sub-second), smart (0 + 2/hook, one LLM call, seconds), research (10 + 4/hook, brief->draft->judge, tens of seconds). Aliases: template|off|quick->instant, llm|on|fast->smart, search|deep|deep_research->research. Omit (or auto) -> smart when an LLM key is configured, else instant."
addedInput schema / properties / mode / enum
Added value: +[
+ "instant",
+ "template",
+ "off",
+ "quick",
+ "smart",
+ "llm",
+ "on",
+ "fast",
+ "research",
+ "search",
+ "deep",
+ "deep_research",
+ "auto",
+ null
+]
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."
changedInput schema / properties / style / anyOf
Previous value: -[
- {
- "description": "Voice/tone to match. Honored as a real instruction by smart and research; on instant it only varies which deterministic template fillers are drawn.",
- "maxLength": 200,
- "type": "string"
- },
- {
- "type": "null"
- }
-]New value: +[
+ {
+ "description": "Voice/tone to match, <=200 chars. Honored as a real instruction by smart and research; on instant it only varies which deterministic template fillers are drawn, so it cannot change the voice there. Omit for the engine's default register.",
+ "maxLength": 200,
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+]
addedInput schema / properties / style / description
Added value: +"Voice/tone to match, <=200 chars. Honored as a real instruction by smart and research; on instant it only varies which deterministic template fillers are drawn, so it cannot change the voice there. Omit for the engine's default register."
addedInput schema / properties / style / maxLength
Added value: +200
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 / topic / description
Added value: +"Single subject for the job, 3-200 chars. Pass EITHER this or `topics`, never both and never neither."
addedInput schema / properties / topic / maxLength
Added value: +200
addedInput schema / properties / topic / minLength
Added value: +3
addedInput schema / properties / topics / description
Added value: +"1-20 subjects run as ONE job with ONE atomic charge; the result is the batch envelope instead of a single generate body. Pass EITHER this or `topic`."
addedInput schema / properties / topics / items
Added value: +{
+ "maxLength": 200,
+ "minLength": 3,
+ "type": "string"
+}
addedInput schema / properties / topics / maxItems
Added value: +20
addedInput schema / properties / topics / minItems
Added value: +1
addedOutput schema / description
Added value: +"A queued job to poll with get_job. Nothing is charged until it runs."
addedOutput schema / properties
Added value: +{
+ "estimated_seconds": {
+ "description": "Queue-aware estimate of total time to a result.",
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "expires_at": {
+ "description": "When an unexecuted job is abandoned, ISO-8601 UTC.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "job_id": {
+ "description": "Pass this to get_job.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "poll_after_seconds": {
+ "description": "Wait at least this long before the first get_job. Honor it.",
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "replayed": {
+ "description": "true when an idempotency_key returned an EXISTING job rather than queuing a new one. Poll the returned job_id either way.",
+ "type": [
+ "boolean",
+ "null"
+ ]
+ },
+ "requeued": {
+ "description": "true when an idempotent resubmit revived an existing job.",
+ "type": [
+ "boolean",
+ "null"
+ ]
+ },
+ "status": {
+ "description": "Lifecycle state; 'queued' immediately after submit.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "status_url": {
+ "description": "REST URL for the same status (HTTP clients only).",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "warning": {
+ "description": "Present only alongside worker_alive:false; says what to do instead.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "worker_alive": {
+ "description": "Present and FALSE only when no job worker will ever run this job. Then read `warning` and use generate_hooks instead of polling.",
+ "type": [
+ "boolean",
+ "null"
+ ]
+ }
+}
removedOutput schema / title
Removed value: -"start_generate_jobDictOutput"