Skip to content

Guides and tools

Team MCP

Build funnels and pages, manage flights and workflows, and query your analytics.

Server URLhttps://lp.thriftler.com/mcp

Browse 54 tools →

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.

  1. 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.
  2. Add the server URL above to your client and set Authorization: Bearer YOUR_TOKEN. Replace YOUR_TOKEN with your token.
  3. 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.

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"
    ]
}