Guides and tools
Team MCP
Build funnels and pages, manage flights and workflows, and query your analytics.
Server URLhttps://lp.thriftler.com/mcp
Connect your assistant
MCP lets an assistant call AFFMAX tools using your account permissions. Use a client that supports remote HTTP MCP servers and bearer authentication.
- In Settings > API Tokens > Connect an agent, choose AFFMAX. Use a token scoped to your team. The combined server checks permissions on each tool call.
- Add the server URL above to your client and set
Authorization: Bearer YOUR_TOKEN. ReplaceYOUR_TOKENwith your token. - Reconnect the client to load the tool list. Keep the token in your client's secret configuration.
Example configuration for clients that accept mcpServers JSON. Your client's settings format may differ.
{
"mcpServers": {
"affmax-team": {
"url": "https://lp.thriftler.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_TOKEN"
}
}
}
}
For integrations, the tool catalog JSON contains the registered tool definitions and input schemas. Your connected client discovers these through MCP tools/list.
Permissions
funnels:read / write / publish- Inspect funnels and content, create or edit them, and publish funnels. Publishing is a separate operation.
workflows:read / write / run- Inspect workflows and runs, edit workflows, and start or replay runs.
flights:read / write- Inspect flights and autopilot rules, or change them. Tools with a confirm argument support a preview before execution.
reports:read- Query analytics, read saved reports, and request or retrieve report exports.
The combined server accepts team tokens with any subset of these abilities. A listed tool still requires its own permissions when called. Building a funnel creates a draft; publishing is a separate step.
For a smaller tool list, connect to /mcp/funnels, /mcp/workflows, /mcp/flights, or /mcp/reports with that domain's read permission. Read the MCP integration guide for funnel workflows and built-in playbooks.
Troubleshooting
- Cannot connect: check the server URL, bearer header, and token. Publisher and team tokens belong to different servers. Revoked tokens must be replaced.
- Permission denied: check the abilities above and your account's access. Seeing a tool in the list does not grant permission to call it.
- Invalid arguments: use the tool's input schema below and the error's field details to correct the request.
Tool reference
Names, descriptions, and schemas come from the registered tools. Open a tool to inspect its arguments and complete JSON Schema.
54 tools
ai_edit_landing_pageArguments
Edit a raw-HTML landing page with a natural-language instruction (runs the structured AI HTML editor synchronously). Item-driven pages are rejected — use edit_listicle_items.
landing_page_idinteger · required- The id of the landing page to edit.
instructionstring · required- Natural-language edit instruction (e.g. "make the headline more urgent and use a serif font").
Full input schema
{
"properties": {
"landing_page_id": {
"description": "The id of the landing page to edit.",
"type": "integer"
},
"instruction": {
"description": "Natural-language edit instruction (e.g. \"make the headline more urgent and use a serif font\").",
"type": "string"
}
},
"type": "object",
"required": [
"landing_page_id",
"instruction"
]
}
ai_edit_lead_formArguments
Edit a lead form with a natural-language instruction (runs FormAiEditor synchronously — persists field/consent/outcome changes and cascades outcome renames/deletes onto funnel nodes).
form_idinteger · required- The id of the lead form to edit.
instructionstring · required- Natural-language edit instruction (e.g. "add a phone field and a high-intent outcome for buyers in CA").
Full input schema
{
"properties": {
"form_id": {
"description": "The id of the lead form to edit.",
"type": "integer"
},
"instruction": {
"description": "Natural-language edit instruction (e.g. \"add a phone field and a high-intent outcome for buyers in CA\").",
"type": "string"
}
},
"type": "object",
"required": [
"form_id",
"instruction"
]
}
ai_edit_path_flowArguments
Edit a path-flow quiz with a natural-language instruction (runs PathFlowAiEditor synchronously — persists step/option/goto/rule/copy changes + rebuilds). Outcome rename/delete use edit_path_flow_outcomes.
flow_idinteger · required- The id of the path flow to edit.
instructionstring · required- Natural-language edit instruction (e.g. "add a step asking about timeline and route impatient users to the express outcome").
Full input schema
{
"properties": {
"flow_id": {
"description": "The id of the path flow to edit.",
"type": "integer"
},
"instruction": {
"description": "Natural-language edit instruction (e.g. \"add a step asking about timeline and route impatient users to the express outcome\").",
"type": "string"
}
},
"type": "object",
"required": [
"flow_id",
"instruction"
]
}
apply_funnel_operationsArguments
Apply a batch of named graph operations to a funnel atomically (all-or-nothing). Each op carries an `op` plus its keys (ref/from/to/weight/slot/destination_id/...). Returns the updated graph + per-op results, or the failing op index on error.
funnel_idinteger · required- The id of the funnel to edit.
operationsarray · required- Ordered list of graph operations. Each item is an object with an `op` key (e.g. add_traffic_source, add_offer_node, set_flow_edge, set_weight, remove_node) plus that op's parameters.
Full input schema
{
"properties": {
"funnel_id": {
"description": "The id of the funnel to edit.",
"type": "integer"
},
"operations": {
"description": "Ordered list of graph operations. Each item is an object with an `op` key (e.g. add_traffic_source, add_offer_node, set_flow_edge, set_weight, remove_node) plus that op's parameters.",
"items": {
"type": "object"
},
"type": "array"
}
},
"type": "object",
"required": [
"funnel_id",
"operations"
]
}
apply_workflow_operationsArguments
Apply an atomic batch of graph operations to a workflow (all-or-nothing). This is the ONLY way to change a workflow's structure. Each operation is an object with an `op` key. Node refs (`ref`/`from`/`to`) are node uuids from get_workflow; a node added earlier in the SAME batch is referenced by the `as` alias you tag its add_node op with. Operations: - add_node {type, config?, x?, y?, as?} — add a node of the given registry `type` (see list_workflow_node_types). - remove_node {ref} — delete a node and every edge touching it. - set_node_config {ref, config} — merge `config` into a node's config. - set_edge {from, to, handle?} — wire an edge from the source node's `handle` output port (default `out`). - remove_edge {from, to, handle?} — delete the edge between two nodes (optionally only the one leaving `handle`). - move_node {ref, x, y} — reposition a node on the canvas. - set_trigger {trigger_type, event?, config?} — set what starts the workflow: `trigger_type` is manual|scheduled|event|webhook; an event trigger REQUIRES `event` (a trigger-event key from list_workflow_node_types); a scheduled trigger stores its cron in config (e.g. config: {"cron": "0 * * * *"}). - set_input_form {fields, steps?, result_template?, success_message?, docs?} — define the "form face" a human fills to seed a run. Each field is {key, label, type (text|textarea|number|select|boolean|email|url|file), required?, options? (select), default?, placeholder?, help?, sensitive?, visible_when? {field, operator: equals|in, value}}. A `visible_when` field shows only when another field matches (chains cascade; hidden values dropped + required waived server-side). `steps` is [{key, title, field_keys}] grouping fields into ordered forward-only screens. Every field key becomes a run-context value templated as {{ key }} in downstream nodes. `result_template` is the completion message shown to the submitter. Send fields: [] to clear. `docs` is publisher-facing markdown context ("about this form") surfaced on the portal form page, the Forms API, and its generated OpenAPI; omitted = preserved, empty string = cleared. Returns the updated graph + per-op results, or the failing op index on error (batch rolled back).
workflow_idinteger · required- The id of the workflow to edit.
operationsarray · required- Ordered op objects (add_node{type,config?,x?,y?,as?}, remove_node{ref}, set_node_config{ref,config}, set_edge{from,to,handle?}, remove_edge{from,to,handle?}, move_node{ref,x,y}, set_trigger{trigger_type,event?,config?}, set_input_form{fields,steps?,result_template?,success_message?,docs?}); refs are node uuids from get_workflow or an `as` alias of a node added earlier in THIS batch; applied atomically.
Full input schema
{
"properties": {
"workflow_id": {
"description": "The id of the workflow to edit.",
"type": "integer"
},
"operations": {
"description": "Ordered op objects (add_node{type,config?,x?,y?,as?}, remove_node{ref}, set_node_config{ref,config}, set_edge{from,to,handle?}, remove_edge{from,to,handle?}, move_node{ref,x,y}, set_trigger{trigger_type,event?,config?}, set_input_form{fields,steps?,result_template?,success_message?,docs?}); refs are node uuids from get_workflow or an `as` alias of a node added earlier in THIS batch; applied atomically.",
"items": {
"type": "object"
},
"type": "array"
}
},
"type": "object",
"required": [
"workflow_id",
"operations"
]
}
build_funnelArguments
Execute an approved plan into a draft funnel (status -> building). Only runs while awaiting_approval. Poll get_funnel_build until built, then publish_funnel.
build_idinteger · required- The id of the build (awaiting_approval) to execute.
Full input schema
{
"properties": {
"build_id": {
"description": "The id of the build (awaiting_approval) to execute.",
"type": "integer"
}
},
"type": "object",
"required": [
"build_id"
]
}
create_funnel_planArguments
Start an AI funnel build: create a build (planning) and dispatch the planner. Poll get_funnel_build until status is awaiting_approval, then build_funnel.
instructionstring · required- Natural-language description of the funnel to build.
inputsobject · optional- Optional structured hints folded into the planner context: offer_ids (array), domain, vertical.
Full input schema
{
"properties": {
"instruction": {
"description": "Natural-language description of the funnel to build.",
"type": "string"
},
"inputs": {
"description": "Optional structured hints folded into the planner context: offer_ids (array), domain, vertical.",
"type": "object"
}
},
"type": "object",
"required": [
"instruction"
]
}
create_landing_pageArguments
Create a landing page. mode generate (generate:true, offer_id + page_type) returns a page id immediately and generates asynchronously — poll get_landing_page until generation_status is complete; mode manual (page_type + title + html_content) stores exact content. Item-driven page_types (listicle/offer_wall) are generation-only.
generateboolean · optional- true → AI-generate from an offer; false/omitted → manual exact content. Item-driven page_types are always generated.
offer_idinteger · optional- Offer to generate from (required to generate or for item-driven pages); optional routing hint when manual.
page_typestring · required- One of: prelander, advertorial, custom (raw-HTML) or listicle, offer_wall (item-driven, generation-only).
custom_instructionsstring · optional- Extra generation guidance (generate mode).
template_slugstring · optional- Force a specific template slug (generate mode).
variant_labelstring · optional- Variant label for the generated page (defaults to v1).
additional_offer_idsarray · optional- Item-driven pages: the extra offers (slot 2..N) to curate alongside the primary offer_id.
namestring · optional- Optional internal display name. Defaults to a placeholder ("{offer} {Page Type}" in generate mode, the title in manual mode). An explicit name here is never overwritten by AI-headline upgrade after generation.
titlestring · optional- Manual mode: page title (required when manual).
html_contentstring · optional- Manual mode: the exact page HTML (required when manual).
css_customstring · optional- Manual mode: optional custom CSS.
designobject · optional- Manual mode: optional design tokens (fontPairing, accentColor).
domain_idinteger · optional- Manual mode: optional domain id.
Full input schema
{
"properties": {
"generate": {
"description": "true → AI-generate from an offer; false/omitted → manual exact content. Item-driven page_types are always generated.",
"type": "boolean"
},
"offer_id": {
"description": "Offer to generate from (required to generate or for item-driven pages); optional routing hint when manual.",
"type": "integer"
},
"page_type": {
"description": "One of: prelander, advertorial, custom (raw-HTML) or listicle, offer_wall (item-driven, generation-only).",
"type": "string"
},
"custom_instructions": {
"description": "Extra generation guidance (generate mode).",
"type": "string"
},
"template_slug": {
"description": "Force a specific template slug (generate mode).",
"type": "string"
},
"variant_label": {
"description": "Variant label for the generated page (defaults to v1).",
"type": "string"
},
"additional_offer_ids": {
"description": "Item-driven pages: the extra offers (slot 2..N) to curate alongside the primary offer_id.",
"items": {
"type": "integer"
},
"type": "array"
},
"name": {
"description": "Optional internal display name. Defaults to a placeholder (\"{offer} {Page Type}\" in generate mode, the title in manual mode). An explicit name here is never overwritten by AI-headline upgrade after generation.",
"type": "string"
},
"title": {
"description": "Manual mode: page title (required when manual).",
"type": "string"
},
"html_content": {
"description": "Manual mode: the exact page HTML (required when manual).",
"type": "string"
},
"css_custom": {
"description": "Manual mode: optional custom CSS.",
"type": "string"
},
"design": {
"description": "Manual mode: optional design tokens (fontPairing, accentColor).",
"type": "object"
},
"domain_id": {
"description": "Manual mode: optional domain id.",
"type": "integer"
}
},
"type": "object",
"required": [
"page_type"
]
}
create_lead_buyerArguments
Create a lead buyer (host/post destination for captured leads): name (required), is_active, endpoint_url (fallback posting URL used only when a routed endpoint does not define its own post_url), auth_type (none/bearer/api_key/basic, default none) + auth_credentials, posting_format (json/form_encoded/xml, default json), field_mapping (buyer_field => template, inherited/overridden per endpoint), response_parsing, post_timeout_ms (default 5000), daily_cap, priority (default 10, lower is higher priority). Wire an actual posting endpoint with create_lead_buyer_endpoint. auth_credentials is never returned in any response.
namestring · required- Buyer name.
is_activeboolean · optional- Whether the buyer currently receives leads. Defaults true.
endpoint_urlstring · optional- Fallback posting URL used only when a routed endpoint does not define its own post_url.
auth_typestring · optional- none, bearer, api_key, or basic. Defaults none.
auth_credentialsobject · optional- Credentials matching auth_type: {token} for bearer, {header, key} for api_key, {username, password} for basic. Stored encrypted; never returned.
posting_formatstring · optional- json, form_encoded, or xml. Defaults json.
field_mappingobject · optional- Default field mapping: buyer_field => "{{ template }}" or a literal string. Endpoints may override.
response_parsingobject · optional- success_indicators[], duplicate_indicators[], lead_id_path, price_path, redirect_path, rejection_reason_path.
post_timeout_msinteger · optional- Posting timeout in milliseconds. Defaults 5000.
daily_capinteger · optional- Daily lead cap. Omit for unlimited.
priorityinteger · optional- Lower is higher priority. Defaults 10.
Full input schema
{
"properties": {
"name": {
"description": "Buyer name.",
"type": "string"
},
"is_active": {
"description": "Whether the buyer currently receives leads. Defaults true.",
"type": "boolean"
},
"endpoint_url": {
"description": "Fallback posting URL used only when a routed endpoint does not define its own post_url.",
"type": "string"
},
"auth_type": {
"description": "none, bearer, api_key, or basic. Defaults none.",
"type": "string"
},
"auth_credentials": {
"description": "Credentials matching auth_type: {token} for bearer, {header, key} for api_key, {username, password} for basic. Stored encrypted; never returned.",
"type": "object"
},
"posting_format": {
"description": "json, form_encoded, or xml. Defaults json.",
"type": "string"
},
"field_mapping": {
"description": "Default field mapping: buyer_field => \"{{ template }}\" or a literal string. Endpoints may override.",
"type": "object"
},
"response_parsing": {
"description": "success_indicators[], duplicate_indicators[], lead_id_path, price_path, redirect_path, rejection_reason_path.",
"type": "object"
},
"post_timeout_ms": {
"description": "Posting timeout in milliseconds. Defaults 5000.",
"type": "integer"
},
"daily_cap": {
"description": "Daily lead cap. Omit for unlimited.",
"type": "integer"
},
"priority": {
"description": "Lower is higher priority. Defaults 10.",
"type": "integer"
}
},
"type": "object",
"required": [
"name"
]
}
create_lead_buyer_endpointArguments
Create a lead-buyer posting endpoint: lead_buyer_id (required), name (required — becomes the Destination name a funnel wires a lead edge to), post_url (required), post_method (get/post/put, default post), post_format (json/form/xml, default form), field_mapping (buyer_field => template; defaults to the standard TrustedForm/Jornaya compliance mapping), response_parser_config, strip_referrer, require_trustedform, cap_config. Creates the Destination + LeadBuyerEndpoint atomically (all-or-nothing). Returns destination_id (wire this into a funnel) and endpoint id.
lead_buyer_idinteger · required- The id of the lead buyer this endpoint posts to.
namestring · required- Destination name (shown in list_destinations and the funnel builder).
post_urlstring · required- The URL leads are posted to.
post_methodstring · optional- get, post, or put. Defaults post.
post_formatstring · optional- json, form, or xml. Defaults form.
field_mappingobject · optional- buyer_field => "{{ template }}" or a literal string. Defaults to the standard TrustedForm/Jornaya compliance mapping.
response_parser_configobject · optional- success_indicators[], duplicate_indicators[], lead_id_path, price_path, redirect_path, rejection_reason_path.
strip_referrerboolean · optional- When true, the originating referrer header is not forwarded to the buyer. Defaults false.
require_trustedformboolean · optional- When true, a lead without a TrustedForm certificate is rejected instead of posted. Defaults false.
cap_configobject · optional- daily/weekly/monthly caps + on_exhaustion behavior.
Full input schema
{
"properties": {
"lead_buyer_id": {
"description": "The id of the lead buyer this endpoint posts to.",
"type": "integer"
},
"name": {
"description": "Destination name (shown in list_destinations and the funnel builder).",
"type": "string"
},
"post_url": {
"description": "The URL leads are posted to.",
"type": "string"
},
"post_method": {
"description": "get, post, or put. Defaults post.",
"type": "string"
},
"post_format": {
"description": "json, form, or xml. Defaults form.",
"type": "string"
},
"field_mapping": {
"description": "buyer_field => \"{{ template }}\" or a literal string. Defaults to the standard TrustedForm/Jornaya compliance mapping.",
"type": "object"
},
"response_parser_config": {
"description": "success_indicators[], duplicate_indicators[], lead_id_path, price_path, redirect_path, rejection_reason_path.",
"type": "object"
},
"strip_referrer": {
"description": "When true, the originating referrer header is not forwarded to the buyer. Defaults false.",
"type": "boolean"
},
"require_trustedform": {
"description": "When true, a lead without a TrustedForm certificate is rejected instead of posted. Defaults false.",
"type": "boolean"
},
"cap_config": {
"description": "daily/weekly/monthly caps + on_exhaustion behavior.",
"type": "object"
}
},
"type": "object",
"required": [
"lead_buyer_id",
"name",
"post_url"
]
}
create_lead_formArguments
Create a lead form. mode generate (generate:true, vertical) runs AI synchronously; mode manual (name + optional fields/consent/thank_you_config) stores exact content. Both seed the default "submitted" outcome.
generateboolean · optional- true → AI-generate for a vertical; false/omitted → manual exact content.
verticalstring · optional- The vertical to generate for (required to generate).
instructionsstring · optional- Extra generation guidance (generate mode).
namestring · optional- Manual mode: form name (required when manual).
fieldsarray · optional- Manual mode: form field definitions.
consent_languagestring · optional- Manual mode: consent language.
thank_you_configobject · optional- Manual mode: thank-you screen config.
Full input schema
{
"properties": {
"generate": {
"description": "true → AI-generate for a vertical; false/omitted → manual exact content.",
"type": "boolean"
},
"vertical": {
"description": "The vertical to generate for (required to generate).",
"type": "string"
},
"instructions": {
"description": "Extra generation guidance (generate mode).",
"type": "string"
},
"name": {
"description": "Manual mode: form name (required when manual).",
"type": "string"
},
"fields": {
"description": "Manual mode: form field definitions.",
"items": {
"type": "object"
},
"type": "array"
},
"consent_language": {
"description": "Manual mode: consent language.",
"type": "string"
},
"thank_you_config": {
"description": "Manual mode: thank-you screen config.",
"type": "object"
}
},
"type": "object"
}
create_path_flowArguments
Create a path-flow quiz. mode generate (generate:true, offer_id) runs AI synchronously; mode manual (name + optional steps/outcomes) stores exact content. Both provision the served quiz page + rebuild.
generateboolean · optional- true → AI-generate from an offer; false/omitted → manual exact content.
offer_idinteger · optional- The offer to generate from (required to generate).
instructionstring · optional- Extra generation guidance (generate mode).
namestring · optional- Manual mode: flow name (required when manual).
verticalstring · optional- Manual mode: optional vertical.
stepsarray · optional- Manual mode: quiz steps — each {key?, question, help_text?, answer_type? (single_choice|zip_input), options:[{value,label,icon?,goto_step?}], is_required?}.
outcomesarray · optional- Manual mode: routing outcomes — each {key, label?, rules:[{field,operator,value}], is_fallback?}.
Full input schema
{
"properties": {
"generate": {
"description": "true → AI-generate from an offer; false/omitted → manual exact content.",
"type": "boolean"
},
"offer_id": {
"description": "The offer to generate from (required to generate).",
"type": "integer"
},
"instruction": {
"description": "Extra generation guidance (generate mode).",
"type": "string"
},
"name": {
"description": "Manual mode: flow name (required when manual).",
"type": "string"
},
"vertical": {
"description": "Manual mode: optional vertical.",
"type": "string"
},
"steps": {
"description": "Manual mode: quiz steps — each {key?, question, help_text?, answer_type? (single_choice|zip_input), options:[{value,label,icon?,goto_step?}], is_required?}.",
"items": {
"type": "object"
},
"type": "array"
},
"outcomes": {
"description": "Manual mode: routing outcomes — each {key, label?, rules:[{field,operator,value}], is_fallback?}.",
"items": {
"type": "object"
},
"type": "array"
}
},
"type": "object"
}
create_workflowArguments
Create an empty DRAFT workflow (manual trigger unless trigger_type/event say otherwise). Returns the new workflow id; wire nodes/edges with apply_workflow_operations, then activate with set_workflow_status.
namestring · required- The workflow name.
descriptionstring · optional- Optional description of what the workflow automates.
trigger_typestring · optional- Optional trigger type: manual (default), scheduled, event, or webhook.
eventstring · optional- REQUIRED when trigger_type is event: a trigger-event key from list_workflow_node_types (e.g. postback.received).
trigger_configobject · optional- Optional trigger config (e.g. {"cron": "0 * * * *"} for a scheduled trigger).
Full input schema
{
"properties": {
"name": {
"description": "The workflow name.",
"type": "string"
},
"description": {
"description": "Optional description of what the workflow automates.",
"type": "string"
},
"trigger_type": {
"description": "Optional trigger type: manual (default), scheduled, event, or webhook.",
"type": "string"
},
"event": {
"description": "REQUIRED when trigger_type is event: a trigger-event key from list_workflow_node_types (e.g. postback.received).",
"type": "string"
},
"trigger_config": {
"description": "Optional trigger config (e.g. {\"cron\": \"0 * * * *\"} for a scheduled trigger).",
"type": "object"
}
},
"type": "object",
"required": [
"name"
]
}
decide_approvalArguments
Approve or reject a workflow run that is parked (Waiting) on an approval step. Pass the approval step id (from get_workflow_run — a step with node_type "approval" and status "waiting"), approved=true|false, and an optional note. The run resumes asynchronously down the approved/rejected branch — poll get_workflow_run for progress.
step_idinteger · required- The id of the Waiting approval step to decide (from get_workflow_run).
approvedboolean · required- true to approve (route the "approved" handle), false to reject ("rejected").
notestring · optional- Optional reviewer note recorded on the decision and exposed to downstream nodes as {{ approval.note }}.
Full input schema
{
"properties": {
"step_id": {
"description": "The id of the Waiting approval step to decide (from get_workflow_run).",
"type": "integer"
},
"approved": {
"description": "true to approve (route the \"approved\" handle), false to reject (\"rejected\").",
"type": "boolean"
},
"note": {
"description": "Optional reviewer note recorded on the decision and exposed to downstream nodes as {{ approval.note }}.",
"type": "string"
}
},
"type": "object",
"required": [
"step_id",
"approved"
]
}
edit_lead_form_outcomesArguments
Apply discrete lead-form outcome ops (add_outcome/edit_outcome_rules/remove_outcome/set_outcome_post_submit) in one transaction; cascades rename/removal onto funnel lead_form nodes. Invalid rules error.
form_idinteger · required- The id of the lead form to edit.
operationsarray · required- Ordered outcome ops. Each has an `op` (add_outcome/edit_outcome_rules/remove_outcome/set_outcome_post_submit) + `key`, plus that op's params (label, rules[{field,operator,value}], mode, confirm_heading/message/seconds).
Full input schema
{
"properties": {
"form_id": {
"description": "The id of the lead form to edit.",
"type": "integer"
},
"operations": {
"description": "Ordered outcome ops. Each has an `op` (add_outcome/edit_outcome_rules/remove_outcome/set_outcome_post_submit) + `key`, plus that op's params (label, rules[{field,operator,value}], mode, confirm_heading/message/seconds).",
"items": {
"type": "object"
},
"type": "array"
}
},
"type": "object",
"required": [
"form_id",
"operations"
]
}
edit_lead_form_stepsArguments
Apply discrete lead-form step ops (add_step/edit_step/remove_step/reorder_steps/move_field/set_branch_rules) in one transaction; normalizes the step document (forward-only equals/in branch rules) and re-bakes the bound page.
form_idinteger · required- The id of the lead form to edit.
operationsarray · required- Ordered step ops. Each has an `op` (add_step/edit_step/remove_step/reorder_steps/move_field/set_branch_rules) plus its keys: key, title, subtitle, position (add/edit/remove_step); reassign_to (remove_step); ordered_keys (reorder_steps); field_name + step_key (move_field); step_key + rules[{field,operator(equals|in),value,goto}] (set_branch_rules), where goto is a later step key, "__next__", or "__end__".
Full input schema
{
"properties": {
"form_id": {
"description": "The id of the lead form to edit.",
"type": "integer"
},
"operations": {
"description": "Ordered step ops. Each has an `op` (add_step/edit_step/remove_step/reorder_steps/move_field/set_branch_rules) plus its keys: key, title, subtitle, position (add/edit/remove_step); reassign_to (remove_step); ordered_keys (reorder_steps); field_name + step_key (move_field); step_key + rules[{field,operator(equals|in),value,goto}] (set_branch_rules), where goto is a later step key, \"__next__\", or \"__end__\".",
"items": {
"type": "object"
},
"type": "array"
}
},
"type": "object",
"required": [
"form_id",
"operations"
]
}
edit_listicle_itemsArguments
Edit an item-driven landing page (listicle/offer_wall): pass `instruction` for an AI edit (copy, editorial structure, article meta, rating/badge, variation swap, item images, design, custom CSS, or full layout redesign — everything except routing), OR `operations` (edit_item_copy/reorder_items/add_editorial_item/add_offer_item/remove_item/edit_headline) for precise ops. Adding or removing an OFFER item is ops-mode only (add_offer_item/remove_item) — not available via instruction. Returns the rebuilt items.
landing_page_idinteger · required- The id of the item-driven landing page to edit.
instructionstring · optional- Natural-language edit (AI mode). Mutually exclusive with operations.
operationsarray · optional- Ordered discrete item ops (ops mode). Each has an `op` (edit_item_copy/reorder_items/add_editorial_item/add_offer_item/remove_item/edit_headline) plus its keys: item_id, heading, body, cta, order, position, headline, subheadline, and for add_offer_item, `destination_id` (required, must resolve to a team destination) plus optional heading/body/cta (manual copy; omitted = synthesized fallback copy from the destination's offer) and position. Mutually exclusive with instruction.
Full input schema
{
"properties": {
"landing_page_id": {
"description": "The id of the item-driven landing page to edit.",
"type": "integer"
},
"instruction": {
"description": "Natural-language edit (AI mode). Mutually exclusive with operations.",
"type": "string"
},
"operations": {
"description": "Ordered discrete item ops (ops mode). Each has an `op` (edit_item_copy/reorder_items/add_editorial_item/add_offer_item/remove_item/edit_headline) plus its keys: item_id, heading, body, cta, order, position, headline, subheadline, and for add_offer_item, `destination_id` (required, must resolve to a team destination) plus optional heading/body/cta (manual copy; omitted = synthesized fallback copy from the destination's offer) and position. Mutually exclusive with instruction.",
"items": {
"type": "object"
},
"type": "array"
}
},
"type": "object",
"required": [
"landing_page_id"
]
}
edit_path_flow_outcomesArguments
Apply discrete path-flow outcome ops (add_outcome/edit_outcome_rules/remove_outcome/rename_outcome) in one transaction; cascades rename/removal onto funnel path_flow nodes. Invalid rules error.
flow_idinteger · required- The id of the path flow to edit.
operationsarray · required- Ordered outcome ops. Each has an `op` (add_outcome/edit_outcome_rules/remove_outcome/rename_outcome) + `key`, plus its params (new_key, label, is_fallback, rules:[{field,operator,value}]).
Full input schema
{
"properties": {
"flow_id": {
"description": "The id of the path flow to edit.",
"type": "integer"
},
"operations": {
"description": "Ordered outcome ops. Each has an `op` (add_outcome/edit_outcome_rules/remove_outcome/rename_outcome) + `key`, plus its params (new_key, label, is_fallback, rules:[{field,operator,value}]).",
"items": {
"type": "object"
},
"type": "array"
}
},
"type": "object",
"required": [
"flow_id",
"operations"
]
}
edit_path_flow_stepsArguments
Apply discrete path-flow step ops (add_step/edit_step/remove_step/reorder_steps/edit_option/set_goto) in one transaction; re-bakes the quiz page. Guard violations (dangling goto, referenced step) error.
flow_idinteger · required- The id of the path flow to edit.
operationsarray · required- Ordered step ops. Each has an `op` (add_step/edit_step/remove_step/reorder_steps/edit_option/set_goto) plus its keys (step_key, new_step_key, after_step_key, question, help_text, answer_type, options, ordered_step_keys, option_value, option_label, option_icon, goto_step_key).
Full input schema
{
"properties": {
"flow_id": {
"description": "The id of the path flow to edit.",
"type": "integer"
},
"operations": {
"description": "Ordered step ops. Each has an `op` (add_step/edit_step/remove_step/reorder_steps/edit_option/set_goto) plus its keys (step_key, new_step_key, after_step_key, question, help_text, answer_type, options, ordered_step_keys, option_value, option_label, option_icon, goto_step_key).",
"items": {
"type": "object"
},
"type": "array"
}
},
"type": "object",
"required": [
"flow_id",
"operations"
]
}
get_exportArguments
Check the status of an async export submitted with submit_export; returns a signed download URL once completed.
idinteger · required- The export id returned by submit_export.
Full input schema
{
"properties": {
"id": {
"description": "The export id returned by submit_export.",
"type": "integer"
}
},
"type": "object",
"required": [
"id"
]
}
get_flightArguments
Get one flight in full detail: budget, ad URL, stats (spend/impressions/clicks/conversions/revenue/ROI), and its compiled Autopilot rules.
flight_idinteger · required- The flight to fetch.
Full input schema
{
"properties": {
"flight_id": {
"description": "The flight to fetch.",
"type": "integer"
}
},
"type": "object",
"required": [
"flight_id"
]
}
get_funnelArguments
Get one funnel's routing graph (nodes keyed by uuid ref, plus edges) by id.
funnel_idinteger · required- The id of the funnel to fetch.
Full input schema
{
"properties": {
"funnel_id": {
"description": "The id of the funnel to fetch.",
"type": "integer"
}
},
"type": "object",
"required": [
"funnel_id"
]
}
get_funnel_buildArguments
Poll a funnel build's lifecycle state (status, plan, funnel_id, log) by id.
build_idinteger · required- The id of the funnel build to poll.
Full input schema
{
"properties": {
"build_id": {
"description": "The id of the funnel build to poll.",
"type": "integer"
}
},
"type": "object",
"required": [
"build_id"
]
}
get_landing_pageArguments
Fetch one landing page by id (item-driven pages include their ordered items).
landing_page_idinteger · required- The id of the landing page to fetch.
Full input schema
{
"properties": {
"landing_page_id": {
"description": "The id of the landing page to fetch.",
"type": "integer"
}
},
"type": "object",
"required": [
"landing_page_id"
]
}
get_lead_buyerArguments
Read one lead buyer (auth type, posting format, field mapping, response parsing, caps, priority) plus its posting endpoints (id, destination_id, post_url, post_method, post_format, field_mapping, response_parser_config, strip_referrer, require_trustedform, cap_config). Auth credentials are never returned, only a has_credentials flag.
lead_buyer_idinteger · required- The id of the lead buyer to read.
Full input schema
{
"properties": {
"lead_buyer_id": {
"description": "The id of the lead buyer to read.",
"type": "integer"
}
},
"type": "object",
"required": [
"lead_buyer_id"
]
}
get_lead_formArguments
Fetch one lead form by id, with its ordered post-submit outcomes.
form_idinteger · required- The id of the lead form to fetch.
Full input schema
{
"properties": {
"form_id": {
"description": "The id of the lead form to fetch.",
"type": "integer"
}
},
"type": "object",
"required": [
"form_id"
]
}
get_path_flowArguments
Fetch one path-flow quiz by id, with its steps (and per-option goto skip-logic) + routing outcomes.
flow_idinteger · required- The id of the path flow to fetch.
Full input schema
{
"properties": {
"flow_id": {
"description": "The id of the path flow to fetch.",
"type": "integer"
}
},
"type": "object",
"required": [
"flow_id"
]
}
get_workflowArguments
Get one workflow's graph by id: nodes keyed by uuid ref (with config + output handles), edges (from/to/handle), the current trigger, the input_form (the form face a human fills to seed a run — pass its declared field keys as run_workflow inputs), and canvas positions. Every ref you pass to apply_workflow_operations comes from here.
workflow_idinteger · required- The id of the workflow to fetch.
Full input schema
{
"properties": {
"workflow_id": {
"description": "The id of the workflow to fetch.",
"type": "integer"
}
},
"type": "object",
"required": [
"workflow_id"
]
}
get_workflow_runArguments
Get one workflow run by id: run status/error/timings plus every step (node ref + label + type, status, taken output handles, output keys, error, timings). Runs are async — poll this until the run status is terminal.
run_idinteger · required- The id of the workflow run to fetch.
Full input schema
{
"properties": {
"run_id": {
"description": "The id of the workflow run to fetch.",
"type": "integer"
}
},
"type": "object",
"required": [
"run_id"
]
}
list_autopilot_rulesArguments
List the current team's compiled Autopilot rules (metric, threshold, window, action, cooldown, status, last fired). Optionally filter to one flight.
flight_idinteger · optional- Optional flight filter.
Full input schema
{
"properties": {
"flight_id": {
"description": "Optional flight filter.",
"type": "integer"
}
},
"type": "object"
}
list_destinationsArguments
List the current team's destinations (id, name, type, and for offers the source network + account) to wire into a funnel as offers or lead-buyer endpoints. Optional `type` filter: affiliate_offer, rsoc_feed, lead_buyer_endpoint (host/post buyers), external_redirect.
typestring · optional- Optional filter: affiliate_offer, rsoc_feed, lead_buyer_endpoint, external_redirect.
Full input schema
{
"properties": {
"type": {
"description": "Optional filter: affiliate_offer, rsoc_feed, lead_buyer_endpoint, external_redirect.",
"type": "string"
}
},
"type": "object"
}
list_flightsArguments
List the current team's flights (id, name, status, traffic source, funnel, budget, spend/revenue/ROI). Optionally filter by status, funnel, or traffic source account.
statusstring · optional- Optional status filter: draft, pending, active, paused, completed, or failed.
funnel_idinteger · optional- Optional funnel filter.
traffic_source_account_idinteger · optional- Optional traffic source account filter.
Full input schema
{
"properties": {
"status": {
"description": "Optional status filter: draft, pending, active, paused, completed, or failed.",
"type": "string"
},
"funnel_id": {
"description": "Optional funnel filter.",
"type": "integer"
},
"traffic_source_account_id": {
"description": "Optional traffic source account filter.",
"type": "integer"
}
},
"type": "object"
}
list_funnelsArguments
List the current team's funnels (id, name, status, slug).
This tool takes no arguments. Pass an empty object: {}.
Full input schema
{
"type": "object",
"properties": {}
}
list_landing_pagesArguments
List the current team's landing pages (id, name, title, slug, page_type, status, generation_status, variant_label, offer_id), newest first. Use to recover a page id after an async create_landing_page. Optional page_type filter.
page_typestring · optional- Optional filter: prelander, advertorial, custom, listicle, or offer_wall.
Full input schema
{
"properties": {
"page_type": {
"description": "Optional filter: prelander, advertorial, custom, listicle, or offer_wall.",
"type": "string"
}
},
"type": "object"
}
list_lead_buyersArguments
List the current team's lead buyers: id, name, is_active, endpoint_count, daily_cap, priority. Use get_lead_buyer for full detail on one buyer including its posting endpoints.
This tool takes no arguments. Pass an empty object: {}.
Full input schema
{
"type": "object",
"properties": {}
}
list_saved_reportsArguments
List the current user's own saved reports plus the team's shared reports (name, embedded query, schedule config if present).
This tool takes no arguments. Pass an empty object: {}.
Full input schema
{
"type": "object",
"properties": {}
}
list_workflow_node_typesArguments
List every workflow node type available to add_node (key, label, category, declared inputs/outputs, output handles, config field names) plus the trigger-event catalog for set_trigger (key, label, description).
This tool takes no arguments. Pass an empty object: {}.
Full input schema
{
"type": "object",
"properties": {}
}
list_workflow_runsArguments
List a workflow's most recent runs (id, status, triggered_by, started/finished timestamps, error). Use get_workflow_run for a run's per-step detail.
workflow_idinteger · required- The id of the workflow whose runs to list.
limitinteger · optional- Max runs to return (default 10, max 50).
Full input schema
{
"properties": {
"workflow_id": {
"description": "The id of the workflow whose runs to list.",
"type": "integer"
},
"limit": {
"description": "Max runs to return (default 10, max 50).",
"type": "integer"
}
},
"type": "object",
"required": [
"workflow_id"
]
}
list_workflowsArguments
List the current team's workflows (id, name, status, trigger, node/run counts). Optionally filter by status (draft, active, archived).
statusstring · optional- Optional status filter: draft, active, or archived.
Full input schema
{
"properties": {
"status": {
"description": "Optional status filter: draft, active, or archived.",
"type": "string"
}
},
"type": "object"
}
pause_flightArguments
Pause an Active flight on its traffic source. Without confirm:true, returns a preview only. With confirm:true, requires flights:write and queues the pause.
flight_idinteger · required- The Active flight to pause.
confirmboolean · optional- Set true to execute; omit/false to preview only.
Full input schema
{
"properties": {
"flight_id": {
"description": "The Active flight to pause.",
"type": "integer"
},
"confirm": {
"description": "Set true to execute; omit/false to preview only.",
"type": "boolean"
}
},
"type": "object",
"required": [
"flight_id"
]
}
publish_funnelArguments
Publish a funnel (goes Active). Hard structural problems block (fix the graph). Soft policy warnings require acknowledge_policy:true to publish over them.
funnel_idinteger · required- The id of the funnel to publish.
acknowledge_policyboolean · optional- Set true to publish over soft policy warnings (pre-approval). Defaults to false.
Full input schema
{
"properties": {
"funnel_id": {
"description": "The id of the funnel to publish.",
"type": "integer"
},
"acknowledge_policy": {
"description": "Set true to publish over soft policy warnings (pre-approval). Defaults to false.",
"type": "boolean"
}
},
"type": "object",
"required": [
"funnel_id"
]
}
replay_workflow_runArguments
Replay a finished workflow run as a NEW run seeded from its original trigger payload. Refused for non-terminal runs, runs without a seed snapshot, or while a run is in flight. The new run is ASYNC — poll get_workflow_run until terminal.
run_idinteger · required- The id of the finished workflow run to replay.
Full input schema
{
"properties": {
"run_id": {
"description": "The id of the finished workflow run to replay.",
"type": "integer"
}
},
"type": "object",
"required": [
"run_id"
]
}
resume_flightArguments
Resume a Paused flight on its traffic source. Without confirm:true, returns a preview only. With confirm:true, requires flights:write and queues the resume.
flight_idinteger · required- The Paused flight to resume.
confirmboolean · optional- Set true to execute; omit/false to preview only.
Full input schema
{
"properties": {
"flight_id": {
"description": "The Paused flight to resume.",
"type": "integer"
},
"confirm": {
"description": "Set true to execute; omit/false to preview only.",
"type": "boolean"
}
},
"type": "object",
"required": [
"flight_id"
]
}
run_reportArguments
Run a breakdown, timeseries, or totals analytics query over the team's tracking data, the same query engine the Reporting island uses.
modestring · optional- breakdown (default), timeseries, or totals.
fromstring · required- Start date (Y-m-d).
tostring · required- End date (Y-m-d), inclusive.
tzstring · optional- IANA timezone (defaults to the team timezone).
granularitystring · optional- hour, day, week, or month (default day).
groupByarray · optional- Up to 4 ReportDimension values to group by (breakdown mode).
metricsarray · optional- ReportMetric values to include.
filtersarray · optional- Filter rows: [{dimension, op: eq|in|neq|like, values: [...]}].
conversionTimeModestring · optional- visit or postback (default visit).
sortBystring · optional- A ReportDimension value to sort by.
sortDirstring · optional- asc or desc (default desc).
pageinteger · optional- Page number (default 1).
perPageinteger · optional- Rows per page (default 500, max 50000).
Full input schema
{
"properties": {
"mode": {
"description": "breakdown (default), timeseries, or totals.",
"type": "string"
},
"from": {
"description": "Start date (Y-m-d).",
"type": "string"
},
"to": {
"description": "End date (Y-m-d), inclusive.",
"type": "string"
},
"tz": {
"description": "IANA timezone (defaults to the team timezone).",
"type": "string"
},
"granularity": {
"description": "hour, day, week, or month (default day).",
"type": "string"
},
"groupBy": {
"description": "Up to 4 ReportDimension values to group by (breakdown mode).",
"items": {
"type": "string"
},
"type": "array"
},
"metrics": {
"description": "ReportMetric values to include.",
"items": {
"type": "string"
},
"type": "array"
},
"filters": {
"description": "Filter rows: [{dimension, op: eq|in|neq|like, values: [...]}].",
"type": "array"
},
"conversionTimeMode": {
"description": "visit or postback (default visit).",
"type": "string"
},
"sortBy": {
"description": "A ReportDimension value to sort by.",
"type": "string"
},
"sortDir": {
"description": "asc or desc (default desc).",
"type": "string"
},
"page": {
"description": "Page number (default 1).",
"type": "integer"
},
"perPage": {
"description": "Rows per page (default 500, max 50000).",
"type": "integer"
}
},
"type": "object",
"required": [
"from",
"to"
]
}
run_workflowArguments
Start a run of a workflow. A normal run (default) executes for real and is refused while a run is already in flight; seed it with "context" (arbitrary keys) or "inputs" (values for the workflow's input form, whitelisted to its declared fields). Pass preview=true for a TEST run: side-effect nodes SIMULATE (nothing is fired) unless preview_live=true, previews draw from a separate budget and are NOT blocked by an in-flight run, and the sample payload defaults to the workflow's sample trigger when omitted. Either way the run is ASYNC — returns the run id + status; poll get_workflow_run until terminal.
workflow_idinteger · required- The id of the workflow to run.
contextobject · optional- Optional key/value seed for the run-context bag (the entry node inputs). Ignored for a preview run — pass "sample" instead.
inputsobject · optional- Optional values for the workflow's INPUT FORM (see get_workflow input_form). Whitelisted to the form's declared fields (undeclared keys are rejected, required fields enforced) then merged into the run-context seed. Use this instead of "context" when the workflow has an input form.
previewboolean · optional- Start a PREVIEW / test run: side-effect nodes simulate (nothing fired), a separate budget, and exempt from the one-in-flight guard. Default false.
preview_liveboolean · optional- With preview=true, execute everything for REAL (relays post, campaigns pause). Default false.
sampleobject · optional- With preview=true, the sample trigger payload to seed the preview. Defaults to the workflow's sample trigger when omitted.
Full input schema
{
"properties": {
"workflow_id": {
"description": "The id of the workflow to run.",
"type": "integer"
},
"context": {
"description": "Optional key/value seed for the run-context bag (the entry node inputs). Ignored for a preview run — pass \"sample\" instead.",
"type": "object"
},
"inputs": {
"description": "Optional values for the workflow's INPUT FORM (see get_workflow input_form). Whitelisted to the form's declared fields (undeclared keys are rejected, required fields enforced) then merged into the run-context seed. Use this instead of \"context\" when the workflow has an input form.",
"type": "object"
},
"preview": {
"description": "Start a PREVIEW / test run: side-effect nodes simulate (nothing fired), a separate budget, and exempt from the one-in-flight guard. Default false.",
"type": "boolean"
},
"preview_live": {
"description": "With preview=true, execute everything for REAL (relays post, campaigns pause). Default false.",
"type": "boolean"
},
"sample": {
"description": "With preview=true, the sample trigger payload to seed the preview. Defaults to the workflow's sample trigger when omitted.",
"type": "object"
}
},
"type": "object",
"required": [
"workflow_id"
]
}
set_flight_budgetArguments
Set (mode: set) or adjust by a factor (mode: adjust) a flight's live daily budget on its traffic source. Without confirm:true, returns a preview only. With confirm:true, requires flights:write and executes immediately.
flight_idinteger · required- The flight to adjust.
modestring · required- set (absolute) or adjust (factor).
amount_minorinteger · optional- Daily budget in minor units (e.g. cents). Required when mode=set.
factornumber · optional- Adjustment factor, e.g. 1.2 scales up 20%. Required when mode=adjust.
confirmboolean · optional- Set true to execute; omit/false to preview only.
Full input schema
{
"properties": {
"flight_id": {
"description": "The flight to adjust.",
"type": "integer"
},
"mode": {
"description": "set (absolute) or adjust (factor).",
"type": "string"
},
"amount_minor": {
"description": "Daily budget in minor units (e.g. cents). Required when mode=set.",
"type": "integer"
},
"factor": {
"description": "Adjustment factor, e.g. 1.2 scales up 20%. Required when mode=adjust.",
"type": "number"
},
"confirm": {
"description": "Set true to execute; omit/false to preview only.",
"type": "boolean"
}
},
"type": "object",
"required": [
"flight_id",
"mode"
]
}
set_workflow_statusArguments
Set a workflow status: draft, active, or archived. Only active workflows fire on scheduled/event/webhook triggers. Activating an event-triggered workflow with no configured event is refused.
workflow_idinteger · required- The id of the workflow to update.
statusstring · required- The new status: draft, active, or archived.
Full input schema
{
"properties": {
"workflow_id": {
"description": "The id of the workflow to update.",
"type": "integer"
},
"status": {
"description": "The new status: draft, active, or archived.",
"type": "string"
}
},
"type": "object",
"required": [
"workflow_id",
"status"
]
}
submit_exportArguments
Submit an async analytics export (breakdown query, csv or xlsx). Returns an export id to poll with get_export.
fromstring · required- Start date (Y-m-d).
tostring · required- End date (Y-m-d), inclusive.
tzstring · optional- IANA timezone (default UTC).
granularitystring · optional- hour, day, week, or month (default day).
groupByarray · optional- Up to 4 ReportDimension values to group by.
metricsarray · optional- ReportMetric values to include.
filtersarray · optional- Filter rows: [{dimension, op: eq|in|neq|like, values: [...]}].
conversionTimeModestring · optional- visit or postback (default visit).
formatstring · optional- csv (default) or xlsx.
columnsarray · optional- Selected metric columns; default columns when omitted.
hideZeroSpendboolean · optional- Drop zero-cost rows (default false).
Full input schema
{
"properties": {
"from": {
"description": "Start date (Y-m-d).",
"type": "string"
},
"to": {
"description": "End date (Y-m-d), inclusive.",
"type": "string"
},
"tz": {
"description": "IANA timezone (default UTC).",
"type": "string"
},
"granularity": {
"description": "hour, day, week, or month (default day).",
"type": "string"
},
"groupBy": {
"description": "Up to 4 ReportDimension values to group by.",
"items": {
"type": "string"
},
"type": "array"
},
"metrics": {
"description": "ReportMetric values to include.",
"items": {
"type": "string"
},
"type": "array"
},
"filters": {
"description": "Filter rows: [{dimension, op: eq|in|neq|like, values: [...]}].",
"type": "array"
},
"conversionTimeMode": {
"description": "visit or postback (default visit).",
"type": "string"
},
"format": {
"description": "csv (default) or xlsx.",
"type": "string"
},
"columns": {
"description": "Selected metric columns; default columns when omitted.",
"items": {
"type": "string"
},
"type": "array"
},
"hideZeroSpend": {
"description": "Drop zero-cost rows (default false).",
"type": "boolean"
}
},
"type": "object",
"required": [
"from",
"to"
]
}
update_funnel_planArguments
Replace a funnel build plan while it is awaiting_approval. The plan must be a valid funnel build plan (funnel, nodes, edges, publish, rationale).
build_idinteger · required- The id of the build whose plan to replace.
planobject · required- The replacement funnel build plan (funnel, artifacts, nodes, edges, publish, rationale).
Full input schema
{
"properties": {
"build_id": {
"description": "The id of the build whose plan to replace.",
"type": "integer"
},
"plan": {
"description": "The replacement funnel build plan (funnel, artifacts, nodes, edges, publish, rationale).",
"type": "object"
}
},
"type": "object",
"required": [
"build_id",
"plan"
]
}
update_landing_pageArguments
Edit a raw-HTML landing page (name/title/status/html_content/css_custom/design). Item-driven pages (listicle/offer_wall) are rejected — use edit_listicle_items.
landing_page_idinteger · required- The id of the landing page to edit.
namestring · optional- New internal display name (independent of title/slug/content).
titlestring · optional- New title.
statusstring · optional- New status (e.g. draft, active).
html_contentstring · optional- Replacement page HTML (design tokens re-baked in).
css_customstring · optional- Replacement custom CSS (blank clears it).
designobject · optional- Design tokens (fontPairing, accentColor); re-bakes over the stored html.
Full input schema
{
"properties": {
"landing_page_id": {
"description": "The id of the landing page to edit.",
"type": "integer"
},
"name": {
"description": "New internal display name (independent of title/slug/content).",
"type": "string"
},
"title": {
"description": "New title.",
"type": "string"
},
"status": {
"description": "New status (e.g. draft, active).",
"type": "string"
},
"html_content": {
"description": "Replacement page HTML (design tokens re-baked in).",
"type": "string"
},
"css_custom": {
"description": "Replacement custom CSS (blank clears it).",
"type": "string"
},
"design": {
"description": "Design tokens (fontPairing, accentColor); re-bakes over the stored html.",
"type": "object"
}
},
"type": "object",
"required": [
"landing_page_id"
]
}
update_lead_buyer_endpointArguments
Edit a lead-buyer posting endpoint (this is how you swap a placeholder post_url for the real one). Resolve by endpoint_id or destination_id, then pass any of: lead_buyer_id (retarget to a different buyer), name (renames the wired Destination), post_url, post_method, post_format, field_mapping, response_parser_config, strip_referrer, require_trustedform, cap_config. Never changes the endpoint's team or which Destination row it is wired to.
endpoint_idinteger · optional- The id of the endpoint to edit. Provide this or destination_id.
destination_idinteger · optional- The wired Destination id. Provide this or endpoint_id.
lead_buyer_idinteger · optional- Retarget this endpoint to a different lead buyer.
namestring · optional- Renames the wired Destination.
post_urlstring · optional- New posting URL.
post_methodstring · optional- get, post, or put.
post_formatstring · optional- json, form, or xml.
field_mappingobject · optional- Replacement field mapping: buyer_field => "{{ template }}" or a literal string.
response_parser_configobject · optional- Replacement response-parsing rules.
strip_referrerboolean · optional- When true, the originating referrer header is not forwarded to the buyer.
require_trustedformboolean · optional- When true, a lead without a TrustedForm certificate is rejected instead of posted.
cap_configobject · optional- Replacement daily/weekly/monthly caps + on_exhaustion behavior.
Full input schema
{
"properties": {
"endpoint_id": {
"description": "The id of the endpoint to edit. Provide this or destination_id.",
"type": "integer"
},
"destination_id": {
"description": "The wired Destination id. Provide this or endpoint_id.",
"type": "integer"
},
"lead_buyer_id": {
"description": "Retarget this endpoint to a different lead buyer.",
"type": "integer"
},
"name": {
"description": "Renames the wired Destination.",
"type": "string"
},
"post_url": {
"description": "New posting URL.",
"type": "string"
},
"post_method": {
"description": "get, post, or put.",
"type": "string"
},
"post_format": {
"description": "json, form, or xml.",
"type": "string"
},
"field_mapping": {
"description": "Replacement field mapping: buyer_field => \"{{ template }}\" or a literal string.",
"type": "object"
},
"response_parser_config": {
"description": "Replacement response-parsing rules.",
"type": "object"
},
"strip_referrer": {
"description": "When true, the originating referrer header is not forwarded to the buyer.",
"type": "boolean"
},
"require_trustedform": {
"description": "When true, a lead without a TrustedForm certificate is rejected instead of posted.",
"type": "boolean"
},
"cap_config": {
"description": "Replacement daily/weekly/monthly caps + on_exhaustion behavior.",
"type": "object"
}
},
"type": "object"
}
update_lead_formArguments
Edit a lead form: form surface (name/fields/consent_language/thank_you_config/validation_rules/is_active) + served page (page={brand_name,headline,subheadline,tagline,partners[],reassurance,disclaimer}; design={accentColor,fontPairing}). Re-bakes the bound lead-form page (footer disclaimer defaults to consent_language). Step / branching edits use edit_lead_form_steps; outcome edits use edit_lead_form_outcomes.
form_idinteger · required- The id of the lead form to edit.
namestring · optional- New form name.
fieldsarray · optional- Replacement form field definitions.
consent_languagestring · optional- Replacement consent language (also the served footer disclaimer unless page.disclaimer is set).
thank_you_configobject · optional- Replacement thank-you screen config.
validation_rulesobject · optional- Replacement validation rules.
is_activeboolean · optional- Active flag.
pageobject · optional- Served-page chrome merged onto the bound lead-form page: brand_name, tagline, headline, subheadline, partners[], reassurance, disclaimer.
designobject · optional- Design tokens for the bound page: accentColor (hex, e.g. "#15C7BF"), fontPairing.
Full input schema
{
"properties": {
"form_id": {
"description": "The id of the lead form to edit.",
"type": "integer"
},
"name": {
"description": "New form name.",
"type": "string"
},
"fields": {
"description": "Replacement form field definitions.",
"items": {
"type": "object"
},
"type": "array"
},
"consent_language": {
"description": "Replacement consent language (also the served footer disclaimer unless page.disclaimer is set).",
"type": "string"
},
"thank_you_config": {
"description": "Replacement thank-you screen config.",
"type": "object"
},
"validation_rules": {
"description": "Replacement validation rules.",
"type": "object"
},
"is_active": {
"description": "Active flag.",
"type": "boolean"
},
"page": {
"description": "Served-page chrome merged onto the bound lead-form page: brand_name, tagline, headline, subheadline, partners[], reassurance, disclaimer.",
"type": "object"
},
"design": {
"description": "Design tokens for the bound page: accentColor (hex, e.g. \"#15C7BF\"), fontPairing.",
"type": "object"
}
},
"type": "object",
"required": [
"form_id"
]
}
update_path_flowArguments
Edit a path-flow surface: name/status + config. config={theme, page:{...chrome}, progress_style, ttl_hours} — theme (e.g. "comparison-portal") switches the served template; page sets quiz chrome (brand_name, headline, subheadline, partners[], benefits[{icon,title,body}], benefits_heading, reassurance, disclaimer, final_headline/final_subheadline/final_cta). config is shallow-merged and re-bakes the page. Step/outcome edits use edit_path_flow_steps / edit_path_flow_outcomes.
flow_idinteger · required- The id of the path flow to edit.
namestring · optional- New flow name.
statusstring · optional- New status (e.g. draft, active).
configobject · optional- Shallow-merged config. Keys: theme (template, e.g. "comparison-portal"); page (object of quiz chrome: brand_name, tagline, headline, subheadline, partners[], reassurance, benefits[{icon,title,body}], benefits_heading, disclaimer, final_headline, final_subheadline, final_cta); progress_style; ttl_hours. Re-bakes the served page.
Full input schema
{
"properties": {
"flow_id": {
"description": "The id of the path flow to edit.",
"type": "integer"
},
"name": {
"description": "New flow name.",
"type": "string"
},
"status": {
"description": "New status (e.g. draft, active).",
"type": "string"
},
"config": {
"description": "Shallow-merged config. Keys: theme (template, e.g. \"comparison-portal\"); page (object of quiz chrome: brand_name, tagline, headline, subheadline, partners[], reassurance, benefits[{icon,title,body}], benefits_heading, disclaimer, final_headline, final_subheadline, final_cta); progress_style; ttl_hours. Re-bakes the served page.",
"type": "object"
}
},
"type": "object",
"required": [
"flow_id"
]
}
upsert_autopilot_ruleArguments
Compile a new Autopilot rule onto a flight (metric/threshold/window -> action). Without confirm:true, returns a preview only. With confirm:true, requires flights:write and activates the rule immediately.
flight_idinteger · required- The flight to attach the rule to.
metricstring · required- An AutopilotMetric value, e.g. cpa, roas, drought, roi, epc.
thresholdnumber · optional- Breach threshold. Ignored for the drought metric.
window_hoursinteger · required- Rolling window in hours, e.g. 6.
actionstring · required- pause, resume, set_budget, adjust_budget, or alert.
cooldown_minutesinteger · optional- Minimum minutes between automated firings (default 60).
budget_amount_minorinteger · optional- Daily budget in minor units. Required when action=set_budget.
budget_factornumber · optional- Adjustment factor. Required when action=adjust_budget.
scopestring · optional- campaign (default) or ad_set. ad_set only applies to pause/resume.
ad_set_external_idstring · optional- Platform ad-set id. Required when scope=ad_set.
confirmboolean · optional- Set true to execute; omit/false to preview only.
Full input schema
{
"properties": {
"flight_id": {
"description": "The flight to attach the rule to.",
"type": "integer"
},
"metric": {
"description": "An AutopilotMetric value, e.g. cpa, roas, drought, roi, epc.",
"type": "string"
},
"threshold": {
"description": "Breach threshold. Ignored for the drought metric.",
"type": "number"
},
"window_hours": {
"description": "Rolling window in hours, e.g. 6.",
"type": "integer"
},
"action": {
"description": "pause, resume, set_budget, adjust_budget, or alert.",
"type": "string"
},
"cooldown_minutes": {
"description": "Minimum minutes between automated firings (default 60).",
"type": "integer"
},
"budget_amount_minor": {
"description": "Daily budget in minor units. Required when action=set_budget.",
"type": "integer"
},
"budget_factor": {
"description": "Adjustment factor. Required when action=adjust_budget.",
"type": "number"
},
"scope": {
"description": "campaign (default) or ad_set. ad_set only applies to pause/resume.",
"type": "string"
},
"ad_set_external_id": {
"description": "Platform ad-set id. Required when scope=ad_set.",
"type": "string"
},
"confirm": {
"description": "Set true to execute; omit/false to preview only.",
"type": "boolean"
}
},
"type": "object",
"required": [
"flight_id",
"metric",
"window_hours",
"action"
]
}
No tools match your search. Try a tool name such as ai_edit_landing_page.