Skip to main content
Glama

Server Details

Build branded agency client reports from 100+ marketing datasources.

Ownership verified
Status
Healthy
Uptime
69.8% over 21 days
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

B3.3/5.0

Scored across 151 tools

Disambiguation3/5

Many tools have clear distinct purposes, but the huge surface includes numerous near-neighbors: singular vs plural archive/delete tools, add vs update for each widget type, and refresh_report vs refresh_widgets vs query_data vs get_widget_data. Detailed descriptions help, but agents will still face real selection ambiguity at this scale.

Naming Consistency4/5

The vast majority of tools use consistent snake_case and follow a verb_noun or verb_noun_noun pattern. A few noun-only or irregular names (datasources, connected_datasources, search, whoami) are minor deviations and remain readable.

Tool Count1/5

151 tools is an extreme mismatch for a single MCP server, well beyond the 25+ threshold for 'too many'. Even for a broad reporting platform, this volume fragments workflows into an unwieldy surface.

Completeness5/5

The server covers an extensive lifecycle: clients, reports, pages, widgets, templates, themes, datasource connections, automations, exports, media, users, branding, domains, archive/restore, and ad-hoc querying. No obvious CRUD or workflow gaps stand out for the stated domain.

Available Tools

151 tools
add_asset_to_pageAdd saved section to pageAInspect

Instantiate an asset's widgets onto a report page. Each widget is cloned with a fresh ID and stacked below existing widgets. Widgets whose datasource / goal / calculated metric isn't connected for the client land as demo data instead of erroring on first load.

ParametersJSON Schema
NameRequiredDescriptionDefault
page_idYesPage ID to place the widgets on, from list_pages.
asset_idYesSource asset ID (from list_assets).
client_idYesClient ID the report belongs to (from list_clients).
source_idYesReport ID to add the widgets to (from list_reports).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoWhat was added — the new widget ids, each a fresh clone stacked below what was already on the page. Read their numbers with get_widget_data.
successYesTrue when the call succeeded.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses important non-obvious behavior beyond what annotations provide: each widget is cloned with a fresh ID, widgets are stacked below existing content, and widgets with unavailable datasource/goal/calculated metric connections degrade to demo data instead of erroring. This is exactly the kind of behavioral detail an agent needs before invoking the tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler: it front-loads the core operation, then details the two most consequential behaviors (fresh IDs/stacking and demo-data fallback). Every sentence and clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a create-like operation with four required parameters, full schema coverage, and an output schema, the description is complete. It covers the non-obvious runtime behavior, and the return value is handled by the output schema, so nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and each parameter already has a clear description with a source method to obtain it (e.g., 'from list_pages', 'from list_assets'). The tool description adds no extra parameter-level semantics, but the schema fully carries that burden, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the action ('Instantiate an asset's widgets'), the resource ('onto a report page'), and the key side effects that characterize this specific operation: cloning widgets with fresh IDs and stacking them below existing widgets. It is distinguishable from the many single-widget add_* tools because it operates on an entire saved asset/section.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The tool's use case is clear from the title and first sentence: adding a saved asset's widgets to a report page. It does not explicitly name individual add_*_widget tools as alternatives or state when to prefer this over adding widgets one by one, so it stops just short of full usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_button_widgetAdd button widgetBInspect

Add a button widget to a page. Position, width, and height use sensible defaults.

ParametersJSON Schema
NameRequiredDescriptionDefault
linkNoClick-through URL. Default: "#".
textNoButton label. Default: "Click Here".
page_idYesPage ID the widget will be placed on, from list_pages.
client_idYesClient ID the report belongs to (from list_clients).
source_idYesReport ID the widget belongs to (from list_reports).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe button widget that was added — widget_id, plus the stored row with the defaults the server filled in (position, width, height).
successYesTrue when the call succeeded.

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is a write operation that is not destructive. The description adds a useful behavioral detail: position, width, and height are automatically defaulted. It does not disclose return values or side effects, but the output schema and annotations ease that burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that front-loads the action and object, then adds one relevant default-behavior note. There is no filler or repetition of schema content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple create operation, the description is minimally adequate: the action is clear and all parameters are documented in the schema. However, it does not help an agent distinguish when to choose this widget type over sibling add_*_widget tools, and it does not clarify what the created button widget looks like or how it is returned.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and each parameter already has a meaningful description with source hints like 'from list_pages' and 'from list_reports'. The tool description adds no additional parameter-level meaning beyond noting that layout properties not present in the schema use defaults.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Add') and the resource ('a button widget to a page'). It does not explicitly differentiate from the many sibling add_*_widget tools, but the widget type is named directly and the scope is clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives such as add_text_widget, add_image_widget, or update_button_widget. The note about defaults is mild usage information, but it does not help an agent choose among the closely related add_*_widget siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_calculated_metric_widgetAdd calculated metric widgetAInspect

Add a Calculated Metric widget to a page: a table trended by date, showing demo data until it points at a formula. Returns the new widget_id — point it at a formula with update_calculated_metric_widget, using an id from list_calculated_metrics. Position, width and height match the editor's Calculated Metric card.

ParametersJSON Schema
NameRequiredDescriptionDefault
page_idYesPage ID the widget will be placed on, from list_pages.
client_idYesClient ID the report belongs to (from list_clients).
source_idYesReport ID the widget belongs to (from list_reports).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe calculated metric widget, still on demo data until a formula is picked, that was added — widget_id, plus the stored row with the defaults the server filled in (position, width, height).
successYesTrue when the call succeeded.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses important behavioral traits: the widget displays demo data until attached to a formula, the returned widget_id is required for follow-up updates, and position/width/height match the editor's Calculated Metric card. This gives the agent an accurate model of what happens when the tool is invoked.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three concise sentences, each earning its place: the first defines the tool and behavior, the second explains the return value and next step, and the third clarifies layout semantics. It is front-loaded with the core action and contains no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a create-widget operation with annotations, a 100%-covered schema, and an output schema present, the description covers the essential flow: what is created, what the widget shows, what the return value is, and how to proceed. Nothing critical is missing for an agent to invoke and continue the workflow correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides 100% parameter coverage with source values from list_reports, list_pages, and list_clients. The description adds workflow context but does not introduce additional parameter meaning beyond what the schema documents, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ('Add a Calculated Metric widget to a page') and characterizes the widget as a date-trended table showing demo data until linked to a formula. This clearly distinguishes it from the many sibling widget-creation tools, especially add_data_widget and add_custom_data_widget.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear usage context: create the widget first, then point it at a formula using update_calculated_metric_widget, pulling the formula id from list_calculated_metrics. It does not explicitly state when not to use this tool or name alternatives among sibling widget creators, but the workflow is concrete and actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_custom_data_widgetAdd custom data widgetAInspect

Add a Custom Data widget to a page: a table showing demo data until it points at an uploaded CSV dataset. Returns the new widget_id — point it at a dataset with update_custom_data_widget, using an id from list_custom_data plus the dataset's own column names as the metrics and dimensions (get_custom_data lists them). Position, width and height match the editor's Custom Data card.

ParametersJSON Schema
NameRequiredDescriptionDefault
page_idYesPage ID the widget will be placed on, from list_pages.
client_idYesClient ID the report belongs to (from list_clients).
source_idYesReport ID the widget belongs to (from list_reports).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe custom data widget, still on demo data until a dataset is picked, that was added — widget_id, plus the stored row with the defaults the server filled in (position, width, height).
successYesTrue when the call succeeded.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses important behavior: the widget initially shows demo data until pointed at an uploaded CSV dataset, and the returned widget_id is used for later updates. It also specifies that position, width, and height match the editor's Custom Data card. This meaningfully adds behavioral context beyond the readOnlyHint/destructiveHint flags.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences with no filler. It front-loads the core purpose, then gives the return value and follow-up workflow, and finally the layout behavior. Every sentence contributes useful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is complete for a tool with three well-documented parameters and an output schema. It specifies the return value, the relationship to update_custom_data_widget, and the source of IDs and column names. No critical information needed to understand or call the tool is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already covers all three parameters at 100% with clear descriptions, so the description does not need to repeat them. It adds contextual workflow information about the widget_id and update path, but not new meaning for the individual parameters. Per the calibration baseline, schema coverage of 100% yields a 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Add a Custom Data widget to a page.' It clearly identifies the widget type, which distinguishes it from sibling tools like add_data_widget, add_button_widget, and add_text_widget. It also adds the purpose of the widget (showing demo data until connected to a CSV dataset), making the tool's role unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use this tool: to add a new Custom Data widget, then later connect it to a dataset via update_custom_data_widget. It mentions related tools (list_custom_data, get_custom_data) that support the follow-up workflow. It does not explicitly state exclusions or compare against sibling add_*_widget tools, but the context is sufficient for an agent to select it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_data_widgetAdd data widgetAInspect

Add a DATA widget to a page and configure it, applying the same rules as the report builder: the datasource's defaults, the generated name, sort and row limit, and validation of the metric/dimension/advanced combination. Discover ids with datasources → describe_datasource. Returns the new widget_id; the series is fetched in the background, so call get_widget_data with that id to read the numbers. Omit the config to drop in a default widget with demo data and configure it later. Position/size default.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoDisplay name. Omit to use the generated one ("Clicks & Impressions by Date")
chartNoChart type: table, score (KPI), area, line, bar, column, pie, donut, funnel, or map. 'score' shows a single value, so it takes exactly one metric
filtersNoRow filters. Every row needs a field, an operator and a value
metricsNoMetrics to display, e.g. [{ value: "clicks" }] — ids from describe_datasource. Must belong to the chosen data view. Only `value` is required; the server fills the rest
page_idYesPage ID the widget will be placed on, from list_pages.
sort_byNoMetric or dimension id to sort rows by. Defaults to the first dimension
advancedNoDatasource-specific settings (Meta attribution, SEM Rush region, Mailchimp audience…). Several datasources require keys here — describe_datasource lists them per data view. Merges with existing settings
currencyNoPer-widget currency code override; falls back to the client currency
client_idYesClient ID the report belongs to (from list_clients).
data_viewNoDatasource data view (from describe_datasource), e.g. ACCOUNT. Changing it clears metrics and dimensions
row_limitNoRows to keep (default 'all')
source_idYesReport ID the widget belongs to (from list_reports).
date_rangeNoPer-widget date range (overrides the report range) — also set show_custom_date_range
dimensionsNoBreakdown dimensions, e.g. [{ value: "DATE" }] — ids from describe_datasource. A widget needs at least one; a dimension flagged `single` must be the only one
sort_orderNoSort direction (default 'asc')
datasource_idNoDatasource alias (from datasources), e.g. gadw. Changing it clears the data view, metrics, dimensions, filters and advanced settings, then applies that datasource's defaults. A datasource the client has not connected renders demo data until the connection is made — connected_datasources shows what is connected. The internal sources take no metrics/dimensions and are configured through `advanced` instead: 'CUSTOM_DATA' (Static Value — advanced.value), 'GOALS' (advanced.goal_id from list_goals), 'CUSTOM_IMPORT' (advanced.custom_data_id from list_custom_data), 'CALCULATION' (a calculated metric id as the single metric)
show_custom_date_rangeNoUse the widget date_range instead of the report range

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe data widget that was added — widget_id, the generated name, and the config as the builder resolved it. The series is fetched in the background; read it with get_widget_data using that widget_id.
successYesTrue when the call succeeded.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover the safety profile (readOnlyHint false, destructiveHint false, openWorldHint false). The description adds genuinely useful behavior beyond that: the call returns a widget_id, the series is fetched asynchronously so get_widget_data must be called to read numbers, and position/size default. It does not mention auth or failure behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the action, then the configuration rules, then the follow-up call, then the no-config shortcut. Every sentence carries information; the only slightly soft phrase is 'applying the same rules as the report builder', which leans on external knowledge.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 17-parameter creation tool with an output schema, this covers the essential agent-facing facts: how to discover ids, what gets defaulted, what is returned, and the asynchronous fetch follow-up. It stops short of describing validation failure modes or page-level constraints, which are the only notable gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds cross-parameter semantics the schema can't express: defaults are inherited from the datasource, names/sort/row limit are generated, and the metric/dimension/advanced combination is validated together. That is real added meaning on top of the per-field docs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Add a DATA widget to a page and configure it'), immediately distinguishing it from the many sibling widget creators (add_text_widget, add_button_widget, add_calculated_metric_widget). The scope of configuration is spelled out as mirroring the report builder.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear discovery chain ('Discover ids with datasources → describe_datasource') and a distinct use case for a bare call ('Omit the config to drop in a default widget with demo data'). It does not explicitly rule out the sibling widget tools for internal sources like GOALS or CUSTOM_DATA, so routing there is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_domainAdd custom domainAInspect

Add a custom domain. The backend detects the DNS provider and returns the DNS records the user needs to configure.

ParametersJSON Schema
NameRequiredDescriptionDefault
domainYesFully-qualified domain name to add (e.g. "reports.example.com")

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe new domain — id, domain, its pending status, the detected DNS provider, and the DNS records to configure before it verifies.
successYesTrue when the call succeeded.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already signal a non-read, non-destructive operation, and the description adds meaningful behavioral context: the backend performs DNS provider detection and returns configuration instructions. This helps the agent anticipate the tool's flow without contradicting the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences deliver the core purpose and a key behavioral detail without any filler. The most important information is front-loaded in the first sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with a rich output schema and annotations, this description is complete. It explains what the tool does, what happens during execution, and what the user will need to do afterward, leaving no critical gap for invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is only one parameter and the schema already documents it fully (type, required, description, example). The description does not add further parameter-level detail, but no additional explanation is strictly needed given 100% schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Add a custom domain.' It clearly states the domain is custom and explains the core outcome (backend detects DNS provider and returns needed DNS records), which differentiates it from sibling tools like list_domains and remove_domain.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The intended use is implied through the phrase 'Add a custom domain,' and the mention of DNS records gives useful context. However, it does not explicitly state when to choose this tool over alternatives, nor does it mention prerequisites or limitations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_embed_widgetAdd embed widgetBInspect

Add an embed widget to a page. Position, width, and height use sensible defaults.

ParametersJSON Schema
NameRequiredDescriptionDefault
page_idYesPage ID the widget will be placed on, from list_pages.
link_urlNoEmbed source URL (for 'URL' or 'IFRAME' modes).
client_idYesClient ID the report belongs to (from list_clients).
source_idYesReport ID the widget belongs to (from list_reports).
embed_typeYesEmbed mode.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe embed widget that was added — widget_id, plus the stored row with the defaults the server filled in (position, width, height).
successYesTrue when the call succeeded.

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are all default-false (readOnlyHint=false, openWorldHint=false, destructiveHint=false), so they convey no meaningful behavioral profile. The description adds one useful behavioral hint — 'Position, width, and height use sensible defaults' — implying the tool auto-handles layout settings. However, it does not disclose what happens on success, error conditions, or the embed_type/link_url dependency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with the core action front-loaded and the default-behavior note deferred to the second sentence. There is no filler or redundancy; every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the essential purpose and the auto-default behavior, and the presence of an output schema covers return values. However, it leaves the embed_type/link_url relationship implicit and offers no guidance on distinguishing embed widgets from the many sibling widget-add tools, which is a meaningful gap given the large sibling set.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds nothing beyond the schema, which already documents all five parameters, including the embed_type enum and the conditional note on link_url for URL/IFRAME modes. The description does not compensate for any schema gap, but none exists.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the verb 'add,' the resource 'embed widget,' and the target 'a page,' clearly identifying the core operation. It distinguishes itself from sibling add_button_widget/add_image_widget/add_text_widget tools by widget type, though the differentiation relies mostly on the name 'embed' rather than a stated contrast.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance is provided. There is no mention of when to choose this over sibling add_*_widget tools, nor when update_embed_widget would be the appropriate alternative. The conditional relationship between embed_type and link_url (link_url only for URL/IFRAME modes) is left for the agent to infer from the schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_goal_widgetAdd goal widgetAInspect

Add a Goal widget to a page: a progress gauge showing a demo target until it points at a saved goal. Returns the new widget_id — point it at a goal with update_goal_widget, using an id from list_goals. The goal carries its own metric query, target and comparison, so the widget needs no metrics or dimensions. Position, width and height match the editor's Goal card.

ParametersJSON Schema
NameRequiredDescriptionDefault
page_idYesPage ID the widget will be placed on, from list_pages.
client_idYesClient ID the report belongs to (from list_clients).
source_idYesReport ID the widget belongs to (from list_reports).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe goal widget, still on a demo target until a goal is picked, that was added — widget_id, plus the stored row with the defaults the server filled in (position, width, height).
successYesTrue when the call succeeded.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description reveals that the widget initially shows a demo target until pointed at a saved goal, that it returns widget_id, and that layout matches the editor's Goal card. These behaviors go beyond the annotations (readOnlyHint=false, destructiveHint=false) and help the agent predict side effects and follow-up actions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the core action, then return value/workflow, then rationale and layout. No filler; each sentence adds distinct value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a create-style tool with a documented output schema and fully described parameters, the description covers the widget's initial state, follow-up call, and layout behavior. Nothing essential is missing for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents page_id, client_id, and source_id. The description adds context about the goal carrying its own query/target/comparison but doesn't add parameter-level detail beyond the schema, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource ('Add a Goal widget to a page') and immediately characterizes the widget as a progress gauge with a demo target. It distinguishes this from sibling add_*_widget tools by explaining that the goal carries its own metric query, target, and comparison, so no metrics/dimensions are needed.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides clear context for when to use it: to add a Goal widget, and it routes the next step to update_goal_widget with an id from list_goals. It doesn't explicitly state when not to use it or name alternatives, but the workflow and 'no metrics or dimensions' note distinguish it from data widgets.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_image_widgetAdd image widgetAInspect

Add an image widget to a page. Position, width, and height use sensible defaults.

ParametersJSON Schema
NameRequiredDescriptionDefault
linkNoOptional click-through URL when the image is clicked.
page_idYesPage ID the widget will be placed on, from list_pages.
link_urlNoImage URL to display — use list_media to find an uploaded image.
client_idYesClient ID the report belongs to (from list_clients).
image_fitNoCSS object-fit class. Default: "object-contain".
source_idYesReport ID the widget belongs to (from list_reports).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe image widget that was added — widget_id, plus the stored row with the defaults the server filled in (position, width, height).
successYesTrue when the call succeeded.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds useful behavioral context by noting that position, width, and height use sensible defaults, which is beyond the schema. However, it does not explain the creation side effect, required references, or any other behavioral nuance; annotations are minimal but consistent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a concise two-sentence definition with no redundant text. The main purpose is stated first, and the useful defaulting behavior is added in the second sentence without wasting words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a fully described schema and an output schema, the description is nearly complete for invoking the tool correctly. The main gap is the absence of usage guidance relative to sibling tools, but this is partially covered by the tool name and schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema fully documents each parameter. The description itself adds no parameter-level meaning beyond the schema, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific action and resource: 'Add an image widget to a page.' This distinguishes it from other sibling add_*_widget tools by naming the widget type and target without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus alternatives such as add_asset_to_page, add_embed_widget, or update_image_widget. It does not mention prerequisites or exclusions; usage is only implied by the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_static_value_widgetAdd static value widgetAInspect

Add a Static Value widget to a page: one typed-in value as a KPI card — a number, an amount like "R50", or free text like "Active". It has no datasource and never fetches, so unlike the other cards its content is inline: pass the value here, or omit it to land on 0 and set it later with update_static_value_widget. Position, width and height match the editor's card.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoLabel shown above the value.
valueNoThe value to display. Defaults to 0, as the card does.
page_idYesPage ID the widget will be placed on, from list_pages.
client_idYesClient ID the report belongs to (from list_clients).
source_idYesReport ID the widget belongs to (from list_reports).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe static value widget, holding its value inline (it never fetches), that was added — widget_id, plus the stored row with the defaults the server filled in (position, width, height).
successYesTrue when the call succeeded.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With only generic annotations (readOnlyHint false, destructiveHint false), the description carries the burden and does it well. It discloses the important behavioral traits: no datasource, no fetching, inline content, defaulting to 0 when value is omitted, and that dimensions match the editor's card. This adds substantial context beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences deliver meaningful, non-redundant information. The action is front-loaded, the key differentiator is stated early, and every sentence adds value—examples, behavior, and layout context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the schema fully documents all parameters and required IDs, and an output schema exists for return values, the description covers the remaining context: what the widget is, how it behaves, how to set or omit the value, and how to update it later. Nothing critical is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so a baseline of 3 applies. The description goes beyond the schema by explaining the 'value' parameter's semantics with concrete examples, the default-to-0 behavior, and the later update path, which helps the agent understand how to use the parameter correctly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb and resource: 'Add a Static Value widget to a page', with explicit examples of the value types it accepts. It also distinguishes this widget from other cards by emphasizing 'has no datasource and never fetches' and 'its content is inline', making it easy to separate from sibling add_*_widget tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context by contrasting this widget with 'the other cards' and explains how to set the value now or later via update_static_value_widget. It does not explicitly name alternative tools or state exact when-not-to-use conditions, so it stops just short of full exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_text_widgetAdd text widgetAInspect

Add a rich-text widget to a page. The body accepts Markdown. Position, width, and height use sensible defaults.

ParametersJSON Schema
NameRequiredDescriptionDefault
textNoBody text. Markdown is rendered: # / ## / ### headings, - and 1. lists, **bold**, *italic*, ~~strike~~, `code`, > quotes, ``` fences and [links](url). Plain prose works too — it becomes paragraphs. Defaults to empty.
page_idYesPage ID the widget will be placed on, from list_pages.
client_idYesClient ID the report belongs to (from list_clients).
source_idYesReport ID the widget belongs to (from list_reports).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe text widget that was added — widget_id, plus the stored row with the defaults the server filled in (position, width, height).
successYesTrue when the call succeeded.

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations contribute readOnlyHint=false and destructiveHint=false, so the description is not required to re-state that this is a mutating but non-destructive operation. The description adds useful behavior context: Markdown is rendered and position/width/height have sensible defaults. It does not disclose side effects such as creation behavior, response contents, or permission requirements, so it stays at a moderate score.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no filler. The primary purpose is front-loaded, and the Markdown capability and default-layout behavior are stated efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple create operation with a fully documented input schema and an output schema present, the description covers the essential behavior: what is added, what content format is supported, and the fact that layout defaults require no parameters. Nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already thoroughly documents text, page_id, client_id, and source_id. The description adds little beyond repeating Markdown support and mentioning layout defaults that are not actual parameters. This is a solid baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description uses a specific verb-resource pair ('Add a rich-text widget to a page') and explicitly mentions Markdown support, which differentiates it from sibling add_*_widget tools. The scope is immediately clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use this tool: when adding a rich-text/Markdown widget to a page. It does not explicitly name alternatives or exclusion conditions, but the rich-text and Markdown cues are enough to route an agent correctly among the widget-add siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_title_widgetAdd title widgetBInspect

Add a title widget to a page. Position, width, and height use sensible defaults.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoTitle text. Default: "Title".
headingNoHeading level. Default: "h2".
page_idYesPage ID the widget will be placed on, from list_pages.
client_idYesClient ID the report belongs to (from list_clients).
source_idYesReport ID the widget belongs to (from list_reports).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe title widget that was added — widget_id, plus the stored row with the defaults the server filled in (position, width, height).
successYesTrue when the call succeeded.

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations establish that the operation is mutating but non-destructive; the description adds that position, width, and height use sensible defaults. However, it does not explain what those defaults are, whether placement could overlap existing content, or any side effects, and it references fields not present in the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one short sentence with the action front-loaded. However, 'sensible defaults' is vague, and the mention of non-existent position/width/height parameters adds minor confusion, so it is not maximally clean.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists and the input schema includes helpful source hints like 'from list_pages' and 'from list_clients'. Still, the description's inconsistency about position/width/height and its lack of details on default behavior leave gaps for an agent deciding whether and how to invoke this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 100% coverage for all five parameters, providing a baseline of 3. But the description mentions 'position, width, and height' which are not in the schema, potentially misleading agents into expecting controls that do not exist. This mismatch reduces the value the description adds beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (Add) and the resource (a title widget) plus the target (a page), which distinguishes it from sibling add_*_widget tools. It is concise and immediately understandable, though it does not explicitly differentiate itself from add_text_widget or others.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to use this tool versus the many sibling add_*_widget tools, nor any exclusions or prerequisites. The mention of 'sensible defaults' implies a use case but does not specify when defaults are appropriate or when another widget tool should be chosen.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

archive_assetArchive saved sectionA
Destructive
Inspect

Archive a saved section and its widget rows. It goes to the archive, not away — list_archive shows it and restore_from_archive brings it back.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesAsset ID to archive (from list_assets).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoConfirmation that the section was archived. Widgets already added from it stay where they are.
successYesTrue when the call succeeded.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds meaningful behavioral context beyond the annotations by clarifying that archiving is reversible ('not away') and that the operation cascades to widget rows. This is valuable given destructiveHint=true, as it reassures the agent about recoverability.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long and front-loads the core action, then adds the most important behavioral nuance and relevant sibling tools. Every sentence earns its place with no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with a documented input schema, output schema, and safety annotations, the description covers the key decision factors: what is affected, that it is recoverable, and how to view or reverse it. Nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with one parameter, and the schema already documents 'id' as 'Asset ID to archive (from list_assets).' The description does not add new parameter-level detail, so the baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Archive a saved section and its widget rows.' It also clarifies the scope of the operation beyond the title by noting widget rows are included, which helps distinguish it from other archive_* tools targeting different entity types.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context by explaining what happens after archiving and explicitly names the relevant companion tools: 'list_archive shows it and restore_from_archive brings it back.' It lacks an explicit exclusion statement ('use this instead of delete...'), but the lifecycle context is sufficient for an agent to select it appropriately.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

archive_automationArchive automationA
Destructive
Inspect

Archive an automation, stopping its scheduled deliveries. It goes to the archive, not away — list_archive shows it and restore_from_archive brings it back, rescheduled.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesAutomation ID (from list_automations)
parent_idYesParent report or client ID (from list_reports or list_clients)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoConfirmation that the automation was archived and its scheduled sends have stopped.
successYesTrue when the call succeeded.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (destructiveHint=true, readOnlyHint=false), the description adds meaningful behavioral detail: the automation is stopped, moved to archive, remains visible via list_archive, and can be restored with rescheduling. This clarifies the reversible nature of the operation and is not available from annotations alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences with no filler. The primary action and effect are front-loaded first, followed by the key recovery information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description, combined with fully documented parameters and an output schema, gives an agent everything needed to understand the operation, its consequences, and how to reverse it. It also orients the tool within the archive/restore lifecycle.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the two parameters (id and parent_id) are already well documented with their source lists. The description adds no additional parameter-level semantics, which matches the baseline score of 3 for a fully covered schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: "Archive an automation" and immediately states the key effect, "stopping its scheduled deliveries." It also distinguishes this from destruction by clarifying "it goes to the archive, not away" and naming list_archive and restore_from_archive.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear usage context: use archive to stop scheduled deliveries while preserving the automation for later restoration. It names the relevant recovery tools but does not explicitly contrast with the sibling pause_automation or state when not to use this tool, so it falls short of full exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

archive_calculated_metricArchive calculated metricA
Destructive
Inspect

Archive a calculated metric by ID. It goes to the archive, not away — list_archive shows it and restore_from_archive brings it back.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCalculated metric ID (from list_calculated_metrics)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoConfirmation that the metric was archived. Widgets still pointing at it fall back to demo data.
successYesTrue when the call succeeded.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, so the mutation risk is known; the description adds value by clarifying the archiving behavior: the metric is moved to an archive, remains visible in list_archive, and can be restored. This nuance—recoverable, not deleted—goes beyond what annotations provide. No contradiction found.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The entire description is one tightly written sentence that front-loads the verb and resource, then immediately explains the non-permanent consequence. Every phrase earns its place—no filler, no repetition of title or schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter tool with an existing output schema and annotations covering the safety profile, the description covers the key behavior an agent needs: what archiving does, how it can be seen again, and how it can be undone. Nothing essential is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the sole id parameter has a helpful schema description naming its source (list_calculated_metrics). The tool description itself adds no additional parameter-level details beyond referencing 'by ID', so the baseline 3 applies—schema already does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific action (archive) and resource (calculated metric) plus the ID identifier, and immediately clarifies the semantics by contrasting with permanent deletion. It also references list_archive and restore_from_archive, making it easy to distinguish from delete/update operations even among many archive_* siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context on the tool's effect—items are recoverable and visible in list_archive—which helps an agent decide between archiving and deletion. It does not explicitly enumerate when not to use it or compare to other archive tools, but for this single-resource action the guidance is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

archive_clientArchive clientA
Destructive
Inspect

Archive a client by ID, with its reports, exports and automations. It goes to the archive, not away — list_archive shows it and restore_from_archive brings it back.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesClient ID to archive (from list_clients)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoConfirmation that the client was archived. Its reports, pages and widgets are archived with it.
successYesTrue when the call succeeded.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true, and the description adds meaningful nuance: it clarifies that destruction is actually an archive, not a permanent delete, and it discloses exactly what gets archived (reports, exports, automations) and how to reverse it. This goes beyond what annotations alone convey and does not contradict them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences front-load the primary action and scope, then add the key distinction from permanent deletion. There is no filler or repetition of schema details, so every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with an output schema and annotative safety info, the description covers the critical operational details: what happens to the client's related resources and that the action is reversible. Nothing essential is missing for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the id parameter is already well documented in the schema as 'Client ID to archive (from list_clients)'. The tool description adds no additional parameter-level meaning, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Archive a client by ID') and the precise scope of side effects ('with its reports, exports and automations'). It also distinguishes this from other archive tools by emphasizing the archive is recoverable rather than permanent, and the singular 'by ID' separates it from the plural sibling archive_clients.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context by naming the lifecycle counterparts list_archive and restore_from_archive, implying the tool is for reversible, client-scoped archiving. It does not explicitly call out when to use archive_clients or individual archive_* tools instead, so it stops short of full alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

archive_clientsArchive multiple clientsA
Destructive
Inspect

Archive several clients by ID in one call. They go to the archive, not away — list_archive shows them and restore_from_archive brings them back.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYesArray of client IDs to archive (from list_clients)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoConfirmation of the archive and how many clients it covered. Each one takes its reports with it.
successYesTrue when the call succeeded.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, so the description adds meaningful context by clarifying that archiving is reversible: clients go to the archive and can be recovered via restore_from_archive. This goes beyond the annotation's blunt 'destructive' flag and prevents the agent from assuming permanent deletion.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler, with the core action front-loaded and the important reversibility nuance stated immediately after. Every phrase earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter batch operation with an output schema, destructiveHint, and reversibility info, the description covers everything an agent needs to select and invoke the tool correctly. The recovery references provide the surrounding context that makes the outcome predictable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter ids is fully documented in the schema with 'Array of client IDs to archive (from list_clients)', so the description need not repeat it. The description adds only the generic 'by ID' phrase, which is already implied by the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Archive'), a resource ('clients'), and a clear scope ('several by ID in one call'), distinguishing it from the singular archive_client sibling. The phrase 'not away' clarifies that this is an archive operation, not deletion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies batch usage ('several clients by ID in one call'), which faintly contrasts with archive_client, but it never explicitly says when to choose one over the other or when not to use it. It also does not mention the relationship to list_archive or restore_from_archive as a lifecycle step.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

archive_custom_dataArchive custom datasetA
Destructive
Inspect

Archive a custom-data dataset by ID. It goes to the archive, not away — list_archive shows it and restore_from_archive brings it back.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCustom-data ID (from list_custom_data)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoConfirmation that the dataset was archived. Widgets still pointing at it fall back to demo data.
successYesTrue when the call succeeded.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds meaningful behavior beyond the annotations: it explicitly reassures that archiving is not deletion ('not away') and points to the restoration path. This is valuable context that complements the destructiveHint=true annotation and clarifies the practical consequence of the action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences deliver the core action, the reversible nature of the operation, and the related navigation/restore tools with no wasted words. The most important information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with an output schema and lifecycle-related sibling tools, the description is complete: it tells what the tool does, where the archived item goes, how to find it, and how to reverse the action. Nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already fully documents the only parameter ('id' with a clear source hint 'from list_custom_data'), so the description adds no new parameter-level meaning. The phrase 'by ID' reinforces the schema, but the schema carries the semantic weight, so the baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Archive'), a specific resource ('a custom-data dataset'), and the mechanism ('by ID'), so an agent can immediately identify the operation. It also distinguishes this from the many sibling archive_* tools by explicitly naming the custom-data resource type.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear lifecycle context: the dataset moves to the archive, is visible via list_archive, and can be recovered via restore_from_archive. It does not explicitly state exclusions or name a non-archive alternative, but the intended use case is well implied and the sibling resource names make differentiation straightforward.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

archive_exportArchive PDF exportA
Destructive
Inspect

Archive a PDF export record by ID. It goes to the archive, not away — list_archive shows it and restore_from_archive brings it back.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesExport ID (from list_exports)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoConfirmation that the export record was moved to the archive.
successYesTrue when the call succeeded.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark destructiveHint=true, so the description's value is in explaining that archiving is not permanent destruction. It adds useful behavioral context by stating the record remains accessible and reversible, which goes beyond the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with no filler. The core action is front-loaded, and the clarifying contrast with permanent deletion and references to list_archive/restore_from_archive each earn their place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-required-parameter tool with an output schema present and annotations covering safety, the description is complete. It explains the operation, the archive semantics, and the recovery path, so an agent has enough to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the id parameter already includes 'Export ID (from list_exports)'. The description only echoes 'by ID' and adds no new semantic detail beyond what the schema already provides, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Archive a PDF export record by ID') and names the resource (PDF export) and the operation (archive). It also distinguishes this from permanent deletion by clarifying 'It goes to the archive, not away', which helps differentiate it from destructive delete-type siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context: the tool archives an export, and archived items are visible via list_archive and recoverable via restore_from_archive. This implies when to use it and names the inverse alternative, though it does not explicitly state conditions for when not to use it or compare with other archive_* tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

archive_goalArchive goalA
Destructive
Inspect

Archive a goal by ID. It goes to the archive, not away — list_archive shows it and restore_from_archive brings it back.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesGoal ID (from list_goals)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoConfirmation that the goal was archived. Widgets still pointing at it fall back to demo data.
successYesTrue when the call succeeded.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=false and destructiveHint=true. The description adds valuable context beyond that by stating the goal 'goes to the archive, not away' and that list_archive/restore_from_archive can show and restore it. This clarifies the real-world effect of the destructive hint without contradicting it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one efficient sentence that front-loads the action ('Archive a goal by ID') and then adds a useful clarifying clause about recoverability and related tools. Every word earns its place, with no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with an output schema and annotations already defining read-only and destructive hints, the description covers the key behavioral nuance of archiving. It could optionally mention side effects on active lists or permissions, but the provided context is sufficient for correct selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single `id` parameter is already described as 'Goal ID (from list_goals)'. The description adds only the phrase 'by ID', which doesn't meaningfully extend the schema's parameter documentation, so the baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Archive a goal by ID.' It also names related tools (list_archive, restore_from_archive) and clarifies that the goal is recoverable, which helps distinguish archive from a permanent delete. It stops short of explicitly contrasting with other sibling tools, but the resource and action are clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use this tool: to put a goal into the archive while keeping it recoverable. However, it never explicitly says 'use this when you want to remove from active view but not permanently delete' or names situations where a different tool should be used. Usage context is conveyed through behavior rather than direct guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

archive_media_fileArchive media fileA
Destructive
Inspect

Archive a media file. It goes to the archive, not away — list_archive shows it and restore_from_archive brings it back. The file itself is only removed from storage when it is permanently deleted from the archive.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMedia file ID to archive (from list_media)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoConfirmation that the file was archived. Anything already pointing at its url keeps working until it is permanently deleted.
successYesTrue when the call succeeded.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations mark destructiveHint=true, but the description adds important context: the file is not deleted, it is moved to archive and can be restored, with permanent deletion only when explicitly done. This goes beyond annotations and clarifies the exact behavioral outcome.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences that front-load the action and clarify the non-destructive nature. Every sentence adds value and there is no waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with full schema coverage and an output schema, the description explains the full lifecycle and related tools, making it complete for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema already fully documents the only parameter (id) with source guidance ('from list_media'), and the description does not add further parameter details. With 100% schema coverage, baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (archive) and resource (media file), and clarifies the semantics with 'It goes to the archive, not away' and mentions related tools (list_archive, restore_from_archive). It distinguishes from deletion and other archive tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explains the behavior and points to related tools, implying when to use this tool for reversible archiving. However, it does not explicitly compare to other archive variants like archive_media_files or deletion tools, so it misses a direct alternative comparison.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

archive_media_filesArchive multiple media filesA
Destructive
Inspect

Archive several media files by ID in one call. They go to the archive, not away — list_archive shows them and restore_from_archive brings them back.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYesMedia file IDs to archive (from list_media)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoConfirmation of the archive, and how many files it covered.
successYesTrue when the call succeeded.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructiveHint=true, but the description clarifies this is reversible archiving, not permanent deletion, which is valuable context beyond the annotation. It also notes the batch nature ('in one call'). No contradictions, but it doesn't cover failure modes or partial success, so not a perfect 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no fluff. The core action is front-loaded, and the clarifying note about reversibility is concise and relevant. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a batch archive tool with an output schema present, the description covers the effect, reversibility, and related tools. An agent can decide to use it and understand the outcome without missing critical information.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 100% coverage for the single 'ids' parameter, including its origin (list_media). The description adds only that the operation is by ID and batch-oriented, which slightly reinforces the schema but doesn't introduce new meaning. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (archive media files) and scopes it to multiple files in one call, which distinguishes it from the singular archive_media_file sibling. The phrase 'by ID' adds precision, and the sentence is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains the archival semantics ('not away') and references list_archive and restore_from_archive as complementary tools. It does not explicitly name archive_media_file as the alternative for a single file, but the plural scope implies it, so the usage context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

archive_reportArchive report or dashboardA
Destructive
Inspect

Archive a report by ID. Its pages and widgets stay attached and come back with it. It goes to the archive, not away — list_archive shows it and restore_from_archive brings it back.

ParametersJSON Schema
NameRequiredDescriptionDefault
report_idYesReport ID to archive (from list_reports)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoConfirmation that the report was archived. Its pages and widgets go with it and return with it.
successYesTrue when the call succeeded.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations mark destructiveHint=true, but the description adds meaningful context beyond that: it clarifies the archive is reversible ('goes to the archive, not away'), that pages and widgets remain attached, and that list_archive and restore_from_archive are the recovery paths. This enriches the agent's understanding of the operation's effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences. The core action is front-loaded, and the clarifying details about persistence and recovery are added without waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description fully covers what an agent needs to know for a single-parameter archive operation: the target, the effect on contents, and how to reverse it. With an output schema present and no nested complexity, nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema description for report_id already specifies it comes from list_reports. The tool description adds no further parameter details, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Archive a report by ID.' It also clarifies scope by noting pages and widgets stay attached, and names related sibling tools (list_archive, restore_from_archive) that make its purpose distinct from other archive tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for reports and explains the reversible nature, but does not explicitly contrast with sibling archive tools like archive_asset or archive_reports (plural). It gives context on what happens after archiving but no explicit when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

archive_reportsArchive multiple reportsA
Destructive
Inspect

Archive several reports by ID in one call. They go to the archive, not away — list_archive shows them and restore_from_archive brings them back.

ParametersJSON Schema
NameRequiredDescriptionDefault
report_idsYesReport IDs to archive (from list_reports)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoConfirmation of the archive and how many reports it covered.
successYesTrue when the call succeeded.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true, and the description adds meaningful context that archiving is reversible and not permanent deletion, pointing to the complementary tools for viewing and restoring. This goes beyond the structured annotation and helps the agent understand the full impact of the operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no wasted words. The purpose is stated first, followed by a clarifying note about the effect. It is well-structured and immediately understandable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter tool with an output schema present, the description covers the action, the scope, and the behavioral nuance (reversibility). An agent has everything needed to decide when to call it and what to expect, without needing to inspect the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The sole parameter report_ids is fully described in the schema with 'Report IDs to archive (from list_reports)'. The tool description adds no further detail about the parameter, so with 100% schema coverage the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb (archive), resource (reports), and scope (multiple reports by ID in one call). It distinguishes itself from the singular sibling archive_report by emphasizing batch operation, and clarifies the semantic that items are not deleted ('not away').

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly indicates the tool is for archiving multiple reports in a single call, and the second sentence implies when it is appropriate by noting that archived reports remain accessible via list_archive and restore_from_archive. However, it does not explicitly say to use archive_report for single reports, though the plural/singular distinction is implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

archive_templateArchive templateA
Destructive
Inspect

Archive a template by ID. It goes to the archive, not away — list_archive shows it and restore_from_archive brings it back.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesTemplate ID to archive (from list_templates)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoConfirmation that the template was archived. Reports already created from it are untouched.
successYesTrue when the call succeeded.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as destructive (destructiveHint: true), and the description adds valuable context beyond that: the template is moved to an archive rather than permanently removed, and it can be recovered via restore_from_archive. This directly addresses a common misunderstanding about permanent deletion and gives the agent a clearer mental model of the side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly written sentences. The first states the action; the second clarifies the outcome and recovery path. No filler or redundant phrasing; every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter tool with an output schema and clear annotations, the description is complete. It explains the destination (archive), the verification mechanism (list_archive), and the reversal path (restore_from_archive), giving an agent everything needed to call it safely and interpret the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter, id, is fully documented in the schema with 'Template ID to archive (from list_templates).' The tool description merely repeats 'by ID' without adding new details such as format, validation, or source. Since schema coverage is 100%, the baseline of 3 applies; the description contributes no additional parameter insight.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Archive a template by ID.' It also clearly distinguishes archiving from permanent deletion with 'It goes to the archive, not away,' and references related tools (list_archive, restore_from_archive) that make the intent unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context about what happens after archiving and points to list_archive and restore_from_archive as related lifecycle operations. It does not explicitly rule out using archive_* tools for other resource types, but the template-specific scope is obvious from the name and context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

archive_themeArchive themeA
Destructive
Inspect

Archive a theme by ID. Reports using it fall back to the default. It goes to the archive, not away — list_archive shows it and restore_from_archive brings it back.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesTheme ID to archive (from list_themes)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoConfirmation that the theme was archived. Reports using it fall back to the default theme.
successYesTrue when the call succeeded.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, but the description adds valuable behavioral context: the fallback behavior for reports, and reversibility via list_archive/restore_from_archive. This goes beyond just saying 'destructive' and helps the agent understand consequences, exceeding what annotations alone provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the main action, followed by consequences and reversibility. Every sentence adds distinct information with zero waste. The structure efficiently communicates the core behavior in under 30 words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with destructive annotation and an output schema, the description covers all needed aspects: what it does, what happens to dependent reports, and how to reverse it. It even names the relevant sibling tools (list_archive, restore_from_archive). Nothing essential is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for the single 'id' parameter, and the schema description ('Theme ID to archive (from list_themes)') already explains its source. The description's 'by ID' adds no additional semantics. Per calibration, baseline 3 is appropriate when schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (archive) and resource (theme) with the parameter (by ID). It distinguishes from sibling archive tools by naming the resource and explains the key behavioral distinction from deletion: 'It goes to the archive, not away — list_archive shows it and restore_from_archive brings it back.' This clearly separates it from other archive_* tools and any hypothetical delete operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context: reports using the theme fall back to default and it can be restored. This implies when to use (to temporarily remove a theme while preserving recoverability). It does not explicitly state when NOT to use or name an alternative like delete, but the context is sufficient for an agent to infer appropriate usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

audit_report_healthAudit report healthA
Read-only
Inspect

Audit a report or dashboard: list its connected data sources and automation state, and flag likely issues (no data sources connected, paused automations). Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
report_idYesReport ID to audit (from list_reports)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe audit — the report, the datasources its client has connected, its automations and their state, and the issues found (no datasource connected, automations paused).
successYesTrue when the call succeeded.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description reinforces this with 'Read-only.' It goes beyond the annotations by explaining what the audit covers: connected data sources, automation state, and specific issue types like no data sources or paused automations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loads the core action, and every clause adds information about what the tool does or does not do. The 'Read-only.' tag is compact and reinforces the safety profile without padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter, read-only tool with an output schema, the description is complete: it states the input expectation implicitly through the schema, describes what the audit includes, and warns about read-only behavior. There are no missing concepts an agent would need to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for the single parameter, and the schema description 'Report ID to audit (from list_reports)' is already informative. The description adds no additional parameter-level meaning, so it meets the baseline but does not exceed it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific action ('Audit'), the resource ('report or dashboard'), and the concrete outputs: connected data sources, automation state, and likely issues. This clearly distinguishes it from sibling tools like connected_datasources or list_automations, which only cover part of this functionality.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'Audit a report or dashboard' plus 'flag likely issues' gives clear context for when to use this tool: as a health check rather than a raw data retrieval. It does not explicitly name alternative tools or exclusion cases, so it falls just short of full guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

change_report_date_rangeChange report date rangeAInspect

Set the period a report covers. Every data widget on it is re-fetched for the new range and the results are saved — widgets on their own custom range keep it. A rolling preset ("Last 30 Days") is stored as the preset and re-resolved on every later fetch, so it stays current. The re-fetch runs in the background — call get_widget_data with source_id set to this report to read the new numbers.

ParametersJSON Schema
NameRequiredDescriptionDefault
report_idYesReport ID (from list_reports)
date_rangeYesThe period to report on

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe report carrying the new date_range. Every data widget on it is re-fetching in the background — read the new numbers with get_widget_data.
successYesTrue when the call succeeded.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses substantial behavior beyond the annotations: widgets are re-fetched and saved, widgets on custom ranges keep them, rolling presets are stored and re-resolved, and the re-fetch is background. This adds rich context that the annotations (readOnlyHint false, destructiveHint false) do not provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no wasted words. The main action is front-loaded, and each sentence adds essential behavioral detail without bloat.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with a nested date_range object and an output schema, the description covers the key usage context: effect on widgets, background re-fetch, and how to retrieve results. Nothing needed to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents all parameters with 100% coverage, so the baseline is 3. The description adds meaning by explaining how the date_range object behaves (rolling presets, custom range preservation), which complements the schema without redundancy.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the specific verb 'Set' and the resource 'period a report covers', and goes further to explain the re-fetch and saving behavior, which clearly distinguishes it from update_report and other tools. The purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly describes when to use the tool (to change a report's date range) and even directs the agent to call get_widget_data to read results. However, it does not explicitly name alternative tools or state when not to use this tool, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

connected_datasourcesList connected datasourcesA
Read-only
Inspect

List the datasource connections this account has made. A widget can only pull real data from a datasource that is connected to its client — anything else renders demo data.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoOne row per connection this account has made — id (pass it to test_connection or delete_connection), datasource_id, the connection name, its status and when it was last tested. Never the credentials themselves.
metaNoPage, limit and total row count.
successYesTrue when the call succeeded.

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds context about demo data vs real data, but does not disclose any specific behavioral details such as pagination, ordering, or response structure beyond what the output schema already provides.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with no wasted words. The main purpose is front-loaded, and the additional note about widget connectivity earns its place by clarifying the tool's relevance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple, has no parameters, and has an output schema that covers the return format. The description provides the purpose and a relevant domain context, so nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline is 4. The description does not need to add parameter semantics, and there are no parameters to clarify. The empty schema is fully sufficient.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('List') and the specific resource ('datasource connections this account has made'). It distinguishes from likely siblings like 'datasources' by emphasizing connections rather than datasources themselves, and adds a domain note about widget behavior that clarifies why this tool exists.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies a clear use case: verifying that a datasource is connected so that widgets pull real data instead of demo data. This provides context for when to use the tool, though it does not explicitly name alternatives or state when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

count_clientsCount clientsA
Read-only
Inspect

Get total count of clients for the account

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoHow many clients the account has — compare against the plan allowance.
successYesTrue when the call succeeded.

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds that the result is a total count scoped to the account, which is useful but does not go beyond that minimal behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single efficient sentence with no filler. The key action, resource, and scope are all front-loaded and immediately understandable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only count operation with an output schema present, the description is complete. An agent has everything needed to invoke the tool correctly without additional context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters, so per the rubric the baseline is 4. The description adds no parameter details because none exist, and no parameter documentation is needed for invocation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Get') and identifies the exact resource ('total count of clients') and scope ('for the account'). It clearly distinguishes this tool from the sibling list_clients, which would return client records rather than an aggregate count.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly conveys when to use this tool: when a count of clients is needed, not a listing. It does not explicitly name alternatives or exclusion criteria, but the zero-parameter aggregate nature makes the usage context obvious.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_assetSave widgets as a sectionAInspect

Save widgets as a reusable section, the same way the editor does when you select widgets and save them: each widget is copied onto the section with a fresh id, and its type and datasources are derived from what you picked. Use add_asset_to_page to drop the section onto a report page later.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesSection display name.
tagsNoCategorization tags.
widget_idsYesWidgets to save into the section (ids from list_widgets). Their current config is copied.
descriptionNoSection description.
is_recommendedNoPromote this section to the top of the default "Recommended" sort.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe new saved section — id, name and tags. Pass the id to add_asset_to_page to drop it onto a report.
successYesTrue when the call succeeded.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide only broad hints (readOnlyHint false, destructiveHint false). The description adds meaningful behavioral detail: each widget is copied with a fresh id, and type/datasources are derived from the selection. This goes beyond the annotations by explaining exactly what happens to the widget configuration, making the tool's behavior predictable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The first sentence front-loads the action and copy semantics; the second provides a useful pointer to the downstream tool. The editor analogy earns its place by anchoring the behavior in a familiar workflow.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and readOnly/destructive hints provided, the description covers the essential behavior and copy semantics while referencing the next-step tool. It does not discuss permissions or preconditions, but for this complexity level and schema richness it is sufficiently complete for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds minimal extra meaning beyond the schema—'derived from what you picked' loosely echoes the widget_ids parameter, but it doesn't clarify any parameter syntax, constraints, or interactions beyond what the schema already documents.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: save widgets as a reusable section, and clarifies the behavior with the editor analogy. It also names the complementary sibling add_asset_to_page, distinguishing the creation step from the later placement step. This is unambiguous and sets the tool apart from related siblings like create_template or duplicate_asset.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool (to create a reusable section from selected widgets) and explicitly points to add_asset_to_page for the next step. It does not list exclusions or conditions for choosing this over other creation tools, but the context is strong enough to guide an agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_automationCreate automationA
Destructive
Inspect

Create a new automation. Pick an existing email template + sender by id (from list_email_templates / list_email_senders), or pass template_id:"custom" together with a custom payload to save a new named template inline.

ParametersJSON Schema
NameRequiredDescriptionDefault
dayNoDay of send: weekday name (weekly, e.g. "monday") or day-of-month (monthly, e.g. "2")
nameYesAutomation name
hoursYesHour of send (e.g. "9")
customNoRequired when template_id === "custom" — saved as a new named email template
minutesYesMinute of send (e.g. "00")
timezoneYesIANA timezone (e.g. America/New_York)
date_textYesDate-range preset label for the report
frequencyYesSend frequency
parent_idYesParent report ID this automation belongs to (from list_reports)
sender_idYesSaved email sender id (from list_email_senders)
recipientsYesRecipient email addresses
template_idYesSaved email template id (from list_email_templates), or the literal "custom" to save a new template from the `custom` payload
time_formatNoMeridiem for the send time

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe new automation — id, name, schedule, recipients and next_run_at. It is created active, so pause it if the user has not confirmed the first send.
successYesTrue when the call succeeded.

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and destructiveHint=true, so the agent knows this is a mutating operation. The description adds the side effect that a custom payload is saved as a new named email template, which is useful behavioral context beyond the annotations. It does not cover rate limits or auth requirements, but with annotations present, the baseline is met and slightly exceeded.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The core purpose is front-loaded, and the two usage modes are presented in a compact, logical order. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 13 parameters, a nested object, and an output schema, the description covers the critical branching logic (custom vs. existing template) and references the required lookup tools. It does not explain the frequency/day/time combinations, but the schema and required fields carry that load. The presence of an output schema means return values are already specified. Missing a few edge-case clarifications, but adequate for a complex tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all parameters are documented in the schema. The description adds value by explaining the conditional relationship between template_id and the custom object, and by pointing to list_email_templates and list_email_senders as sources for valid IDs. This goes beyond the schema's individual field descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource ('Create a new automation') and immediately clarifies the two supported modes (existing template+sender vs. inline custom template). This clearly distinguishes it from siblings like update_automation, archive_automation, or test_automation by stating exactly what it creates.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit guidance on when to use each path: pick an existing template/sender by id from the listed sources, or pass template_id:'custom' with a custom payload. It does not state exclusions (e.g., when not to use this tool), but the creation intent is unambiguous given the sibling list. It could mention that updating an existing automation should use update_automation, but that's implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_calculated_metricCreate calculated metricBInspect

Create a calculated metric — a custom KPI from a formula over other metrics.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesMetric name (e.g. "CTR")
symbolYesDisplay format: numbers, decimal, % or currency
formulaYesFormula as an ARRAY of tokens in evaluation order. CTR = clicks ÷ impressions × 100 is: [{id:"t1",type:"METRIC",query:{datasource_id:"gadw",data_view:"ACCOUNT",metrics:[{value:"clicks"}]}}, {id:"t2",type:"OPERATOR",operator:"÷"}, {id:"t3",type:"METRIC",query:{datasource_id:"gadw",data_view:"ACCOUNT",metrics:[{value:"impressions"}]}}, {id:"t4",type:"OPERATOR",operator:"×"}, {id:"t5",type:"NUMBER",number:100}]

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe new calculated metric — id, name, formula and symbol.
successYesTrue when the call succeeded.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so the agent knows this is a non-destructive, closed-world write. The description adds only the conceptual nature of what is created; it does not mention dependencies (referencing existing metric ids from describe_datasource) or side effects. With annotations carrying the safety profile, this is adequate but thin.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with the verb+resource leading and the defining clause trailing; nothing is padded. It is tightly written, though the trailing clause is mildly redundant with the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the schema fully documents parameters. However, for a create tool with a complex nested formula, the description supplies no prerequisites or workflow context (e.g. that metric/datasource ids come from describe_datasource). Minimal but passable given the rich schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the formula parameter even ships a worked CTR example, so the schema does the heavy lifting. The description's phrase 'formula over other metrics' gestures at the formula semantics but adds no syntax, token ordering, or format detail beyond the schema. Baseline 3 is correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Create) and resource (calculated metric), and the em-dash clause defines what a calculated metric is (a custom KPI from a formula over other metrics). This distinguishes it from widget siblings like add_calculated_metric_widget. It stops short of naming the nearest alternatives (update_/duplicate_calculated_metric), so it is clear but not sibling-differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the agent can infer you use this when you need a custom KPI built from a formula. There is no explicit when-to-use vs update_calculated_metric/duplicate_calculated_metric guidance and no prerequisites (e.g. that the underlying metrics must exist). Implied-but-unstated usage maps to a 3.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_clientCreate clientCInspect

Create a new client

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesClient name
foldersNoFolder IDs (from list_folders)
managerNoManager user ID (from list_users)
websiteYesClient website URL
currencyYesCurrency ISO 4217 code, e.g. "USD" — the server fills in symbol + country iso
timezoneYesIANA timezone (e.g. America/New_York)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe new client, complete — including the theme_id the server derived from the website's branding. Pass its id when creating reports or linking datasources.
successYesTrue when the call succeeded.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds no behavioral detail beyond what annotations already convey: readOnlyHint=false signals mutation, and destructiveHint=false suggests a non-destructive creation. Nothing is disclosed about side effects, duplicate handling, permissions, or what happens after creation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise and front-loaded with the verb, containing no filler. However, it mostly restates the tool name and title, so while it is efficient, it does not use its brevity to add distinguishing value beyond the name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The input schema covers all parameters and an output schema is present, so the agent can invoke the tool mechanically. However, the description does not address the ambiguity with create_client_with_report or explain what creating a bare client means in context, leaving the description incomplete for tool selection.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already explains all six parameters, including currency format and the source of folder/manager IDs. The description itself contributes no parameter detail, so the baseline score of 3 for high schema coverage applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear operation and resource: 'Create a new client.' It clearly distinguishes the tool from update_client and archive_client, but it does not differentiate it from the sibling create_client_with_report, so it is not fully unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided about when to use this tool versus create_client_with_report or other client-related tools. There is also no mention of prerequisites such as obtaining folder or manager IDs from list_folders/list_users; the description simply restates the operation with no contextual routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_client_with_reportCreate client with reportAInspect

Create a new client and its first report or dashboard in one step. The first report is resolved from the inputs: template_id clones that template; blank:true creates an empty report; with neither, a matching Starter template of the given type is cloned (never a blank report). For a specific style (e.g. a Google Ads dashboard), pass a template_id found via list_templates (filter by datasources + type).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesClient name
typeYesReport type: REPORT (point-in-time) or DASHBOARD (live)
blankNoSet true for an empty report. If false/omitted and no template_id is given, a matching Starter template is cloned.
websiteNoClient website, e.g. acme.com
timezoneNoIANA timezone for the client (default UTC)
report_nameYesName for the first report
template_idNoClone this template into the first report (from list_templates — filter by datasources + type)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoWhat was created — the new client and the new report, each with its id and name, and the template the report came from. Link a datasource to the client next, or the widgets show demo data.
successYesTrue when the call succeeded.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already show this is a write operation (readOnlyHint false) and non-destructive (destructiveHint false). The description adds valuable behavioral detail beyond annotations, such as the resolution order and the guarantee that 'with neither, a matching Starter template... is cloned (never a blank report).' No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences with no filler. It front-loads the primary purpose, then explains the branch logic and how to select a template. Every sentence contributes to correct use.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with output schema and annotations, the description covers the main steps and resolution logic adequately. A minor gap is that it does not specify behavior when both template_id and blank:true are provided simultaneously, which could cause ambiguity. Otherwise it is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds critical meaning beyond the schema by explaining how template_id, blank, and type interact: cloning, empty creation, and fallback behavior. This helps an agent understand the combined semantics rather than just individual field meanings.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with a specific verb and resource: 'Create a new client and its first report or dashboard in one step.' This clearly distinguishes it from sibling tools like create_client, create_report, and create_report_from_template by emphasizing the combined action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives concrete guidance on how the first report is resolved: 'template_id clones that template; blank:true creates an empty report; with neither, a matching Starter template of the given type is cloned.' It also directs users to list_templates for a specific style. However, it doesn't explicitly state when to use create_client or create_report instead, only implies the one-stop purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_connectionCreate datasource connectionAInspect

Create a datasource connection from credentials — the connect panel's credential form, as a tool. Call it with just datasource_id to be told which fields that datasource needs, then again with those values and a name. Re-using an existing name updates that connection's credentials. Only for datasources that are connected by credentials; the ones that sign in through the vendor's website (Google, Meta, LinkedIn…) cannot be created here and say so. Use link_datasource afterwards to point a client at the new connection, and test_connection to check it.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoWhat to call this connection, e.g. "Client Stripe". Shown wherever connections are listed
credentialsNoThe credential values, keyed as the tool lists them. Omit to see the list
datasource_idYesDatasource alias (from datasources)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoEither the credential fields this datasource needs (when called without them), or the connection that was created — its id and name. Link it to a client with link_datasource.
successYesTrue when the call succeeded.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnly=false, destructive=false, openWorld=true, so the mutation and openness profile is already covered. The description adds genuinely new behavior: the discover-then-submit call sequence, and the subtle upsert semantics where re-using an existing name overwrites that connection's credentials rather than erroring. It stops short of describing failure modes or required role/permissions, which keeps it below a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action, then the call pattern, then the exclusion, then the follow-ups — a logical order with no filler sentences. Slightly dense and the 'connect panel's credential form, as a tool' framing is mildly wordy, but every sentence carries routing or behavioral information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the description fills the remaining gaps for a 3-param nested-object mutation: discovery flow, upsert behavior, scope exclusions, and the correct follow-up tools. An agent has everything needed to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3 and the schema already documents name, credentials, and datasource_id. The description adds usage semantics the schema cannot express — calling with only datasource_id is a discovery mode that returns the required credential keys, and credentials must be keyed as that listing dictates.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (create a datasource connection) and immediately frames it as the connect panel's credential form exposed as a tool, which tells an agent exactly what this does. The two-phase call pattern and the OAuth exclusion distinguish it clearly from siblings like link_datasource and test_connection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use (credentials-based datasources), explicit when-not (Google/Meta/LinkedIn sign-in datasources 'cannot be created here and say so'), and explicit alternatives for follow-up work (link_datasource to attach a client, test_connection to verify). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_custom_dataCreate custom datasetAInspect

Create a custom-data dataset from parsed CSV rows (max 10,000 rows).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesDataset name
columnsYesColumn definitions
raw_dataYesArray of row objects keyed by column name
file_nameYesOriginal file name
file_sizeYesFile size in bytes

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe new dataset — id, name and columns. Pass the id as the dataset when adding a custom-import widget.
successYesTrue when the call succeeded.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is not read-only and not destructive; the description is consistent with those hints. It adds the useful 10,000-row constraint but does not disclose side effects, validation behavior, or failure modes. With annotations covering the safety profile, this is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler. It states the action, object, source, and key limit efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a straightforward creation tool with fully documented parameters and an output schema, the description plus schema provides enough to invoke it correctly. The only minor gap is the lack of explicit guidance on what happens if the row limit is exceeded, though the limit itself is stated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides descriptions for all five parameters, so the description does not need to repeat them. It adds high-level context about parsed CSV rows and the row cap, but no additional per-parameter meaning beyond what the schema already offers.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Create'), a specific resource ('custom-data dataset'), and the input source ('parsed CSV rows'). This clearly distinguishes it from siblings like create_custom_data_widget, which create widgets rather than the dataset itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'from parsed CSV rows' implies when this tool is appropriate, and the 10,000-row limit sets a boundary. However, it does not explicitly name alternatives or state when not to use it, leaving the routing decision to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_folderCreate client folderCInspect

Create a new client folder

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesFolder name

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe new folder — id and name. Pass the id to move_client_to_folder.
successYesTrue when the call succeeded.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate this is not read-only and not destructive, but the description adds no behavioral context beyond the act of creation. It does not mention uniqueness requirements, where the folder is created, or any side effects; it also does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler. However, it almost exactly repeats the title, so it is concise but adds little informational value beyond that already visible in the tool metadata.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the large set of sibling tools, the description is too thin to fully orient the agent: it does not clarify what a client folder is, how it relates to clients, or when creating one is appropriate. The output schema exists but is not shown, and the description does not explain the expected result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema fully documents the single 'name' parameter with 100% coverage, so the description does not need to repeat it. The description adds no extra semantic detail about the parameter, but the schema already carries the load, justifying the baseline score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Create') and resource ('a new client folder'), making the core action clear. It does not distinguish this from sibling tools like create_client or create_asset, but the resource name is specific enough to avoid major ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance about when to use this tool versus alternatives such as create_client, update_folder, or move_client_to_folder. It also does not explain what a 'client folder' is for, leaving the agent to infer the appropriate context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_goalCreate goalCInspect

Create a goal — a target value + comparison for a saved metric query.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesGoal name
queryYesSaved builder query the goal is measured against
symbolNoDisplay format: numbers, decimal, % or currency
operatorYesSuccess comparison: >= (at or above), = (equal), <= (at or below)
client_idNoBind the goal to a client (from list_clients)
goal_typeYesstatic (fixed target) or change (delta over the period)
descriptionNoOptional description
target_valueYesTarget value to measure against

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe new goal — id, name, target_value, operator, goal_type and its query. Pass the id as a metric when adding a goal widget.
successYesTrue when the call succeeded.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and destructiveHint=false, so the safety profile is covered. The description adds nothing beyond that: no mention that the goal is persisted, that null date_range is the normal stored case (the schema carries that), or what side effects creation has. With annotations in place the bar is lower, but there is still no added behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence with the core concept front-loaded and no wasted words. It is efficient, though its brevity is closer to under-specification than deliberate economy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a complex tool — 8 params, nested query objects, enums, an output schema — and the description does not prepare the agent for that complexity or the id-lookup workflow the schema references (describe_datasource, list_clients). The 100%-documented schema and output schema carry most of the load, so the definition is adequate but incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with rich nested parameter docs, so the baseline is 3. The description's 'target value + comparison for a saved metric query' merely paraphrases the required target_value/operator/query fields and adds no syntax or sourcing detail beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Create') and resource ('goal'), and even defines what a goal is — 'a target value + comparison for a saved metric query' — which is useful domain grounding. It does not differentiate itself from siblings like duplicate_goal, update_goal, or add_goal_widget, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No statement of when to use this tool versus alternatives (duplicate_goal, add_goal_widget), and no prerequisites called out — e.g. that metric ids come from describe_datasource or client_id from list_clients, despite both being needed to call it successfully.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_pageCreate report pageAInspect

Add a page to a report or template. Appended at the end by default.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPage name
visibleNoWhether the page is visible (defaults to true)
positionNoInsert at this position, 0-based; pages at or after it shift down. Omit to append at the end
source_idYesReport or template ID this page belongs to (from list_reports or list_templates)
source_typeYesSource type

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe new page — page_id, name, position and visible. Pass page_id when adding widgets.
successYesTrue when the call succeeded.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is a write operation (readOnlyHint=false), so the description's disclosure of the default append behavior adds value. However, it does not mention other behavioral aspects such as visibility defaults (covered in schema) or any side effects. The description is minimal but not misleading.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise, using only two sentences with no filler. The primary purpose is front-loaded, and the default behavior is stated efficiently. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the rich schema (100% coverage) and presence of an output schema, the description is adequate for an agent to invoke the tool correctly. It covers the core action and default behavior, while the schema handles parameter details. It does not mention prerequisites (e.g., that the report/template must exist), but this is implied and covered by source_id guidance.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with all parameters well-described. The description adds only the note about appending by default, which is already implied by the position parameter's description. Thus, it provides minimal additional semantic value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Add a page') and resource ('report or template'), which clearly distinguishes this from sibling tools like update_page, delete_page, and list_pages. It also conveys the default behavior of appending at the end, making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for adding pages to existing reports or templates but does not explicitly mention when not to use it or name alternatives. While the context is clear enough, there is no guidance on how it differs from other creation tools like create_report or create_template, leaving room for confusion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_reportCreate report or dashboardAInspect

Create a new report or dashboard for a client. Presentation toggles have server defaults when omitted. A report is created on the grid layout or the free canvas; a dashboard is always grid.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesReport name
typeYesReport type
layoutNoLayout engine that owns widget geometry: 'grid' is the 12-column grid, 'canvas' is absolute page pixels. Defaults to 'grid'. Dashboards are always 'grid'. Set at creation only — a report cannot change engine afterwards, because its widget positions are stored in the units it was authored in.
passwordNoPassword (required when password_enabled is true)
templateYesBLANK (fresh), TEMPLATE (from a saved template), or AGENCY (account-level)
theme_idNoTheme ID (use list_themes to find one)
client_idYesClient ID the report belongs to (from list_clients)
date_rangeNoDate range configuration
descriptionNoReport description
pdf_enabledNoEnable PDF download
template_idNoWhen template is TEMPLATE, the source template ID — its pages and widgets are cloned into the new report. Use list_templates to find one.
show_cover_pageNoShow cover page
cover_page_titleNoCover heading, overriding the theme's. Null or omitted inherits the theme.
password_enabledNoEnable password protection
cover_page_subtitleNoCover subheading, overriding the theme's. Null or omitted inherits the theme.
thank_you_page_titleNoThank-you heading, overriding the theme's. Null or omitted inherits the theme.
cover_page_pattern_idNoGenerated artwork for the cover, overriding the theme's. Null or omitted inherits the theme.
show_table_of_contentsNoShow table of contents
thank_you_page_subtitleNoThank-you message, overriding the theme's. Null or omitted inherits the theme.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe new report — id, name, type and its pages (cloned from the template when one was named). Pass the id to list_pages, then add widgets.
successYesTrue when the call succeeded.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=false and destructiveHint=false, so the agent knows this is a mutating but non-destructive operation. The description adds useful context: presentation toggles have server defaults when omitted, and layout is constrained (dashboard always grid). However, it does not disclose other behavioral aspects such as error handling, idempotency, or authentication requirements. It adds moderate value beyond annotations, so a 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler. The core purpose is front-loaded, and the layout constraint and default behavior are stated efficiently. Every word earns its place. The description is appropriately sized for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having 19 parameters and nested objects, the description is minimal but the schema carries the heavy lifting with 100% coverage. The description adds the essential cross-cutting context (layout rules, server defaults) that the schema cannot express at the property level. An output schema exists, so return values do not need to be described. For a creation tool with this complexity, the description is reasonably complete, though it could mention that client_id and template_id reference list_clients and list_templates (though those are already in the schema).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all 19 parameters are documented in the schema. The description adds extra meaning by clarifying the layout parameter's behavior (dashboard always grid) and the default behavior of presentation toggles when omitted. This goes beyond the schema's individual property descriptions, which is valuable given the number of boolean toggles. This justifies a 4 rather than a baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Create'), a clear resource ('a new report or dashboard for a client'), and adds distinguishing constraints (report can use grid or canvas, dashboard is always grid). It is immediately distinguishable from siblings like create_report_from_template, duplicate_report, and create_client_with_report without inspecting their schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no explicit guidance on when to use this tool versus alternatives. It does not mention that create_report_from_template should be used when cloning a template, or that duplicate_report is for copying an existing report. The only implied guidance is that this is the generic create tool, but that is not stated. An agent could confuse it with create_report_from_template because both create reports.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_report_from_templateCreate report from templateAInspect

Create a report or dashboard for an existing client by cloning a template (its pages + widgets). Find the template first with list_templates — filter by datasources + type (e.g. datasources=gadw, type=DASHBOARD for a Google Ads dashboard).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName for the new report
typeYesReport type — must match the template
client_idYesClient id (from list_clients)
template_idYesTemplate to clone (from list_templates — filter by datasources + type)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe new report — its id, name and type, the template it was cloned from, and the client it belongs to.
successYesTrue when the call succeeded.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses that cloning copies pages + widgets, which reveals the operation's scope beyond the annotations' readOnlyHint=false/destructiveHint=false. This tells the agent the new report will inherit the template's structure. It does not contradict any annotation. Minor gap: it doesn't specify behavior on type mismatch, though the schema's 'must match the template' partially covers this.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero waste. The core action is front-loaded in the first sentence, and the second sentence delivers the prerequisite workflow plus a concrete filter example. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists (so return values need no explanation), the description covers purpose, prerequisite workflow, and filtering guidance. All four required params are documented in the schema. The only minor omission is explicit mention that type must match the template's type, though this appears in the schema's type description, so nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds meaning by explaining the template_id parameter's provenance workflow (find via list_templates, filter by datasources + type) and clarifies that the resulting report contains the template's pages and widgets. The concrete filtering example adds value beyond the schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (create), resource (report or dashboard), scope (for an existing client), and mechanism (cloning a template's pages + widgets). It distinguishes itself from siblings like create_report (build from scratch) and duplicate_report (copy an existing report rather than a template) by making the template-cloning behavior explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear prerequisite workflow: find the template first with list_templates, then filter by datasources + type. It includes a concrete example (datasources=gadw, type=DASHBOARD for Google Ads), which tells the agent exactly how to precede this call. It stops short of explicitly naming when to prefer create_report or duplicate_report over this tool, but the workflow guidance is strong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_templateCreate templateAInspect

Create a template from an existing report. Pages, widgets, and datasource categories are copied/derived from the source report automatically.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesTemplate name
report_idYesSource report ID (from list_reports) — pages and widgets are copied from this report
descriptionNoTemplate description

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe new template — id, name, type and the datasources derived from the source report.
successYesTrue when the call succeeded.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide readOnlyHint=false and destructiveHint=false, and the description is consistent with them. It adds useful behavioral detail beyond the annotations by disclosing that pages, widgets, and datasource categories are automatically copied or derived from the source report.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with no filler. The core purpose is front-loaded, and the second sentence provides high-value behavioral detail about what gets copied without repeating schema content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter tool with full schema coverage and an output schema, the description is sufficiently complete: it states what the tool does, what it copies, and the source input. The main gap is the lack of explicit guidance on choosing this tool over related create/duplicate tools, but that is already covered under usage guidelines.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all three parameters thoroughly. The description reinforces the role of report_id by mentioning copied pages/widgets, and adds 'datasource categories' as an extra effect, but it does not materially improve an agent's understanding of how to supply the parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear action ('Create a template') with a specific source resource ('from an existing report'), and further specifies what is copied or derived. This makes it distinct from sibling tools like create_report_from_template and duplicate_report, even without reading those definitions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The context is implied: use this when you have an existing report and want to create a template from it. However, the description does not explicitly say when to prefer this over alternatives such as create_report_from_template, create_report, or duplicate_report, nor does it state any exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_themeCreate themeAInspect

Create a new visual theme. Supply the complete tokens map (primary, font, radius, shadow, canvas, surface, chart1-10, etc.) — tokens are the single source of truth for every visual property. A theme also picks the report cover-page and thank-you-page background images (other text/colour overlays come from defaults). Set is_default=true to make this the account default — any existing default is cleared atomically.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesTheme name
tokensYesComplete token map for all visual properties: primary, primary_foreground, accent, accent_foreground, canvas, surface, surface_muted, text, text_muted, border, header_surface, header_text, header_border, chart1–chart10, font, radius, shadow.
cover_pageNoCover-page configuration: background image URL plus title and subtitle overlays (variable-substituted at render time).
is_defaultNoMark as the account default theme — one per account, cascade target for new reports
thank_you_pageNoThank-you-page configuration: background image + title + subtitle.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe new theme — id, name, tokens and page config. Pass the id as theme_id on a report.
successYesTrue when the call succeeded.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already signal a write operation (readOnlyHint=false) that is not destructive. The description adds genuinely useful behavior beyond that: tokens are the 'single source of truth for every visual property,' overlays come from defaults, and setting is_default=true clears any existing default 'atomically.' This side-effect disclosure is exactly the kind of context annotations cannot provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, roughly 75 words, with the core purpose front-loaded. Each sentence earns its place: the tokens requirement, the cover/thank-you page behavior, and the is_default side effect. No filler, no repetition of schema content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 5 parameters and two nested objects, the description plus the rich 100%-covered schema and existing output schema provide enough for correct invocation. The description covers the key behavioral nuances (complete tokens, default clearing, overlay defaults). A minor gap is that it doesn't explicitly note cover_page/thank_you_page are optional, though the schema's required list already conveys that.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description reinforces the completeness requirement for tokens and adds the atomic default-clearing nuance for is_default, but the schema already documents each parameter thoroughly (including the full token list and the 'one per account' default semantics). The added value over the schema is marginal.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence 'Create a new visual theme' states a specific verb and resource, and the rest of the description clarifies what a theme is (tokens map, cover/thank-you page images, default flag). This clearly distinguishes it from siblings like update_theme, get_theme, list_themes, and archive_theme, which are all different operations on the same resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage — create a new theme when you need a fresh visual theme and supply the complete tokens map. However, it never explicitly names alternatives or exclusions, such as 'use update_theme to modify an existing theme' or 'use get_theme to inspect current settings.' Given the large sibling list, explicit routing would meaningfully help an agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

datasource_resourcesList datasource resource valuesA
Read-only
Inspect

List the selectable values behind a widget's advanced settings and filters — campaigns, ad sets, forms, videos, alerts, and so on. describe_datasource says WHICH advanced keys a data view requires; this returns the values to put in them.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsNoValues the resource is scoped by — e.g. the campaign id when listing its ad sets. Keyed as describe_datasource names them
resourceYesResource name, e.g. "campaigns"
client_idYesClient id (from list_clients)
datasource_idYesDatasource alias (from datasources), e.g. fb-ads

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe selectable values for that resource — each with the id to put in the advanced setting or filter, and the label to show.
successYesTrue when the call succeeded.

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety and reach profile is covered. The description adds that these are enumerable, selectable values scoped by params, which is useful but modest; it says nothing about rate limits, paging, or result size for large value sets.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly written sentences: the first defines the resource, the second routes the agent relative to describe_datasource. No filler, and the purpose is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only listing tool with a full output schema and complete schema parameter descriptions, nothing essential is missing. The description supplies the conceptual framing (selectable values for advanced keys) that the structured fields cannot convey.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents datasource_id, client_id, resource, and the params object (including that params keys are named by describe_datasource). The description adds no syntax or format detail beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List the selectable values behind a widget's advanced settings and filters') and enumerates concrete examples (campaigns, ad sets, forms, videos, alerts). It also positions itself against the sibling describe_datasource, so an agent can distinguish the two without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly frames the relationship: describe_datasource says WHICH advanced keys a data view requires, while this tool returns the values to put in them. That is a clear when-to-use signal via the alternative tool, though it does not spell out exclusions or prerequisites beyond the required datasource_id/client_id/resource.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

datasourcesList supported datasourcesA
Read-only
Inspect

List every datasource Oviond supports, with the id (the datasource_id used everywhere else — e.g. ga4, gadw, fb-ads), name, category, and data views. Call this FIRST to find the datasource_id, then describe_datasource for that datasource's views, metrics and dimensions. For what this account has actually connected, use connected_datasources.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe catalog of supported datasources — each with its id (the datasource_id used everywhere else), name, category and data views.
successYesTrue when the call succeeded.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds useful behavioral context: it lists the full catalog of supported datasources rather than account connections, and clarifies the id format used elsewhere. No contradictions, but no additional rate-limit or response-size caveats are needed for this simple zero-param call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each earning its place: the first states the core action and output fields, the second gives the typical call order, and the third disambiguates from a sibling. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only list tool with an output schema and strong annotations, the description covers what the tool returns, how to use it in the workflow, and when to choose a different tool. Nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline is 4. The description adds meaning about the datasource_id field and its role elsewhere, which is useful context for selecting and processing results, even though no parameter documentation is required.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('List every datasource Oviond supports') and resource, and enumerates the returned fields (id, name, category, data views). It clearly distinguishes itself from siblings like describe_datasource and connected_datasources.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly instructs the agent to call this FIRST to obtain the datasource_id, then use describe_datasource, and directs to connected_datasources for account-specific connections. This is concrete, actionable routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_connectionDelete connected datasourceA
Destructive
Inspect

Delete a datasource connection — every widget pulling data from it will break

ParametersJSON Schema
NameRequiredDescriptionDefault
connection_idYesConnection ID to delete (from connected_datasources)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoConfirmation that the connection was deleted. It is unlinked from every client that used it, and their widgets fall back to demo data.
successYesTrue when the call succeeded.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already include destructiveHint=true, but the description adds concrete impact information: 'every widget pulling data from it will break'. This goes beyond the generic destructive flag by telling the agent exactly what downstream effect to expect.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, well-structured sentence conveys the action and its most important consequence without wasted words. The key behavioral warning is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter destructive tool with annotations and an output schema, the description covers everything needed: what to delete, where to get the ID, and what impact to expect. Nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the only parameter connection_id already includes a useful origin hint ('from connected_datasources'). The description does not need to add more parameter detail; baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the specific action ('delete a datasource connection') and the resource affected, and immediately clarifies the consequence. This clearly distinguishes it from related operations like unlink_datasource or rename_connection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use when one wants to permanently remove a datasource connection and accept that dependent widgets will break. It does not explicitly contrast with sibling tools like unlink_datasource, leaving the choice to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_folderDelete client folderB
Destructive
Inspect

Delete a client folder

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesFolder ID to delete (from list_folders)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoConfirmation that the folder was deleted. The clients inside it are not deleted — they just stop being filed under it.
successYesTrue when the call succeeded.

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already flag destructiveHint=true and readOnlyHint=false, and the description adds no behavioral context beyond stating the deletion. It does not disclose whether contained folders are also deleted, whether permissions are required, or whether the action can be undone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler or repetition. Every word directly contributes to stating the tool's function.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter delete operation with destructiveHint=true and an output schema present, the description is largely sufficient for invocation. The main gap is the lack of detail about impacts on folder contents, but annotations and schema compensate for the core safety and parameter concerns.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter is fully documented in the schema with a helpful 'from list_folders' hint, so the description does not need to add parameter meaning. Baseline 3 applies because schema coverage is 100% and the description adds nothing further.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Delete') on a particular resource ('client folder'), making the tool's purpose immediately understandable. It is distinct from sibling tools like create_folder, update_folder, and move_client_to_folder, though the phrasing closely mirrors the title.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided about when to use this tool versus alternatives, such as archiving instead of permanently deleting. There is no mention of prerequisites, reversibility, or caveats, so the agent is left without decision support.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_pageDelete report pageA
Destructive
Inspect

Delete a page by ID

ParametersJSON Schema
NameRequiredDescriptionDefault
page_idYesPage ID to delete (from list_pages)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoConfirmation that the page and the widgets on it were deleted.
successYesTrue when the call succeeded.

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already supply destructiveHint=true and readOnlyHint=false. The description adds no behavioral context beyond the raw delete action, such as cascading removal of widgets, permanence, or authorization requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short, front-loaded sentence with no filler. It delivers the core action and object immediately and earns every word.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-required-parameter destructive operation with safety annotations and an output schema, the minimal description is sufficient for invocation. It could add a note about whether the page's widgets are deleted too, but that is not essential for the agent to call the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the page_id property is already described ('Page ID to delete (from list_pages)'). The description merely echoes 'by ID' and contributes no new parameter semantics, so the high-coverage baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Delete') and resource ('a page by ID'), and the title narrows it to report pages. This is clearly distinct from sibling tools like delete_widget, delete_folder, and delete_connection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The intended use is implied by the verb—call it when a page needs to be removed—but there is no explicit when/when-not guidance or comparison to alternatives. With many archive_* and delete_* siblings, a sentence saying 'permanently removes a page; use archive_* to keep it recoverable' would materially improve routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_widgetDelete widgetB
Destructive
Inspect

Delete a widget by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
widget_idYesWidget ID to delete (from list_widgets).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoConfirmation that the widget was deleted from its page.
successYesTrue when the call succeeded.

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare destructiveHint=true, so the destructive nature is captured structurally. The description adds no extra behavioral context such as permanence, cascading effects, permissions, or irreversibility.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single direct sentence with no filler. It is appropriately sized for a simple one-parameter delete operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter delete with an output schema and destructive annotation, the description is nearly sufficient. The main missing element is a note distinguishing it from delete_widgets, but the schema and annotations cover the essential calling information.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the widget_id parameter is clearly documented as coming from list_widgets. The description's 'by ID' adds no new semantic value beyond the schema, so the baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Delete a widget by ID'), making the core action clear. It does not explicitly differentiate from the sibling tool delete_widgets, though the singular 'a widget' and 'by ID' imply a single-target operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided about when to use this tool versus delete_widgets, archive operations, or other removal paths. The schema mentions obtaining the ID from list_widgets, but the description itself gives no usage context or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_widgetsDelete multiple widgetsA
Destructive
Inspect

Delete multiple widgets by ID in one call.

ParametersJSON Schema
NameRequiredDescriptionDefault
widget_idsYesWidget IDs to delete (from list_widgets).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoConfirmation, and how many widgets were deleted.
successYesTrue when the call succeeded.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, so the destructive nature is covered. The description adds the behavioral detail of 'in one call', indicating a batched operation, but does not disclose potential partial failures, irreversibility, or permission requirements. With annotations covering the safety profile, the description adds minimal but useful extra context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that front-loads the action and scope. It is efficient with no fluff, placing the key distinguishing information ('multiple', 'in one call') prominently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one array parameter, an existing output schema, and annotations covering destructive behavior, the description is adequately complete. It clearly states the operation and relies on the schema for parameter details. It might benefit from mentioning non-existent IDs handling, but that is minor given the output schema and annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for the widget_ids parameter, including the note 'from list_widgets'. The description's 'by ID' is redundant with the schema. No additional parameter meaning is added beyond what the schema already provides, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Delete'), resource ('widgets'), and distinguishes the plural form by explicitly saying 'multiple widgets by ID in one call'. This clearly separates it from the singular delete_widget sibling and other delete operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description conveys the intended use case (batch deletion of multiple widgets) without explicitly naming alternatives or exclusions. The existence of delete_widget implies a singular alternative, but the description doesn't explicitly say when to prefer one over the other. It provides clear context but lacks explicit 'when not to use' guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

describe_datasourceDescribe datasourceA
Read-only
Inspect

Describe a datasource the way the report builder sees it, in one call: its data views, the advanced settings each view requires, its default view and defaults, and its metric and dimension catalogs with the flags that decide what can be combined — single (must be the only dimension), requires_metric (only offered once that metric is picked), deprecated, custom. A metric or dimension is only valid inside its own data_view. Use this before add_data_widget or update_data_widget.

ParametersJSON Schema
NameRequiredDescriptionDefault
data_viewNoScope the response to one data view, e.g. ACCOUNT
datasource_idYesDatasource alias (from datasources), e.g. ga4, gadw, fb-ads

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe datasource's data views, and for each one its metrics, its dimensions with their flags, and the advanced settings a query has to supply. A metric is only valid inside its own view — read this before configuring a widget.
successYesTrue when the call succeeded.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so safety is covered by structured data. The description adds genuine behavioral context beyond that: it lists the returned flag semantics (`single`, `requires_metric`, `deprecated`, `custom`) and the constraint that a metric/dimension is only valid inside its own `data_view` — a rule an agent could easily violate. It does not discuss pagination or response size, but for a read-only introspection tool this is strong.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose, then the payload contents, then the usage pointer last — a sensible order. It is dense and clause-heavy, packing the flag list into one run-on sentence, but every clause carries meaning and nothing is superfluous.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be spelled out, yet the description still previews the shape of the response (views, defaults, catalogs) so the agent knows what to expect. Combined with the read-only annotations, nothing needed to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both parameters are already documented in the schema; the baseline is 3. The description implies that `data_view` scopes the response and that the datasource alias selects the source, but adds no syntax or format detail beyond what the schema already states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Describe) and resource (datasource) and then enumerates exactly what the response contains: data views, `advanced` settings, default view, and metric/dimension catalogs with their combinability flags. This clearly separates it from siblings like `datasources` (listing) and `datasource_resources` without requiring schema inspection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: "Use this before add_data_widget or update_data_widget," naming the two downstream tools it feeds. That is a concrete when-to-use signal tied to specific siblings, which is more than most definitions provide.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

duplicate_assetDuplicate saved sectionBInspect

Duplicate an asset (and its widgets) under a new name.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSource asset ID (from list_assets).
nameYesNew asset name.
tagsNoOptional new tag list (defaults to source).
descriptionNoOptional new description (defaults to source).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe copy — its own new id, plus the name, description and tags.
successYesTrue when the call succeeded.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide readOnlyHint=false and destructiveHint=false, so the agent knows it's a write operation but not destructive. The description adds that it duplicates widgets, which is useful beyond annotations. It doesn't disclose what exactly gets duplicated (e.g., tags, description defaults) or implications like permissions, but that's partially in the schema. It doesn't contradict annotations, so score is moderate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one short sentence, front-loaded with the verb and resource. It's efficient but lacks any additional context that would make it more useful. It earns a neutral 3 because it's concise but doesn't add much value beyond the name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a duplication tool with an output schema and high schema coverage, the description is reasonably complete. The key point about duplicating widgets is included. However, it doesn't clarify behavior like potential name conflicts or how it interacts with the source asset, but that may be covered by the output schema. Overall, it's adequate for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all parameters. The description adds minimal extra meaning: it repeats the operation and mentions widgets, but doesn't explain the semantics of 'new name' or how defaults work for tags/description. Since schema has high coverage, baseline is 3, and the description doesn't push beyond that.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the verb 'Duplicate' and the resource 'asset' with a parenthetical about including widgets, which is clear. It doesn't explicitly distinguish from sibling duplicate_* tools (e.g., duplicate_report, duplicate_goal), but the subject 'asset' in the description and title is specific enough. The plural 'widgets' adds useful scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It doesn't state when to use this tool versus alternatives, but the resource is clearly different from other duplicate tools, so an agent can infer usage. The inclusion of '(and its widgets)' implies the full asset duplication scope, but there's no explicit mention of alternatives or when not to use. The tool name and siblings make the choice relatively straightforward.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

duplicate_calculated_metricDuplicate calculated metricBInspect

Duplicate a calculated metric, optionally with a new name.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSource calculated metric ID (from list_calculated_metrics)
new_nameNoName for the copy

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe copy — its own new id, plus the name, formula and symbol.
successYesTrue when the call succeeded.

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate non-read-only and non-destructive, but the description adds no further behavioral context. It does not state that the original metric remains unchanged, whether the copy is deep or shallow, or if permissions and dependent widgets are duplicated. For a mutation-like operation, this is a notable gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no fluff. It efficiently conveys the action and the optional naming capability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with only two parameters and an output schema, the description is largely sufficient for correct invocation. Its main gap is missing behavioral details like side effects, but the schema covers the required inputs and the output schema handles return values.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides complete descriptions for both parameters (id and new_name), so the description adds little beyond restating that new_name is optional. A baseline of 3 is appropriate given 100% schema description coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Duplicate' with the resource 'calculated metric', making the operation unambiguous. This clearly distinguishes it from siblings like create_calculated_metric and update_calculated_metric, despite not naming them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives such as create_calculated_metric (for new metrics) or archive_calculated_metric (for removing metrics). The agent must infer usage solely from the tool name and generic action word.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

duplicate_custom_dataDuplicate custom datasetAInspect

Duplicate a custom-data dataset with a new name.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSource custom-data ID (from list_custom_data)
new_nameYesName for the copy

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe copy — its own new id, plus the name, columns and rows.
successYesTrue when the call succeeded.

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate the operation is not read-only and not destructive, and the description adds little behavioral context beyond reaffirming that a copy is made. It does not disclose potential duplicate-name conflicts, whether the copy is a full deep copy, or whether the operation can fail partway.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, direct sentence with no filler. The core action and the distinguishing constraint ('with a new name') are both front-loaded and clearly expressed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter duplication action with an output schema and safety-relevant annotations, the description is nearly sufficient. It lacks only minor context such as naming uniqueness expectations or whether the copy inherits all dataset contents, but these are not needed to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema fully describes both parameters, including the source ID origin and the meaning of new_name, giving 100% schema coverage. The description does not add parameter-level detail, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Duplicate' with the resource 'custom-data dataset' and adds the key constraint 'with a new name'. This clearly distinguishes it from related tools like create_custom_data, update_custom_data, and archive_custom_data without needing to inspect the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is only implied by the verb 'Duplicate' rather than explicitly stated. An agent can infer this is for copying an existing custom-data dataset rather than creating one from scratch, but there is no direct comparison to create_custom_data or any mention of when not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

duplicate_goalDuplicate goalAInspect

Duplicate a goal, optionally with a new name.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSource goal ID (from list_goals)
new_nameNoName for the copy

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe copy — its own new id, plus the target, operator and query.
successYesTrue when the call succeeded.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is not read-only and not destructive, so the bar for additional behavioral disclosure is lower. The description adds the optional renaming behavior, but it does not describe side effects, what the duplicate inherits, or what happens to the source goal. There is no contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single efficient sentence with no filler. The core operation is stated first and the optional parameter behavior is appended naturally, making it easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter tool with complete schema coverage and an output schema, the description is nearly sufficient. It only lacks explicit usage guidance relative to sibling tools, but nothing critical is missing for invoking the operation correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already fully documents both parameters. The description reinforces that new_name is optional, which is also implied by the schema's required list, but it adds no new semantic detail beyond the structured definitions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb-resource pair ('Duplicate a goal') and adds the optional renaming behavior, making it immediately distinguishable from related operations like create_goal, update_goal, and archive_goal. It clearly states what the tool does without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided about when to use this tool versus alternatives such as create_goal, update_goal, or other duplicate_* tools. The intended context is only implied by the word 'duplicate' rather than explicitly stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

duplicate_reportDuplicate report or dashboardBInspect

Duplicate a report with a new name

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName for the duplicated report
report_idYesSource report ID (from list_reports)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe copy — its own new id, with every page and widget of the source cloned under it.
successYesTrue when the call succeeded.

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations only indicate readOnlyHint: false, openWorldHint: false, and destructiveHint: false, so the description carries the burden of behavioral disclosure. It states that the report is duplicated with a new name, but does not explain whether the source report is affected, whether widgets/dashboards are copied, what permission is required, or what the returned object contains.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with no filler. It front-loads the core action and resource, making it easy for an agent to scan and understand quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a relatively simple tool with only two required parameters, full schema coverage, and an output schema. The description is sufficient for basic invocation, though it could be more complete by clarifying the scope of duplication (report vs. dashboard) and any side effects.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both parameters completely. The description adds only the context that 'name' is the new name for the duplicate, which is useful but minimal; it does not meaningfully enrich the parameter understanding beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear action ('Duplicate') and resource ('a report'), which distinguishes it from most sibling tools like archive_report or get_report. However, the title mentions 'report or dashboard' while the description only says 'report', leaving some ambiguity about whether dashboards are also duplicated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to use this tool versus alternatives such as duplicate_asset, create_report_from_template, or create_report. The description is self-evident for a simple duplication action but does not clarify relationships, exclusions, or prerequisites beyond the schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generate_company_paletteGenerate company color paletteA
Read-only
Inspect

Generate a color palette from a hex color (read-only — computes shades, changes nothing).

ParametersJSON Schema
NameRequiredDescriptionDefault
hexYes3-6 character hex color code (without #)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe generated palette — the shade scale computed from the given colour, keyed by shade step.
successYesTrue when the call succeeded.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true, and the description reinforces this by stating 'read-only — computes shades, changes nothing.' It adds the detail that the tool computes shades, which is valuable behavioral context beyond the annotation. Given the tool's simplicity and the existing annotation coverage, this is sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, well-structured sentence that front-loads the core action ('Generate a color palette') and clarifies the read-only nature in a parenthetical. Every word serves a purpose, with no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with a single parameter and an existing output schema, the description fully covers the essential behavior: it generates a palette, is read-only, and computes shades. Nothing an agent needs to correctly invoke this tool is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema fully documents the hex parameter, including format (3-6 characters), and explicitly states it is without '#'. The description does not add further parameter detail, but the schema coverage is 100%, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Generate a color palette') and the input ('from a hex color'), with an explicit clarification that it is read-only. This distinguishes it from sibling tools that modify or create other resources, leaving no ambiguity about its function.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description offers no guidance on when to use this tool versus alternatives. It does not mention use cases, prerequisites, or when not to use it. While the name is self-explanatory, an agent would have to infer its purpose in the broader context of tools like create_theme or update_theme.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generate_pdfGenerate PDFAInspect

Queue a PDF render of a report or dashboard. Returns a job_id — poll get_pdf_status until it completes, then download the URL. A multi-page report prints page by page; a dashboard prints as one long page.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatYesPage size: A4 or Letter
client_idYesClient the report belongs to (from list_clients)
report_idYesReport or dashboard to render (from list_reports)
orientationYesportrait or landscape

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe queued job — job_id to poll with get_pdf_status, and its initial status.
successYesTrue when the call succeeded.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false); the description adds the genuinely non-obvious behavioral contract that this is asynchronous, yields a job_id, and must be polled before a URL is available. It also discloses rendering semantics (multi-page reports paginate, dashboards render as one long page), which affects output expectations. It stops short of stating auth requirements or job expiry/rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with zero filler, front-loading the core action first, then the follow-up workflow, then the rendering nuance. Each sentence carries distinct information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, yet the description still surfaces the one return detail an agent must act on (job_id plus the polling/download path) and the page-layout behavior. Combined with full schema coverage and annotations, nothing needed for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and two of the four parameters carry enums, so the schema fully documents format, orientation, report_id, and client_id. The description adds no syntax, default, or constraint detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Queue a PDF render of a report or dashboard'), and the async framing ('Queue') immediately separates it from the synchronous read tools in the sibling list. It also names get_pdf_status, so an agent can place it in the workflow without opening another schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit next-step guidance: poll get_pdf_status until completion, then download the URL. That is clear context for the calling sequence, but it never states when to prefer this over alternatives such as preview_report or list_exports, and there are no exclusion conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_accountGet accountA
Read-only
Inspect

Get account details for the authenticated user

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe account — id, company name and details, onboarding state, and the plan it is on.
successYesTrue when the call succeeded.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is known. The description adds 'for the authenticated user' but discloses no additional behavioral traits such as response shape, auth requirements, or related account scoping beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, direct sentence with no filler. It front-loads the verb and resource immediately and earns every word.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only operation with an output schema present, the description is nearly complete. The only gap is the lack of differentiation from similar sibling tools, which would help an agent select it confidently in a crowded toolset.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters, and the schema coverage is 100% trivially. The baseline for no parameters is 4, and the description correctly adds no unnecessary parameter details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get') and the resource ('account details for the authenticated user'), making the core purpose unambiguous. However, it does not differentiate from closely related siblings such as get_current_user, whoami, or get_company, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided about when to use this tool versus the many account/user-related siblings. The description explains what it does but gives no exclusions, prerequisites, or direction to an alternative for different needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_account_usageGet account usageA
Read-only
Inspect

Get current account usage stats (clients, reports, users, storage)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoCurrent usage against the plan limits — counts of clients, reports and users, and storage used.
successYesTrue when the call succeeded.

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds only the 'current' qualifier and the stat categories, but does not disclose auth requirements, caching, or other behavioral details. There is no contradiction with the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with a parenthetical that adds relevant detail. It contains no redundant restatement of the title and every element earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only getter with a provided output schema and safety annotations, this description is complete. It names the resource and the dimensions of usage returned, with no prerequisites or input conditions to document.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there are no parameter semantics for the description to clarify; the baseline for a 0-param tool is 4. The listed categories usefully signal what the returned usage stats cover.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Get' plus a clear resource, 'account usage stats', and enumerates the exact categories returned: clients, reports, users, and storage. This differentiates it from siblings like get_account or count_clients, which focus on single entities rather than aggregate usage.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'current account usage stats' implies the tool is for retrieving an account-level usage overview. However, it does not explicitly state when to use it over siblings such as get_account or count_clients, nor does it provide exclusions or alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_assetGet saved sectionB
Read-only
Inspect

Get a single asset by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesAsset ID (from list_assets).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe saved section — id, name, description, tags and the datasources it draws on. Its widgets come from list_asset_widgets.
successYesTrue when the call succeeded.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered by structured data. The description adds only cardinality ('single') and lookup method ('by ID'), which is mildly useful but does not disclose additional behavior such as not-found handling or permissions, though the output schema covers the return shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Six words, front-loaded with the verb and object, with no redundant phrases or filler. Every word earns its place for a single-resource getter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read-only lookup with annotations and an output schema available, the description is nearly sufficient; an agent can call it once it has an ID. It is not a 5 because the undefined 'asset' term and lack of any usage context leave slight ambiguity in a toolset with many get_* siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the one parameter already documents its provenance ('Asset ID (from list_assets)'). The description adds no parameter-level meaning beyond reinforcing that lookup is by ID, so the schema carries the load and a baseline score is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a concrete verb-resource pair ('Get a single asset') and an identifier criterion ('by ID'), making the tool's purpose immediately recognizable and separating it from list_assets. However, it never defines what qualifies as an 'asset' and does not explicitly distinguish itself from get_report, get_widget, or get_template beyond the noun, so it stops short of full sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use or when-not-to-use guidance; the description simply restates the operation. The schema's 'Asset ID (from list_assets)' hint implies a prerequisite, but the description itself does not route the agent to list_assets first or contrast with get_report/get_widget/list_assets.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_automation_historyGet automation send historyB
Read-only
Inspect

Get send history for an automation

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesAutomation ID (from list_automations)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoOne row per run, newest first — when it ran, whether it sent or was skipped, who it went to, and the failure reason when it did not send.
metaNoPage, limit and total row count.
successYesTrue when the call succeeded.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows the operation is safe and non-mutating. The description adds no behavioral nuance beyond that—no pagination, ordering, or result-scoping details—but it also does not contradict the annotations, making this adequate rather than informative.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no filler, and the core action and object are front-loaded. It is terse, but every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read-only tool with an output schema, the definition is nearly sufficient: parameter provenance is covered by the schema and safety is covered by annotations. It does not explain the meaning or shape of 'send history', but the output schema handles return structure, so no critical call-time information is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the id parameter is already documented as originating from list_automations, so the schema carries the semantic burden. The description only repeats 'automation' without adding format, constraints, or usage nuances, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies a specific verb ('get') and resource ('send history for an automation'), making it possible to distinguish from generic sibling getters like get_report or get_widget_data. However, it essentially restates the title and adds no detail about what the send history contains, so it falls just short of a fully differentiating definition.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus alternatives such as list_automations or get_widget_data, and no exclusions or negative use cases are stated. The intended context must be inferred from the tool name rather than explained in the description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_brandingGet account brandingA
Read-only
Inspect

Get the account's white-label branding (logo, favicon)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe account branding — logo_url (full logo) and favicon_url (square mark).
successYesTrue when the call succeeded.

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful context about what the branding includes (logo, favicon) but does not describe any behavioral details such as authentication requirements, caching, or whether the returned data is always populated. This is acceptable for a simple getter with strong annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler. Every word adds value: it names the resource, clarifies the white-label scope, and lists the concrete items returned.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the zero-parameter schema, the presence of an output schema, and annotations covering safety, the description is fully sufficient. An agent can invoke this tool correctly without needing additional context about return values or side effects.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline is 4. The description adds no parameter-specific semantics, but none are needed because the input schema is empty and schema description coverage is 100%.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Get'), a clear resource ('account's white-label branding'), and the concrete contents ('logo, favicon'). This distinguishes it from sibling tools like update_branding, remove_account_favicon, and refresh_account_favicon without needing to inspect their schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The read-only verb and resource make the intended use clear: retrieve current branding. However, the description does not explicitly contrast with alternatives such as update_branding or refresh_account_favicon, nor does it state when one should prefer get_company or get_account. Usage guidance is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_clientGet clientA
Read-only
Inspect

Get a single client by ID

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesClient ID (from list_clients)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe client — id, name, website, currency, timezone, branding, theme_id, its folders and the datasources linked to it.
successYesTrue when the call succeeded.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description's 'Get' aligns with a safe read operation. The description adds no behavioral context beyond the annotations, but it also does not contradict them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single short sentence with no filler. It places the core action and object upfront and every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read-only getter with annotations covering the safety profile and an output schema available, the description conveys all essential calling context. A minor gap is that it does not mention not-found behavior, but that is not required for invoking the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%: the id parameter is required and described as 'Client ID (from list_clients)'. The description adds no additional parameter-level meaning, so it meets the baseline without surpassing it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Get') with a clear resource ('a single client') and a selection mechanism ('by ID'). This distinguishes it from sibling tools like list_clients and count_clients without needing to explore the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the tool is appropriate when you have a client ID and want one client. The parameter description hints that the ID comes from list_clients, but there is no explicit when-to-use versus alternatives or exclusions. For a simple getter this is adequate but not explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_companyGet company profileA
Read-only
Inspect

Get company settings

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe agency's own company profile — company_name, website, timezone, address, city, state, zip, country and phone.
successYesTrue when the call succeeded.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds no behavioral context beyond the basic read operation, but it does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one short, front-loaded sentence with no filler. 'Get company settings' is direct and sufficient for a zero-parameter read-only tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no parameters, read-only annotations, and an output schema present, the description is largely sufficient for an agent to invoke the tool correctly. It loses a point because 'settings' versus 'profile' ambiguity and lack of differentiation from similar getters leave slight room for confusion.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has no parameters, so no parameter-level documentation is needed. With zero parameters and full schema coverage, the baseline of 4 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource ('Get company settings'), making the core operation clear as a read-only retrieval. However, it does not differentiate itself from sibling getters like get_account, get_client, or get_branding, and the title says 'profile' while the description says 'settings'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus nearby alternatives such as get_account, get_branding, or get_client, nor any mention of exclusions or related update operations like update_company. An agent must infer the appropriate context purely from the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_current_userGet current userA
Read-only
Inspect

Get the currently authenticated user profile

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe signed-in user — id, email, fullname, role, avatar_url, language, and the client ids they are scoped to.
successYesTrue when the call succeeded.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds that it returns the profile of the authenticated user, which is a useful distinction from other user-related tools. No contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, concise sentence that is front-loaded with the key action and resource. Every word earns its place; there is no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (zero parameters, straightforward purpose) and the existing annotations and output schema, the description is complete for an agent to select and invoke it. It could mention auth requirements, but this is minor given the context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the description carries no parameter burden. The schema coverage is 100% (empty properties), and the description adds clear return semantics (current authenticated user profile), which is sufficient.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly specifies the verb 'Get' and the resource 'currently authenticated user profile', which is specific and distinguishes it from account or client tools. It is unambiguous about what the tool returns.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The tool is self-evidently for retrieving the current user's profile, and no alternative is needed among siblings (e.g., get_client, get_account). Given the zero-parameter nature, explicit when-not guidance is less critical; the context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_custom_dataGet custom datasetA
Read-only
Inspect

Get a single custom-data dataset by ID, including its parsed rows.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCustom-data ID (from list_custom_data)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe dataset — id, name, file_name, columns, and raw_data: the parsed rows, each an object keyed by column name.
successYesTrue when the call succeeded.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds one behavioral detail – it returns 'parsed rows' – which is useful but likely also present in the output schema. No hidden side effects, auth, or error behavior disclosed; acceptable for a read-only getter.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, front-loaded with the core action and resource. No filler, every word earns its place. The qualifier 'including its parsed rows' adds value without bloating.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read-only tool with annotations and an output schema, the description is nearly sufficient. It clearly states the operation and response scope. It doesn't explicitly mention that IDs come from list_custom_data, though the schema does, and it lacks explicit sibling differentiation, but given the tool's simplicity and the surrounding context, the gaps are minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%; the `id` parameter is already documented with 'Custom-data ID (from list_custom_data)', including its source. The description merely says 'by ID', adding no further semantic value beyond the schema. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States exactly what it does: 'Get a single custom-data dataset by ID' – the verb 'Get' plus resource 'custom-data dataset' and qualifier 'single' differentiates it from list_custom_data. The addition 'including its parsed rows' clarifies the response contents.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage: call it when you have an ID and want the dataset. It does not explicitly steer against alternatives such as list_custom_data for enumerating IDs, nor does it mention when not to use. Schema parameter note 'from list_custom_data' is a hint but not part of the description. Adequate but no explicit routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_pdf_statusGet PDF generation statusA
Read-only
Inspect

Poll a PDF job with the job_id generate_pdf returned. status is processing → complete (with a url) or failed.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYesJob ID from generate_pdf

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe job — status (processing, complete or failed) and the download url once it is complete.
successYesTrue when the call succeeded.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavioral detail by describing the status lifecycle: processing → complete (with a url) or failed, which goes beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that front-loads the action and resource, then efficiently communicates the status transitions. Every word earns its place with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values are already documented. The description covers the key workflow context (job_id origin and status progression), making it complete for a simple polling tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the parameter description already states 'Job ID from generate_pdf'. The tool description reinforces this by mentioning the job_id source, but adds no new format or usage details beyond what the schema provides, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Poll') and resource ('a PDF job') and ties it directly to the job_id returned by generate_pdf. This clearly distinguishes it from sibling tools, especially generate_pdf, by focusing on status retrieval rather than creation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says to use the job_id that generate_pdf returned, establishing the correct context for polling. It doesn't explicitly state when not to use it, but the polling workflow and the named sibling make the usage context clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_reportGet report or dashboardA
Read-only
Inspect

Get a single report by ID

ParametersJSON Schema
NameRequiredDescriptionDefault
report_idYesReport ID (from list_reports)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe report — id, name, type, client_id, theme_id, date_range, its pages, and the cover / thank-you / password / PDF settings.
successYesTrue when the call succeeded.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds no behavioral context beyond 'get a single report by ID'—no mention of return format, whether dashboards are included, or any special behavior. With annotations covering safety, a 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short sentence with zero waste. The key information—what it gets and by what identifier—is front-loaded and complete.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only getter with one fully documented parameter and an output schema, the description is nearly complete. The only minor gap is the title's mention of 'dashboard' not being reflected in the description, which could confuse an agent looking for dashboard retrieval.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: the only parameter, report_id, is described as 'Report ID (from list_reports).' The description adds no additional parameter meaning beyond what the schema already provides, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Get a single report by ID.' This is clear and distinguishes it from list_reports and other get_* tools, though it doesn't explicitly mention dashboards despite the title saying 'report or dashboard.'

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage: call when you have a report_id and need a single report. It doesn't explicitly state when not to use it or mention alternatives like list_reports or preview_report, but the context is reasonably clear for a simple getter.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_templateGet templateA
Read-only
Inspect

Get a single template by ID

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesTemplate ID (from list_templates)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe template — id, name, description, type, its pages, and the datasources it expects.
successYesTrue when the call succeeded.

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds no behavioral context beyond the basic get operation—no error handling, permission requirements, or return format details. Annotations already declare readOnlyHint=true and destructiveHint=false, so the description does not need to repeat safety, but it also contributes no extra behavioral traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, unambiguous sentence with no unnecessary words. It is front-loaded with the key action and resource.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only getter with one parameter, an output schema, and readOnly annotations, the definition is nearly complete. The only minor gap is the absence of explicit guidance on sourcing the ID, though that is covered in the schema's parameter description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% because the id parameter is fully described ('Template ID (from list_templates)'). The description itself adds no parameter semantics, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Get'), resource ('template'), and retrieval method ('by ID'), making the tool's function immediately clear. It also distinguishes itself from sibling tools like list_templates (which lists all templates) and update_template (which modifies one).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when/when-not guidance is provided in the description, but the parameter schema's note 'Template ID (from list_templates)' implies a workflow: first list templates to obtain an ID, then use this tool. The usage context is implied rather than explicitly stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_themeGet themeA
Read-only
Inspect

Get a single theme by ID

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesTheme ID (from list_themes)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe theme — id, name, tokens, cover_page, thank_you_page and is_default.
successYesTrue when the call succeeded.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows this is a safe read operation. The description's 'Get' is consistent but adds no behavioral context beyond the annotations, such as behavior when the theme does not exist or whether related assets are included. With annotations covering the safety profile, a score of 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence, front-loaded with the action and resource, with no redundant words or filler. It earns its place entirely.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read tool with full schema coverage, clear annotations, and an output schema, the description is almost complete. It could optionally mention not-found behavior or point to list_themes for enumeration, but nothing essential is missing given the other structured fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the id property is described as 'Theme ID (from list_themes)'. The description's 'by ID' adds no new meaning beyond what the schema already states. The baseline of 3 applies because the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Get') and resource ('single theme by ID'), distinguishing it from sibling list_themes (which lists multiple themes) and mutations like create_theme/update_theme. An agent can immediately understand the tool's function without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not explain when to use this tool versus alternatives such as list_themes, or mention any preconditions like needing a valid ID from list_themes. The only usage hint ('from list_themes') appears in the schema parameter description, not in the tool description, so the description itself provides no routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_widgetGet widgetA
Read-only
Inspect

Get a single widget by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
widget_idYesWidget ID (from list_widgets).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe widget — id, name, type, chart, its datasource and query, its state, and its position.
successYesTrue when the call succeeded.

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds no additional behavioral context such as error handling, not-found behavior, or response shape, though an output schema exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler or redundant phrasing. Every word contributes to the tool's core purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter getter with an output schema and annotations covering read-only behavior, the description is complete. Nothing essential is missing for an agent to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single parameter is already well-documented as 'Widget ID (from list_widgets)'. The tool description only repeats 'by ID' and adds no new meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Get'), a specific resource ('widget'), and the scope ('single widget by ID'). This clearly distinguishes it from siblings like list_widgets and get_widget_data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when a single widget is needed by ID, but it does not explicitly state when to use this tool versus alternatives or mention any exclusions. The schema's 'from list_widgets' hint provides context, but the description itself offers no direct routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_widget_dataGet widget dataA
Read-only
Inspect

Read the numbers behind data widgets, for charting them. Requires one of: widget_ids for specific widgets, or source_id for every data widget on a report. Returns one entry per widget: its name, its saved chart type, its state, and — once its fetch has landed — the metric and dimension labels, the period totals, the previous period's totals, and the rows. chart is the visualization the widget is saved as and the one the app renders: draw it as that. score is a single KPI value (read it from summary, not the rows), table is a table, map is geographic, and the rest are line / area / bar / column / pie / donut / funnel. Stored variants map to their family — spline and areaspline are line and area, stacked_ and 3d_ prefixes are the type they name. chart is present while a widget is still fetching too, so a placeholder can take the right shape. Pass widget_ids for the widgets a call touched, or source_id for every data widget on a report. A widget in state "loading" is still fetching and carries no rows yet — call again for it. "demo" means the datasource is not linked to the client and the numbers shown in the app are placeholders; "error" means its last fetch failed. Rows are capped at row_cap and truncated says whether any were cut. datasource_type says how to read the entry: a Static Value widget (CUSTOM_DATA) shows the value field and has no series; a GOALS widget plots its summary against the target, which list_goals holds; CALCULATION rows are keyed by the calculated metric id, whose name is the matching metric label. A metric that carries a symbol (percent, currency, decimal…) is formatted that way in the app.

ParametersJSON Schema
NameRequiredDescriptionDefault
waitNoWait up to 15 seconds for in-flight fetches to land, returning as soon as they all have. Default true
row_capNoRows returned per widget (default 200)
source_idNoRead every data widget on this report instead (report id from list_reports)
widget_idsNoWidgets to read (ids from list_widgets, or widget_id from add_data_widget). Up to 200 — use source_id for a whole report

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoOne entry per widget — its name, state, the `chart` it is saved as, the metric and dimension labels, this period's summary totals, the previous period's, and the rows (capped at row_cap, with `truncated` saying whether any were cut). A widget in state "loading" is still fetching and carries no rows yet.
successYesTrue when the call succeeded.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint and destructiveHint annotations, the description discloses substantial behavioral traits: the 'loading' state means a widget is still fetching with no rows, 'demo' and 'error' states are explained, row_cap truncation behavior is detailed, and datasource_type-specific reading rules are provided. It also explains chart type mapping and that 'chart' is present during fetch for placeholder rendering. This is rich, non-obvious context that materially improves correct usage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but every sentence earns its place for a complex tool. It is front-loaded with purpose, then logically segments selection criteria, return fields, state semantics, rendering guidance, and datasource-specific formatting. There is no filler or redundancy; the structure mirrors the mental model an agent needs to call and interpret the results correctly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 4 parameters, an output schema, and several state-dependent behaviors, the description is exceptionally complete. It covers what is returned (name, chart, state, metrics, totals, rows), how to interpret states, how rows are capped, how to read different datasource types, and formatting conventions. Nothing an agent needs to invoke or consume the output is left undocumented.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema: it explains the mutual exclusivity of widget_ids vs source_id, the practical implications of wait (up to 15s for fetches to land), the row_cap effect on truncation, and how each parameter influences the result shape. This elevates it above the baseline, though the schema already names the fields clearly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource ('Read the numbers behind data widgets') and a clear purpose ('for charting them'). It distinguishes itself from sibling tools like get_widget and list_widgets by focusing on the data values, not metadata, and clarifies the selection mechanism (widget_ids vs source_id). An agent can immediately tell what the tool does and how it differs from related calls.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit guidance on how to invoke the tool: 'Pass widget_ids for the widgets a call touched, or source_id for every data widget on a report.' It also states the context for waiting behavior and row caps. While it does not explicitly name alternative tools to avoid, the usage pattern and return semantics are clear enough that an agent knows when this is the right read operation versus list_widgets or get_widget. Minor gap: no explicit 'when not to use' statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

invite_userInvite team memberB
Destructive
Inspect

Invite a new user to join the account. admin has full account access; clients gives read+write to assigned clients; readonly is view-only on assigned clients.

ParametersJSON Schema
NameRequiredDescriptionDefault
roleYesRole to assign (admin, clients, or readonly)
emailYesEmail address to invite
clientsNoClient IDs the user can access, from list_clients (required for the "clients" and "readonly" roles)
fullnameYesFull name of the invitee
avatar_urlNoOptional starting avatar URL or path (e.g. a Media URL)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe invited user — id, email, fullname and role. They stay invite_pending until they accept the emailed invitation.
successYesTrue when the call succeeded.

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already carry destructiveHint=true and readOnlyHint=false, covering the mutation profile. The description adds access-level context (admin full access, clients read+write, readonly view-only) but does not disclose the invitation mechanism, such as whether an email is sent or whether the invitee must activate the account.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with the core purpose front-loaded and the role explanation immediately following. No filler or redundant restatement of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a rich output schema, annotations, and 100% schema coverage, the description has less burden. It adequately covers purpose and role semantics, but omits the invite lifecycle (email delivery, activation, revocation path via remove_user) which an agent might reasonably need.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, setting the baseline at 3. The description adds genuine value by defining what each role value means (full access, read+write to assigned clients, view-only) beyond the schema's bare enum listing. The clients parameter's conditional requirement is already well documented in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Invite a new user to join the account', clearly indicating the action and outcome. It does not explicitly contrast with sibling user tools like update_user, remove_user, or list_users, so it falls short of full differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives such as update_user, remove_user, or list_users. The role semantics (admin/clients/readonly) aid role selection within the tool, but provide no exclusions, prerequisites, or routing to sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_archiveList archived itemsB
Read-only
Inspect

List soft-deleted (archived) items across clients, reports, media, automations and templates.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (0-indexed)
limitNoResults per page
orderNoasc or desc
typesNoRestrict to these archive types (default: all)
searchNoFilter by name
sort_byNoSort field (default deleted_at)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoOne row per archived item — id, name, its archive type (clients, projects, media, automations, templates) and deleted_at. Pass the id and type to restore_from_archive.
metaNoPage, limit and total row count.
successYesTrue when the call succeeded.

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds the useful behavioral context that the items are soft-deleted rather than permanently removed, but it does not disclose other behavior such as whether all types are included by default or how filters interact.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no filler and front-loads the core action and scope. The main issue is that the type list is inaccurate, but structurally it is concise and readable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The output schema and annotations carry much of the burden, so the description does not need to explain return values or safety. It is incomplete because it under-lists the available archive types and includes an invalid one, so the agent could form a wrong mental model of the tool's scope despite having the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description actively misleads by enumerating types that partially conflict with the schema: it mentions 'reports' which is not in the types enum, and omits many valid types like projects, goals, assets, and custom_data. Rather than adding meaning, the description introduces incorrect parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource: it lists soft-deleted/archived items, which distinguishes it from the active list_* sibling tools. However, the type list it gives ('clients, reports, media, automations and templates') is inconsistent with the schema, which has no 'reports' type and includes many additional types, creating some ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'soft-deleted (archived)' implies this tool is for retrieving archived items rather than active ones, giving some usage context relative to sibling list tools. It does not explicitly say when not to use it or mention alternatives such as restore_from_archive, so guidance is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_assetsList saved sectionsB
Read-only
Inspect

List saved widget-section assets for the account (with optional filters).

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNoFilter to assets containing this tag.
pageNoPage number (0-indexed). Default 0.
typeNoFilter by asset type (e.g. "chart").
limitNoResults per page (1-100). Default 20.
searchNoFilter by name (case-insensitive contains).
sourceNo'mine' (your account), 'standard' (templates), or 'all'.
sort_byNoSort field (default "created_at").
sort_orderNo-1 for DESC (default), 1 for ASC.
datasourcesNoOverlap-filter on these datasource ids (from datasources).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoOne row per saved section — id, name, description, tags, the datasources its widgets use, and how many widgets it holds.
metaNoPage, limit and total row count.
successYesTrue when the call succeeded.

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered without description help. The description adds only the account-scoping fact, with no mention of pagination behavior, result caps, or ordering defaults — modest added value over the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler or repetition. It is efficient, though arguably too terse to be maximally useful given the nine-parameter surface.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a 100%-covered schema, rich annotations and an output schema, the definition is technically callable without further prose. It is still thin for a nine-parameter list tool: nothing clarifies how filters combine (AND/OR), how pagination interacts with sort, or how this differs from sibling list tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% across all 9 parameters, including enums for source and sort_by and explicit defaults for page, limit and sort_order, so the schema carries parameter meaning fully. The description contributes nothing parameter-specific beyond the generic phrase "optional filters", making 3 the correct baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ("List saved widget-section assets") with account scoping, which is clear enough for an agent to know what it returns. It does not differentiate itself from close siblings such as get_asset or list_asset_widgets, and the title's "sections" wording versus the description's "widget-section assets" introduces mild terminology drift.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The only usage signal is "(with optional filters)", which says nothing about when to choose this over get_asset (single fetch) or list_asset_widgets (widgets inside an asset). No prerequisites, no exclusions, no alternatives are named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_asset_widgetsList saved section widgetsA
Read-only
Inspect

List the widgets that belong to an asset (useful for previewing what add_asset_to_page will instantiate).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesAsset ID (from list_assets).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoOne row per widget in the section — id, name, type, chart, its datasource and query, and its size. This is what add_asset_to_page will instantiate.
metaNoPage, limit and total row count.
successYesTrue when the call succeeded.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds the semantic context that the returned list represents what add_asset_to_page will instantiate, which is useful. However, it does not disclose traits like ordering, pagination, or limits — though the output schema partially covers returns. With annotations carrying the safety burden, this is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with the core action front-loaded and a parenthetical purpose appended. There is zero filler, and the parenthetical earns its place by explaining the practical use case. Ideal size and structure for a one-parameter list tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with one documented parameter, annotations covering safety, and an output schema present, the description is nearly complete. The only minor gap is the lack of explicit routing to alternatives like list_widgets for an unscoped widget list, but the asset-scoping language and the add_asset_to_page tie-in make the intended usage unambiguous.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% — the single required parameter 'id' is already documented as 'Asset ID (from list_assets)', which tells the agent where to source the value. The description itself adds no parameter-level detail. Per the baseline rule for high schema coverage, a 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'List the widgets that belong to an asset.' The parenthetical 'useful for previewing what add_asset_to_page will instantiate' gives a clear purpose and implicitly differentiates this from siblings like list_widgets (all widgets) and list_template_widgets (template widgets). A single sentence fully disambiguates the tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool: when you want to preview what add_asset_to_page will instantiate. It does not explicitly name alternatives (e.g., list_widgets for a global list, get_widget for a single widget) or state when not to use it, but the usage context is sufficiently clear for an agent to select it correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_automationsList automationsA
Read-only
Inspect

List automations with optional filtering by report or client

ParametersJSON Schema
NameRequiredDescriptionDefault
client_idNoFilter by client ID (from list_clients)
report_idNoFilter by report ID (from list_reports)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoOne row per automation — id, name, the report it sends, frequency and send time with its timezone, recipients, the template and sender it uses, whether it is paused, and next_run_at.
metaNoPage, limit and total row count.
successYesTrue when the call succeeded.

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safe read-only nature is covered. The description adds the optional-filter behavior, but does not disclose other behavioral details such as default scope when no filters are provided or any response characteristics beyond what the output schema likely conveys.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence that states the core action and the only relevant nuance (optional filtering). There is no redundant restatement of the title or schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with zero required parameters, an output schema, and full schema coverage, the description plus annotations provide everything an agent needs to select and invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: both client_id and report_id are already documented as filters, with helpful provenance ('from list_clients', 'from list_reports'). The description reinforces that filtering is optional but adds little meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ('List automations') and immediately clarifies the optional filtering dimensions (report or client). This cleanly distinguishes it from related siblings like create_automation, update_automation, and get_automation_history.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes clear this is the listing operation for automations with optional filters, which is distinct from the many other list_* tools. It does not explicitly state when not to use it, but the scope is unambiguous and there is no competing list-automations sibling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_calculated_metricsList calculated metricsA
Read-only
Inspect

List calculated metrics for the account (custom KPI formulas).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoOne row per calculated metric — id, name, the formula tokens it is built from, and the symbol it renders as. Pass the id as a metric when adding a calculated-metric widget.
metaNoPage, limit and total row count.
successYesTrue when the call succeeded.

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows this is a safe read operation. The description adds the account scope and the custom-KPI-formula context, but it does not disclose any additional behavioral traits such as pagination, limits, or whether only non-archived metrics are returned. This is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence conveys the action, resource, scope, and semantic meaning with no redundant words. Every part earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a simple, parameterless read-only listing tool with an output schema present, so no return-value documentation is required. The description fully specifies what will be listed and for which scope, making it complete for invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the schema already covers everything needed. A baseline of 4 is appropriate; the description adds the contextual meaning of the result set ('custom KPI formulas') beyond the schema's empty property list.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List'), a clear resource ('calculated metrics for the account'), and a clarifying parenthetical ('custom KPI formulas') that disambiguates the concept from other KPI-like data. This is distinct from sibling list_* tools because it names the exact resource type.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear context ('for the account') but does not explicitly state when to use this tool versus alternatives or mention any exclusions. Usage is implied rather than instructed; an agent must infer that this is the right list operation based on the resource name, not on explicit guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_clientsList clientsB
Read-only
Inspect

List all clients with optional filtering and pagination

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (0-indexed)
limitNoResults per page
orderNoSort order: asc or desc
searchNoSearch by client name
sort_byNoField to sort by
folder_idNoFilter by folder ID (from list_folders)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoOne row per client — id, name, website, currency, timezone, logo_url, the folders it is filed under, and its connected datasources.
metaNoPage, limit and total row count.
successYesTrue when the call succeeded.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds the notion of 'optional filtering and pagination', which is a minor behavioral trait. It does not describe pagination defaults, result structure, or any side effects beyond what annotations imply. Adds some value but not rich context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, focused sentence that states the core purpose and key features. It is front-loaded and contains no filler. For a simple list operation, this length is appropriate.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and annotations covering safety, the description is largely sufficient. It covers the core operation, though it omits details like default pagination limits or how filtering interacts with search. These are minor gaps for a read-only list tool, making it adequate but not exhaustive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description merely echoes 'optional filtering and pagination' without adding parameter-specific meaning beyond the schema. No extra semantics provided for page, limit, order, search, sort_by, or folder_id.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'list' and the resource 'clients', with 'all clients' indicating scope. It distinguishes from get_client (singular) and count_clients (count) implicitly, but does not explicitly name alternatives. Clear but not strongly differentiated from siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives like get_client or count_clients. The description only states what it does, not when to choose it, nor does it mention exclusions or prerequisites. No context for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_custom_dataList custom datasetsA
Read-only
Inspect

List uploaded custom-data (CSV) datasets for the account — summaries without the row data.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoOne row per dataset — id, name, file_name, file_size, its column definitions and the row count. The rows themselves come from get_custom_data.
metaNoPage, limit and total row count.
successYesTrue when the call succeeded.

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already signal readOnlyHint=true and destructiveHint=false. The description adds useful scope ('for the account') and output-shape context ('summaries without the row data'), but does not disclose pagination, ordering, or any other behavioral traits. This is on par with a minimal read-only list tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence that immediately states the action, resource, scope, and output nature. Every phrase earns its place with no redundant filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only list operation with an output schema present, the description is sufficient: it names the resource, scope, and output form. The annotations cover safety, and no additional invocation details are needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero parameters, so the baseline is 4. The description adds clarity about what the list contains rather than parameter details, which is appropriate for a no-parameter tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb-plus-resource construction: 'List uploaded custom-data (CSV) datasets for the account.' It also clarifies the output type ('summaries without the row data'), which distinguishes it from get_custom_data and create_custom_data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: this is for listing account-level custom dataset summaries. It stops short of explicitly naming alternatives like get_custom_data for retrieving full row data, so it lacks an explicit exclusion or when-not-to-use statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_domainsList custom domainsA
Read-only
Inspect

List custom domains registered on the account, including DNS verification records

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoOne row per custom domain — id, domain, verification status, and the DNS records (type, name, value) the user has to add at their registrar.
metaNoPage, limit and total row count.
successYesTrue when the call succeeded.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safe-read nature is covered. The description adds useful context beyond annotations: the account-level scope ('registered on the account') and the inclusion of DNS verification records in the result, which helps the agent know what to expect. This is modest but real added behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one sentence, front-loaded with the action and resource, and every word earns its place. It is appropriately sized for a simple list operation and includes the key qualifier about DNS records without any fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 0-parameter, read-only list operation with an output schema present, the description completely covers the essential context: what is listed, the account scope, and the notable included detail (DNS verification records). Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool accepts no parameters, so there are no parameter semantics to add. With schema description coverage at 100% and an empty parameters object, the description's job regarding parameters is trivially satisfied; the baseline of 4 for a zero-parameter tool applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and resource ('custom domains registered on the account'), and adds a meaningful qualifier about DNS verification records. It clearly distinguishes itself from sibling tools like add_domain and remove_domain by focusing on read-only enumeration.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies its use whenever an agent needs to see the account's custom domains and their DNS records, but it provides no explicit guidance on when to choose this over alternatives or when not to use it. For a 0-parameter list tool with no competing list-domain sibling, this implied usage is acceptable but not explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_email_sendersList email sendersA
Read-only
Inspect

List configured "From" senders and the active provider.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe configured senders — each with its id, from_name, from_email, reply_to and whether it is the default — alongside the account's active email provider.
successYesTrue when the call succeeded.

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows this is safe. The description adds the 'active provider' detail, which is useful behavioral context beyond the title. However, it does not disclose the return shape or any ordering/filtering behavior, though for a simple list tool this is acceptable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, compact sentence that states the operation and its scope. Every word is functional, with 'configured' and 'active provider' adding real meaning rather than padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no parameters, an output schema present, and annotations covering the safety profile, the description is complete enough for an agent to call this tool correctly. There is no missing prerequisite, authentication note, or complex behavior that needs explanation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so parameter semantics are trivial. The baseline for a 0-parameter tool is 4, and the description does not need to explain anything further. It correctly avoids inventing parameter-like detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a precise verb+resource combination: 'List configured "From" senders and the active provider.' It is not a tautology of the title, and it adds the useful qualifier 'configured' and the extra 'active provider' element. This clearly separates it from sibling tools like list_email_templates.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly conveys what context this tool fits: retrieving the configured sender identities and provider state. It does not explicitly name alternatives or exclusions, but with zero parameters and a read-only purpose, the usage context is self-evident and no conflicting alternative exists among the sibling list tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_email_templatesList email templatesA
Read-only
Inspect

List reusable email templates.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoOne row per template — id, name, subject, the message body, its CTA button, and whether it is the account default.
metaNoPage, limit and total row count.
successYesTrue when the call succeeded.

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds the core listing behavior but no further context like ordering, pagination, or whether archived/inactive templates are included. For a zero-parameter list with an output schema, this is minimal but acceptable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single five-word sentence that immediately conveys the verb and the resource. There is no filler, repetition, or unnecessary detail, making it appropriately concise for a simple list operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, zero-parameter tool with an output schema, the description is nearly complete: it states the operation and resource, and the annotations cover safety. It is slightly sparse on how this tool relates to sibling tools like list_templates, but nothing critical is missing for invoking it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema contains zero properties, so there are no parameter semantics to clarify. The description provides no parameter details, but none are needed; this matches the baseline for zero-parameter tools.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the operation ('List') and the specific resource ('reusable email templates'), making the tool's purpose easy to identify. It does not explicitly distinguish itself from sibling tools like list_templates or list_email_senders, but the resource name is specific enough to avoid major confusion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The intended usage is only implied: an agent would use this when it needs to see available email templates. There is no explicit guidance about when to prefer this tool over alternatives such as list_templates or list_email_senders, but the zero-parameter, read-only nature makes selection reasonably straightforward.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_exportsList PDF exportsA
Read-only
Inspect

List PDF export history for a report (one row per generation attempt).

ParametersJSON Schema
NameRequiredDescriptionDefault
report_idYesReport to list exports for (from list_reports)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoOne row per generation attempt — id, report_id, status, the file url when it finished, and created_at.
metaNoPage, limit and total row count.
successYesTrue when the call succeeded.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context with 'one row per generation attempt', which clarifies that multiple rows can exist for the same report and that the output is history rather than a single status. Minor unspecified behaviors like ordering or inclusion of failed attempts are not disclosed, but the description adds meaningful value beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with the core action and resource front-loaded. 'One row per generation attempt' earns its place by preventing a common misconception that exports are deduplicated. There is no wasted prose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list operation with one parameter, a complete schema, and an output schema, the description is sufficiently complete. The combination of a clear scope, the per-attempt row semantics, and annotation-covered safety gives an agent everything needed to invoke the tool correctly. No significant contextual gap is evident.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the report_id parameter is already described as coming from list_reports, so the schema carries the parameter semantics. The description does not add additional parameter-level detail, which matches the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List') and a specific resource ('PDF export history for a report'), and clarifies that each generation attempt appears as its own row. This makes it clear how the tool differs from related siblings like generate_pdf or get_pdf_status, which create or check individual exports.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to use this tool versus alternatives such as generate_pdf, get_pdf_status, or archive_export. The only contextual hint is the parameter description's reference to list_reports, which suggests where the report_id comes from, but there is no explicit when-to-use or when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_foldersList client foldersA
Read-only
Inspect

List all client folders for the account

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoOne row per client folder — id and name.
metaNoPage, limit and total row count.
successYesTrue when the call succeeded.

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish this as a safe, read-only, closed-world operation with `readOnlyHint=true`, `openWorldHint=false`, and `destructiveHint=false`. The description adds only scope ('all ... for the account') and no additional behavioral traits, which is acceptable but not enriching.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler. Every word contributes to understanding the tool's purpose and scope.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only listing tool with an output schema and safety annotations, the description, annotations, and schema fully cover what an agent needs to select and invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and the schema coverage is 100%, so no parameter-level explanation is needed. The baseline of 4 applies because nothing is left undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List'), a clear resource ('client folders'), and an explicit scope ('for the account'). This cleanly distinguishes it from siblings like `list_clients` and `create_folder`, even without naming alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies when to use the tool: to retrieve the full set of client folders at the account level. It does not explicitly name alternatives or exclusions, but there is no competing 'list folders' sibling, so the context is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_goalsList goalsA
Read-only
Inspect

List goals for the account (targets tracked against a metric query).

ParametersJSON Schema
NameRequiredDescriptionDefault
client_idNoOnly goals bound to this client (from list_clients)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoOne row per goal — id, name, target_value, operator, goal_type, the metric query it measures, its symbol and the client it is bound to.
metaNoPage, limit and total row count.
successYesTrue when the call succeeded.

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds a useful semantic clarification of what goals are but does not disclose additional behavioral details such as ordering, pagination, or filtering behavior beyond the schema's parameter description.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, compact sentence that conveys the action, scope, and domain meaning without any redundant or filler content. The parenthetical earns its place by clarifying what a 'goal' is in this context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list operation with one optional parameter and an output schema, the description plus schema fully cover what an agent needs to know. The account scope and client filter are both represented, and the read-only annotations remove any uncertainty about side effects.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the client_id parameter is already fully documented with 'Only goals bound to this client (from list_clients)'. The description itself adds no extra parameter guidance, but the high schema coverage justifies the baseline score of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb ('List'), a specific resource ('goals'), and the account scope. The parenthetical 'targets tracked against a metric query' adds precise domain meaning, making it easy to distinguish from other list_* tools such as list_clients or list_calculated_metrics.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The usage context is implicit: the description says 'for the account' and the schema's client_id parameter says 'Only goals bound to this client (from list_clients)'. However, there is no explicit guidance about when to use list_goals versus related goal tools like create_goal, update_goal, or duplicate_goal, nor any mention of omitting client_id to list all account goals.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_mediaList media filesC
Read-only
Inspect

List media files

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number
limitNoResults per page
searchNoSearch term
folder_idNoFilter by folder ID — read one off the folder a row reports in an unfiltered list. Media folders are created and managed in the app.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoOne row per file — id, name, url, mime_type, size and the folder it sits in. The url is what you pass to branding, themes or an image widget.
metaNoPage, limit and total row count.
successYesTrue when the call succeeded.

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows this is a safe read operation. The description adds no additional behavioral context: it does not mention pagination behavior, default limits, ordering, or whether archived media files are included. It essentially restates the title without contributing new transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single short sentence with no wasted words, but it is under-specified for a tool with four optional filtering parameters and pagination. It is concise in length but not optimally sized because it omits useful context about filtering and pagination that would help an agent invoke it correctly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The output schema and read-only annotations cover return shape and safety, and the input schema documents all parameters. What is missing is usage guidance and any behavioral detail beyond the bare function; for a listing tool, this is minimally adequate but not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with page, limit, search, and folder_id each having a description in the input schema. The tool description itself adds no extra parameter meaning, so it does not elevate above the baseline established by the schema. The folder_id description in the schema is actually more informative than anything in the tool description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

Tautological: description restates name/title.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives, no prerequisites, and no exclusions. An agent must infer from the name that this is the tool for listing media files; there is no mention of when list_assets, search, or archive_media_file would be more appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_pagesList report pagesA
Read-only
Inspect

List the pages of a report or dashboard, ordered by position. For a template, use list_template_pages.

ParametersJSON Schema
NameRequiredDescriptionDefault
report_idYesReport or dashboard ID (from list_reports)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoOne row per page, in display order — page_id, name, position and visible. Pass page_id to list_widgets to read what is on it.
metaNoPage, limit and total row count.
successYesTrue when the call succeeded.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds useful behavioral context: pages are ordered by position and the tool applies to both reports and dashboards. It does not contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The core behavior is front-loaded, and the routing to the template sibling is a single efficient second sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter, read-only, output-schema-backed list operation, the description fully covers purpose, scope, ordering, and the key alternative. Nothing needed for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with report_id already described as 'Report or dashboard ID (from list_reports)'. The description reinforces the report/dashboard scope but does not add meaning beyond the schema, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states a specific verb and resource: list the pages of a report or dashboard, ordered by position. It differentiates from list_template_pages explicitly, so an agent can distinguish it from the closest sibling without inspecting schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description names the exact alternative for templates ('use list_template_pages'), providing clear when-not-to-use guidance. It also clarifies that the tool covers both reports and dashboards, leaving little to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_reportsList reports and dashboardsA
Read-only
Inspect

List reports and dashboards for the account, optionally filtered by client.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (0-indexed)
limitNoResults per page
client_idNoFilter by client ID (from list_clients)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoOne row per report — id, name, type (REPORT or DASHBOARD), the client it belongs to, its theme, date_range and share settings.
metaNoPage, limit and total row count.
successYesTrue when the call succeeded.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds the account scope and optional client filter but does not disclose behavioral details like pagination defaults, archived-item inclusion, or rate limits. This is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that front-loads the action and resource, then adds the optional filter. Every word contributes meaning; there is no filler or redundant phrasing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Since an output schema exists, return values need no explanation in the description. The account scope and optional client filter are stated, and pagination parameters are documented in the schema. Minor details like default page/limit values are absent but not essential for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and every parameter already has a meaningful description in the schema. The tool description only restates the optional client filter, which is already captured by client_id being optional. No additional parameter meaning is provided beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description uses a specific verb ('List') with a clear resource ('reports and dashboards for the account') and an optional filter by client. This clearly distinguishes it from the many list_* siblings by scope and resource type. Title and description are aligned.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool: when listing account-level reports and dashboards, optionally filtered by client. However, it provides no explicit guidance about alternatives like search, list_archive, or get_report, nor when not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_template_pagesList template pagesA
Read-only
Inspect

List the pages of a template, ordered by position.

ParametersJSON Schema
NameRequiredDescriptionDefault
template_idYesTemplate ID (from list_templates)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoOne row per page, in display order — page_id, name, position and visible. Pass page_id to list_template_widgets to read what is on it.
metaNoPage, limit and total row count.
successYesTrue when the call succeeded.

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=false, and destructiveHint=false, so the safety profile is covered without description effort. The description adds that results are ordered by position, which is useful, but it does not mention pagination, response shape, or whether full page content is included. This is acceptable but not rich behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one concise sentence with no filler. It front-loads the operation and resource, and the ordering detail earns its place by setting an expectation about the returned sequence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, single-parameter list operation with an output schema and safe annotations, the description is sufficient to call the tool correctly. Combined with the schema's template_id provenance, nothing important is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: the single template_id parameter is fully described, including its provenance ('from list_templates'). The tool description itself adds no parameter-level meaning beyond identifying the template whose pages are listed, so the schema carries the semantics and the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('List') and resource ('the pages of a template') and adds an ordering guarantee ('ordered by position'). This clearly distinguishes it from sibling tools like list_templates or list_template_widgets by scoping exactly which entities are returned.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'pages of a template' implies that this tool belongs with template workflows, and the schema's template_id reference to list_templates hints at the correct upstream call. However, the description does not explicitly state when to prefer list_template_pages over alternatives such as list_pages, nor does it mention when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_templatesList templatesB
Read-only
Inspect

List report templates with optional filtering and pagination

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (0-indexed)
typeNoFilter by report type — DASHBOARD (live) or REPORT (point-in-time)
limitNoResults per page
searchNoSearch by template name
sourceNoWhich library: 'all' (both merged), 'standard' (Oviond templates), or 'mine' (this account's saved templates)
sort_byNoField to sort by
sort_orderNoSort order: asc or desc
datasourcesNoFilter to templates built for any of these datasources (ids from datasources)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoOne row per template — id, name, description, type (REPORT or DASHBOARD), the datasources it is built for, and its thumbnail.
metaNoPage, limit and total row count.
successYesTrue when the call succeeded.

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds only that filtering and pagination are optional, but does not disclose return format, default filters, or any behavioral context beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, efficient sentence that front-loads the core action and concisely mentions optional filtering and pagination. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description need not explain return values. However, for a listing tool among many siblings, the description is minimally adequate: it does not mention default behavior (e.g., what happens if no filters are applied) or how results relate to other template tools, leaving some context gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already fully documents all 8 parameters. The description does not add any parameter-specific meaning or defaults, so it meets the baseline of 3 when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource: 'List report templates'. It is clear what the tool does, though it does not explicitly distinguish itself from siblings like get_template, list_template_pages, or list_template_widgets.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives, nor any exclusions or prerequisites. The agent must infer that this is the entry point for discovering templates before using get_template or create_report_from_template.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_template_widgetsList template widgetsA
Read-only
Inspect

List the widgets that belong to a template (optionally filtered to a single page).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesTemplate ID (from list_templates).
page_idNoFilter to widgets on a single page, id from list_template_pages.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoOne row per widget in the template — id, name, type, chart, its datasource and query, and its position on the page.
metaNoPage, limit and total row count.
successYesTrue when the call succeeded.

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this a read-only, non-destructive operation, so the description does not need to repeat that. It adds minimal behavioral context beyond the schema—just the template and page scoping—and no hidden side effects are disclosed or implied.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence states the core action and the optional refinement with no filler. Every part earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list operation with an output schema, full parameter documentation, and safety annotations, the description provides enough context for an agent to invoke it correctly. No critical behavioral or prerequisite information is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for both id and page_id, so the schema carries the parameter documentation burden. The description's mention of optional page filtering adds no new semantic detail beyond what the schema already states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the specific resource (widgets belonging to a template) and the operation (list), with an optional page filter. This clearly distinguishes it from related siblings like list_widgets and list_asset_widgets based on scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the intended use obvious: retrieve widgets scoped to a template, optionally narrowed to a page. It does not explicitly name alternative tools or state when not to use it, but the template-scoped wording gives clear contextual guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_themesList themesA
Read-only
Inspect

List all themes available to the account (own + shared)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoOne row per theme — id, name, its complete tokens map, the cover_page and thank_you_page config, and whether it is the account default.
metaNoPage, limit and total row count.
successYesTrue when the call succeeded.

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true, openWorldHint=false, and destructiveHint=false. The description adds the ownership scoping detail 'own + shared', which is useful, but it does not disclose anything further such as auth needs, pagination, or result behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence communicates the operation, resource, and scope without filler. Every word contributes meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless read-only list operation with an output schema present, the description covers what is needed: the operation, the resource, and the scope. Nothing material is missing for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With zero parameters, the schema has nothing to document and the description is not required to explain parameters. The description still usefully clarifies the result scope, so the baseline 4 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List'), a concrete resource ('all themes available to the account'), and adds the important scope detail '(own + shared)'. This cleanly distinguishes it from singular get_theme and from other list_* siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The scope '(own + shared)' implies when this tool is appropriate, but there is no explicit guidance about when to prefer it over alternatives such as get_theme or list_assets. Usage context is clear enough for a straightforward list operation, but no exclusions or alternative routing are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_usersList team membersA
Read-only
Inspect

List all team members on the account

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (0-indexed)
limitNoResults per page

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoOne row per team member — id, email, fullname, role, avatar_url, the clients they can reach, and invite_pending while they have not accepted yet.
metaNoPage, limit and total row count.
successYesTrue when the call succeeded.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds the account-scoping detail, but it does not disclose pagination behavior, result ordering, or whether the list includes only active users. The openWorldHint=false annotation aligns with the 'on the account' scoping.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that states precisely what the tool does. There is no redundant wording or repetition of the title or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list operation with annotations, a documented input schema, and an output schema, the description is nearly sufficient. It could be improved by mentioning that results are paginated and perhaps that all users are returned regardless of status, but nothing essential is missing for correctly invoking the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the page and limit parameters are already documented. The description does not add details about defaults or pagination semantics, but it also does not need to because the schema covers the parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and resource ('team members') with a clear scope ('on the account'). It distinguishes the tool from related user-management siblings like invite_user, update_user, remove_user, and get_current_user by focusing on the listing action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided about when to use this tool instead of alternatives such as list_clients or get_current_user. There is no mention of prerequisites, whether to prefer pagination, or what distinguishes team members from other entities.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_widgetsList widgetsA
Read-only
Inspect

List all widgets on a report or dashboard. For a template, use list_template_widgets.

ParametersJSON Schema
NameRequiredDescriptionDefault
page_idNoFilter by page ID (from list_pages).
report_idYesReport or dashboard ID (from list_reports).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoOne row per widget — id, name, type, chart, its datasource and query, its state, and its position on the page. Read the numbers themselves with get_widget_data.
metaNoPage, limit and total row count.
successYesTrue when the call succeeded.

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered without description effort. The description adds only the report/dashboard scope context, which is useful but does not disclose additional behavior such as pagination or ordering. With annotations present, this is acceptable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the action and scope, with no filler or redundant wording. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read-only list operation with a full output schema and safety annotations, the description is complete. It also closes the main alternative ambiguity by pointing to list_template_widgets.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both report_id and page_id already described in the input schema. The description adds minimal parameter meaning beyond confirming the report/dashboard scope, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states a specific verb and resource: 'List all widgets on a report or dashboard.' It also explicitly distinguishes from the sibling list_template_widgets, so an agent can tell them apart immediately.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear when-to-use signal for reports/dashboards and explicitly names the alternative for templates: 'For a template, use list_template_widgets.' This leaves no ambiguity about which sibling to select.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

move_client_to_folderMove client to folderBInspect

Move a client to one or more folders

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesClient ID (from list_clients)
foldersYesTarget folder IDs (from list_folders)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe client with its folder list replaced by the one you sent.
successYesTrue when the call succeeded.

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is not read-only and not destructive, but the description adds no behavioral context beyond that. It does not state whether existing folder assignments are replaced or added to, whether the operation is reversible, or whether moving has side effects on reports, assets, or permissions. 'One or more folders' is a minor addition but does not meaningfully disclose behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no filler or redundant phrasing. It front-loads the action and keeps the key detail—'one or more folders'—prominent. It is appropriately sized for a simple two-parameter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple, has full schema coverage for parameters, and includes annotations and an output schema, so the description does not need to explain return values. However, the core semantics of 'move' are ambiguous: it does not specify whether the client is removed from all current folders and placed only in the listed ones, or whether the listed folders are appended. For a move operation, this is a meaningful gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and both parameters already have clear descriptions including source hints ('from list_clients' and 'from list_folders'). The tool description itself adds no parameter information, so the baseline 3 is appropriate. The description does not clarify whether the folders array is a complete replacement list or an additive set.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb-resource pair: 'Move a client to one or more folders.' It clearly distinguishes this from sibling tools like move_widget or update_client, and the phrase 'one or more folders' adds precise scope. It is not a tautology despite resembling the title, because it expands the title with the multi-folder capability.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus alternatives such as update_client, create_folder, or move_widget. There is no mention of prerequisites, use cases, or exclusions. The only implied context is that the tool is for reassigning clients to folders.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

move_widgetMove widgetAInspect

Move or resize a widget. Works for any widget type. Pass only the dimensions you want to change.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoNew x position (grid column 0-11).
yNoNew y position (grid row).
widthNoNew width in grid columns.
heightNoNew height in grid rows.
widget_idYesWidget ID (from list_widgets).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe widget, at its new position and size, as saved, with the update applied.
successYesTrue when the call succeeded.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false and destructiveHint=false, so the mutating yet non-destructive nature is already structured. The description adds valuable behavioral context: it works for any widget type and that omitted dimensions are left unchanged (partial updates), which annotations do not convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the primary action, and no filler. Every clause adds relevant guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple mutation tool with full schema coverage and an output schema, the description covers purpose, scope, and partial-update behavior. It does not mention error handling or exact return, but those are adequately covered by the schema and output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and each parameter has a description. The description adds semantic value beyond the schema by stating 'Pass only the dimensions you want to change,' which clarifies that optional parameters are not all required but selectively applied.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Move or resize a widget'), scopes it with 'Works for any widget type', and implies a partial-update behavior via 'Pass only the dimensions you want to change.' This clearly distinguishes it from sibling update_*_widget tools that modify content.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It conveys when to use the tool (repositioning/resizing an existing widget regardless of type) and how to use it ('Pass only the dimensions you want to change'). It does not explicitly name alternatives or provide when-not-to-use guidance, but the context is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pause_automationPause automationAInspect

Pause an automation. It keeps its schedule and recipients but sends nothing until it is unpaused.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesAutomation ID (from list_automations)
parent_idYesParent report or client ID (from list_reports or list_clients)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe automation, now paused — it keeps its schedule but sends nothing until it is resumed.
successYesTrue when the call succeeded.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (non-read-only, non-destructive), the description adds meaningful state semantics: the automation retains its schedule and recipients while producing no sends, and it can be resumed. This explains what 'non-destructive' means in practice for this tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with the core action front-loaded and the key consequence right after. There is no wasted text, and the description is appropriately sized for the tool's simplicity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple state-change tool, the description, full parameter schema, annotations, and output schema together cover what the tool does, what it preserves, and the expected result. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with both id and parent_id already described in the input schema. The description adds no parameter-level detail, which is acceptable because the schema carries the full burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the specific operation, 'Pause an automation,' and clarifies the behavioral scope: it keeps schedule and recipients but sends nothing until unpaused. This clearly distinguishes pause from related siblings like archive_automation, update_automation, and unpause_automation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use the tool: to suspend sending temporarily without losing configuration, and it implies unpausing as the reversal. It does not explicitly list exclusion conditions or name alternatives, so it falls short of a fully explicit usage guide.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

preview_reportPreview reportA
Read-only
Inspect

Show a report as the client sees it — the live page, rendered in the conversation. Use this after building or changing one, and to check layout: overlapping widgets, spacing, cut-off headings and branding are only visible here, not in list_widgets.

ParametersJSON Schema
NameRequiredDescriptionDefault
report_idYesReport ID (from list_reports)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe report and its `preview_url` — the live shareable page, which the preview renders. When the report has no share link yet, `message` says so instead.
successYesTrue when the call succeeded.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context beyond annotations: the tool renders the live page in the conversation and shows client-facing layout aspects. Minor gaps remain around whether the preview is real-time or could be stale, but the added rendering context is meaningful.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero wasted words. The core function is front-loaded in sentence one, and sentence two earns its place by providing usage timing, concrete layout-check examples, and the distinguishing comparison to list_widgets.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one required parameter, full schema coverage, output schema present, safety annotations provided), the description is complete. It tells the agent what the tool does, when to reach for it, and what visual details it uniquely surfaces — nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% — report_id is documented with its type and source ('Report ID (from list_reports)'). The description itself does not add parameter-level meaning, but under high schema coverage the baseline of 3 applies and the schema carries the burden adequately.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Show a report as the client sees it'), a specific resource (report), and a distinctive scope (live page rendered in the conversation). It clearly differentiates from sibling tools like list_widgets and get_report by emphasizing the client-facing visual rendering.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit when-to-use guidance: 'Use this after building or changing one, and to check layout.' It also names the alternative (list_widgets) and explains why layout issues like overlapping widgets, spacing, cut-off headings, and branding are only visible here, giving a concrete when-not-to-use boundary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

query_dataQuery live metric dataA
Read-only
Inspect

Pull live metric values from a client's connected datasource for any date range, without touching a report. Nothing is saved — use this for ad-hoc analysis and period comparisons. To read the numbers a report already holds, use get_widget_data instead. Discover ids with datasources → describe_datasource; a metric is only valid inside its own data view. The datasource must be linked to the client (connected_datasources) — an unlinked one has nothing to return.

ParametersJSON Schema
NameRequiredDescriptionDefault
filtersNoRow filters
metricsYesMetric ids (from describe_datasource), e.g. ["sessions","clicks"]
advancedNoDatasource-specific settings — describe_datasource lists the keys each view requires
timezoneNoIANA timezone the dates are read in. Defaults to UTC
client_idYesClient whose connection to query (from list_clients)
data_viewYesData view the metrics belong to (from describe_datasource), e.g. ACCOUNT
date_rangeYesPeriod to query. Add previous_start/previous_end to get the comparison period back in the same call
dimensionsYesBreakdown dimension ids, at least one — ["DATE"] for a time series; the period total comes back in the summary either way
datasource_idYesDatasource alias (from datasources), e.g. ga4, gadw, fb-ads

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe query result — `current` rows and `currentSummary` totals for the period, the matching `previous` pair when a comparison range was given, and `state`. Values are raw numbers, unformatted.
successYesTrue when the call succeeded.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and destructiveHint=false, so safety is covered; the description adds non-obvious behavior beyond that — 'nothing is saved', the requirement that the datasource be linked to the client, and the constraint that a metric is only valid inside its own data view. It does not mention rate limits or pagination, which would push it higher.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight sentences, front-loaded with the core action and immediately followed by the sibling disambiguation and prerequisite. Every sentence earns its place; density of navigation references is the only minor cost.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex 9-parameter tool with an output schema present, the description supplies the routing, prerequisites, persistence semantics, and id-discovery workflow an agent needs. Return values are covered by the output schema, so no gap remains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so parameters are documented structurally (e.g. date_range comparison fields, describe_datasource for operator ids). The description reinforces a few constraints (metric/data_view validity, comparison periods) but adds little beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Pull live metric values from a client's connected datasource') with explicit scope ('for any date range, without touching a report'). It names the sibling it is not (get_widget_data) so an agent can distinguish it without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use ('ad-hoc analysis and period comparisons'), names the alternative tool and the condition selecting it ('to read the numbers a report already holds, use get_widget_data'), and states prerequisites (linked datasource via connected_datasources). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

refresh_account_faviconRefresh account faviconAInspect

Re-derive the account's favicon from its website, cache-bust it, save it and return the new URL. Requires a website on the account (set it with update_company).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe branding after the refresh, carrying the new favicon_url.
successYesTrue when the call succeeded.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses that the tool performs a write operation (saves the favicon) and returns a new URL, which is beyond what the annotations provide (readOnlyHint=false, destructiveHint=false). It also mentions cache-busting, a behavioral detail not evident from the schema or annotations. The description does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that front-loads the primary action and outcome, then adds the prerequisite. Every word earns its place, and the structure is easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no parameters and an output schema exists, the description is largely complete. It explains the action, the prerequisite, and the return value. The only minor gap is that it doesn't explicitly state what happens if the account has no website, but the prerequisite mention implies the failure condition. Overall, it is sufficient for an agent to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the schema provides no parameter semantics. The description compensates by explaining what the tool does and what it returns, making it clear that no input is needed beyond the account context. Since there are no parameters to document, the description adequately covers the semantic gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Re-derive the account's favicon from its website, cache-bust it, save it and return the new URL') and identifies the specific resource (account favicon). It also distinguishes itself from related operations by noting the prerequisite of a website on the account, which helps differentiate it from similar refresh tools like refresh_client_favicon.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context on when to use the tool: when the account has a website and the favicon needs to be re-derived. It also mentions the prerequisite (set website with update_company), which is useful guidance. However, it does not explicitly state when not to use it or name alternatives like refresh_client_favicon, so it falls slightly short of full usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

refresh_client_faviconRefresh client faviconAInspect

Re-derive a client's square favicon from its stored website (Google favicon service), cache-bust it, save it, and return the new favicon URL. Requires the client to have a website configured.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesClient ID (from list_clients)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe client carrying the newly derived favicon_url.
successYesTrue when the call succeeded.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=false and destructiveHint=false, so the description doesn't need to restate mutation. The description adds valuable behavioral context: it re-derives from an external service (Google favicon service), cache-busts, saves, and returns the new URL. It also discloses the prerequisite. This goes beyond the annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler. The first sentence front-loads the action and outcome; the second states the prerequisite. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with an output schema present, the description covers the action, the external dependency, the prerequisite, and the return value. It doesn't mention failure modes (e.g., what happens if the website is unreachable), but the output schema and annotations cover the rest. This is complete enough for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%: the only parameter 'id' is described as 'Client ID (from list_clients)'. The description adds the context that this ID must reference a client with a website configured, which is useful. Baseline 3 is appropriate since the schema already fully documents the parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('re-derive'), the resource ('client's square favicon'), the source ('stored website via Google favicon service'), and the action sequence (cache-bust, save, return URL). It clearly distinguishes from siblings like refresh_account_favicon and refresh_client_screenshot by naming the exact resource and mechanism.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states a clear prerequisite: 'Requires the client to have a website configured.' This tells the agent when the tool is applicable. It doesn't explicitly name alternatives or exclusions, but the prerequisite plus the distinctive resource (client favicon) provides adequate usage context among the large sibling list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

refresh_client_screenshotRefresh client screenshotAInspect

Re-take the screenshot of a client's website and save it, returning the new URL. The screenshot is generated server-side from the stored website, so the client needs one configured. Use this when the site has changed and the card looks stale.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesClient ID (from list_clients)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe client carrying the freshly taken screenshot URL.
successYesTrue when the call succeeded.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already signal that the tool is not read-only and not destructive. The description adds useful behavioral context: the screenshot is generated server-side from the stored website, the client needs one configured, and the new URL is returned. There is no contradiction with the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences front-load the core action and return value, then add context and the usage trigger. Every sentence earns its place with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter mutation with an output schema, the description covers purpose, prerequisites, usage timing, and return value. An agent has what it needs to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the only parameter is clearly documented as 'Client ID (from list_clients)'. The description adds no parameter-specific semantics, so it sits at the baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb ('Re-take') and resource ('screenshot of a client's website'), and states the return value (the new URL). This makes it immediately distinguishable from sibling refresh tools like refresh_client_favicon or refresh_report.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit trigger condition: use this when the site has changed and the card looks stale. It also notes a prerequisite (the client must have a configured website). It does not mention sibling alternatives or explicit when-not-to-use scenarios, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

refresh_reportRefresh report widgetsA
Idempotent
Inspect

Re-fetch every data widget on a report with its current config and the report date range, saving the results. Pass datasource_id to refresh only the widgets fed by one datasource — what you do after linking or unlinking it. Returns immediately; the fetches run in the background — call get_widget_data with source_id set to this report to read the numbers as they land.

ParametersJSON Schema
NameRequiredDescriptionDefault
report_idYesReport ID (from list_reports)
datasource_idNoOnly widgets fed by this datasource (id from datasources)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoAcknowledgement that the refresh was accepted. The fetches run in the background — read the numbers with get_widget_data as they land.
successYesTrue when the call succeeded.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false and idempotentHint=true, and the description adds critical behavior the annotations cannot: the call returns immediately, fetches run in the background, and results are read later via get_widget_data. This async pattern is exactly the kind of disclosure descriptions must provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the primary action and immediately followed by the optional scoping parameter and the async follow-up. Every sentence earns its place; the em-dash works. Only a very slight compression opportunity remains in the first sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with one required param, one enum param, an output schema, and annotations, the description covers the missing pieces: scope (entire report vs one datasource), async semantics, and the hand-off to get_widget_data. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and datasource_id has an enum of ~90 values with descriptions, so the baseline is 3. The description adds meaning beyond the schema by explaining the datasource_id filter's intent ('only the widgets fed by one datasource') and its workflow context (post link/unlink).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('re-fetch') and resource scope ('every data widget on a report'), and distinguishes scope from the sibling refresh_widgets by operating at report granularity. An agent can tell it apart from refresh_widgets without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly defines when to pass datasource_id ('what you do after linking or unlinking it'), and states the follow-up read step ('call get_widget_data with source_id set to this report'). Both the trigger and the next action are named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

refresh_widgetsRefresh widgetsA
Idempotent
Inspect

Re-fetch specific widgets with their saved config and save the results. Configuring a widget with update_data_widget already refreshes it, so this is for re-reading without a config change. Returns immediately; the fetch runs in the background — call get_widget_data with the same widget_ids to read the numbers as they land. To refresh a whole report, use refresh_report.

ParametersJSON Schema
NameRequiredDescriptionDefault
timezoneNoIANA timezone the dates are read in. Defaults to the client's own timezone
client_idNoClient the widgets belong to (from list_clients). Read from the widgets when omitted.
date_rangeNoExplicit range to fetch against. Defaults to each widget's own range, or its report's.
widget_idsYesWidgets to refresh (ids from list_widgets)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoAcknowledgement that the refresh was accepted. The fetches run in the background — read the numbers with get_widget_data using the same widget_ids.
successYesTrue when the call succeeded.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses the critical async behavior — 'Returns immediately; the fetch runs in the background' — and tells the caller how to observe the results. This adds value beyond the annotations by explaining the timing and side effects of the operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, all densely informative: purpose, contrast with update_data_widget, async behavior and follow-up call, and sibling alternative refresh_report. No filler, no repetition of schema content, and the key purpose is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers purpose, usage boundaries, async behavior, how to read results, and the sibling for whole-report refresh. With annotations and an output schema present, nothing essential is missing for an agent to invoke and follow up correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all parameters are already documented in the schema. The description adds contextual framing around widget_ids and saved config but does not materially extend the parameter semantics, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Re-fetch specific widgets with their saved config and save the results'), and explicitly contrasts itself with update_data_widget and refresh_report, making the tool's identity unmistakable among its many siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit when-to-use guidance: use when re-reading without a config change, since update_data_widget already refreshes on config. It also directs the agent to refresh_report for whole reports and to get_widget_data for reading results, leaving no ambiguity about when to select this tool versus alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_account_faviconRemove account faviconA
Destructive
Inspect

Remove the account's square logo (favicon). It falls back to the default Oviond branding.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe branding with favicon_url cleared.
successYesTrue when the call succeeded.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare destructiveHint=true, so the destructive nature is covered. The description adds meaningful post-condition context with 'It falls back to the default Oviond branding,' which tells the agent what happens after the removal. This goes beyond the structured annotation data without contradicting it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences with no redundant wording. The primary action is front-loaded, and the fallback behavior is delivered in a tightly scoped second sentence that earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter destructive operation with an output schema and annotations already marking it destructive, the description is complete. It states the target, the action, and the resulting fallback state, so an agent has enough context to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the input schema carries no semantic burden. The description still clarifies the scope ('the account's') and the target object ('square logo/favicon'), which is sufficient. Baseline 4 applies since there are no parameters requiring documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Remove') and a specific resource ('the account's square logo (favicon)'), clarifying exactly what is affected. It also adds the fallback behavior ('default Oviond branding'), which helps distinguish this account-level favicon removal from sibling tools like remove_client_favicon and remove_account_logo.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains what the tool does but provides no explicit guidance on when to choose it over alternatives such as remove_account_logo, remove_client_favicon, or refresh_account_favicon. No conditions, exclusions, or redirects to sibling tools are given, leaving selection to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_client_faviconRemove client faviconA
Destructive
Inspect

Remove a client's square logo/favicon (favicon_url). It falls back to the agency branding.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesClient ID (from list_clients)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe client with favicon_url cleared.
successYesTrue when the call succeeded.

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, and the description adds useful behavioral context by specifying that favicon_url is removed and that branding falls back to the agency's. This goes beyond what the annotations alone provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no filler. The action and the key post-removal behavior are both communicated efficiently and the description is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter destructive tool with annotations and an output schema, the description conveys the target and the post-condition clearly. It does not discuss irreversibility or permissions, but destructiveHint already signals the risk profile.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter is fully documented in the schema as 'Client ID (from list_clients)', so schema coverage is 100%. The description does not add further parameter-level detail, which is acceptable at the baseline for full coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (remove) and resource (client favicon/favicon_url) and adds the fallback behavior. It is clear enough to be distinguished from account-level favicon removal, though it does not explicitly contrast with remove_client_logo.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus remove_client_logo, remove_account_favicon, or refresh_client_favicon. The intended use is implied by the name and description, but no conditions, exclusions, or alternatives are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_domainRemove custom domainA
Destructive
Inspect

Remove a custom domain by its ID

ParametersJSON Schema
NameRequiredDescriptionDefault
domain_idYesDomain ID to remove (from list_domains)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoConfirmation that the domain was removed — shared links stop resolving on it.
successYesTrue when the call succeeded.

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The destructiveHint annotation already signals mutating/destructive behavior, and the description's 'Remove' is consistent with that. The description adds no further behavioral detail such as irreversibility, impact on domain usage, or auth/rate-limit considerations, but because the annotations already carry the safety profile, this is acceptable but not enriched.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Exactly one short, front-loaded sentence that conveys the action and the needed input with no filler. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a simple one-parameter tool with a destructiveHint annotation, a 100% covered schema, a referenced source for the ID, and an output schema. Nothing essential is missing; the description plus structured metadata fully specifies the call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: domain_id is fully defined and its source (list_domains) is documented in the schema. The description's 'by its ID' repeats that idea but adds no new meaning beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Remove') and a specific resource ('custom domain') and adds the required identifier ('by its ID'), so an agent can distinguish it from add_domain and list_domains. It is not merely a restatement of the title.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The intended use is implied: to delete a custom domain, pass its ID; the parameter description's reference to list_domains suggests the prerequisite workflow. However, the description itself gives no explicit when-to-use/when-not-to-use guidance or alternatives, so the agent must infer the context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_userRemove team memberA
Destructive
Inspect

Remove a team member from the account

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesUser ID to remove (from list_users)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoConfirmation that the user was removed and can no longer sign in.
successYesTrue when the call succeeded.

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The destructiveHint annotation already communicates that this is a destructive action, and the description clarifies that the removal is from the account, which is useful scope. However, the description does not add details such as irreversibility, permission requirements, or effects on the removed user's owned resources; the annotation lowers the burden, but some behavioral context is still missing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one short, focused sentence with no filler. It front-loads the action and resource, and every word earns its place for such a simple tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the low complexity, the presence of an output schema, and the destructiveHint annotation, the definition is largely complete for an agent to invoke safely. It could improve by noting permanence or post-removal consequences, but the essential information is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 100% coverage for the single parameter, and the description adds practical meaning by noting that the ID comes from list_users. This helps an agent know where to source a valid value, going beyond the schema's type-only definition.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Remove') and a specific resource ('a team member from the account'), which makes the tool's purpose immediately clear. It distinguishes itself from other remove_* siblings by targeting team membership, though it does not explicitly contrast with related user tools like update_user or invite_user.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage: when a team member should no longer be part of the account. The parameter hint '(from list_users)' provides some operational guidance, but there are no explicit alternatives, exclusions, or conditions that would help an agent decide between this and related user management tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rename_connectionRename connected datasourceBInspect

Rename a datasource connection

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesNew name
connection_idYesConnection ID (from connected_datasources)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoConfirmation of the rename. Client links follow the connection, so nothing is unlinked by it.
successYesTrue when the call succeeded.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=false and destructiveHint=false, meaning this is a non-read, non-destructive mutation. The description simply says 'Rename a datasource connection' and adds no behavioral context beyond the annotations, such as whether the rename affects linked reports, whether it requires permissions, or what the response contains. It does not contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single declarative sentence, which is appropriately concise. It is front-loaded with the action and resource. It earns its place by providing a direct statement, though it could arguably add a bit more usage context without becoming bloated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter rename tool, the description plus schema and annotations are mostly sufficient. However, the description does not clarify the tool's effect on dependent resources or whether the operation is reversible, and with no explicit usage guidelines, an agent might not know the correct workflow (e.g., retrieving connection_id from connected_datasources first, though the schema hints at it). An output schema exists but is not shown, so return behavior is unknown.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers 100% of the parameters with descriptions: 'name' is 'New name' and 'connection_id' is 'Connection ID (from connected_datasources)'. The description adds no additional meaning beyond the schema. The hint that connection_id comes from connected_datasources is already in the schema, so the description is redundant.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb and resource: 'Rename a datasource connection'. It distinguishes itself from siblings like delete_connection, test_connection, and create_connection because 'rename' is specific and the title reinforces the resource. However, it does not explicitly differentiate from other rename/update tools beyond the resource name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is used to change the name of an existing datasource connection, and the schema requires connection_id and name. It does not explicitly state when to prefer this tool over alternatives, nor does it mention prerequisites like using connected_datasources to obtain the connection_id. Sibling tools like test_connection and delete_connection are contextually distinct, but the description offers no direct comparison.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rename_media_fileRename media fileCInspect

Rename a media file

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMedia file ID (from list_media)
nameYesNew file name

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe file as saved — id, name and url. The url does not change.
successYesTrue when the call succeeded.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate a mutating (readOnlyHint=false) but non-destructive (destructiveHint=false) operation. The description adds no behavioral context beyond that, such as whether existing names must be unique, whether references to the old name are updated, or whether the operation is reversible.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with no filler. It is appropriately sized for a simple tool, though it is almost identical to the title and could have included a touch more actionable detail without bloating.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity operation with a full input schema, output schema, and annotations, the description is minimally sufficient to invoke correctly. However, it leaves gaps around when to use it and what behavioral side effects to expect, so an agent may not handle edge cases properly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both parameters documented well: id references list_media for provenance and name describes the new file name. The description itself adds nothing beyond the schema, but the schema fully carries the semantic load.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Rename a media file'. It is clearly distinguishable from sibling operations like archive_media_file or update_* tools, though it does not explicitly contrast itself with them. The purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given for when to use this tool versus alternatives such as archive_media_file, update_media_file variants, or rename_connection. An agent must infer the appropriate context from the name alone, with no exclusions or decision rules.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

restore_from_archiveRestore archived itemAInspect

Restore archived items of one type back to active.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYesIDs to restore (from list_archive)
typeYesWhich entity kind these ids are

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoConfirmation that the named items are active again.
successYesTrue when the call succeeded.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds the state transition 'back to active' and the single-type constraint, which is useful. Annotations already declare readOnlyHint=false and destructiveHint=false, so the safety profile is covered; no additional behavioral detail such as idempotency or partial failure handling is provided.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no filler. Every word earns its place, and the core action and scope are immediately clear.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter tool with a fully documented schema, an output schema, and safety annotations, the description is nearly complete. It could be slightly richer by explicitly noting that this reverses an archive operation, but nothing required to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema fully documents ids and type, including the enum values. The description's 'of one type' reinforces the type parameter but adds no meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Restore') and resource ('archived items of one type'), and specifies the outcome ('back to active'). This clearly differentiates it from the many archive_* sibling tools, which perform the opposite operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: use this when archived items of a single type should become active again. However, it does not explicitly state when not to use it or name any alternative tool, leaving the agent to infer the inverse relationship with archive_* tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_default_email_senderSet default email senderBInspect

Make a sender the account default.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSender ID (from list_email_senders)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe sender, now the account default — every send that names no sender_id uses it.
successYesTrue when the call succeeded.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false and destructiveHint=false, which is consistent with the description's implied mutation without destructive impact. The description adds no extra behavioral details beyond the annotations, but it doesn't contradict them either. Given the annotations carry the safety profile, a neutral score is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence with zero filler. It front-loads the action and outcome efficiently, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter operation with an output schema and annotations, the description is sufficient. It clearly states the intent. While it could elaborate on the effect of setting a default (e.g., influencing future email sends), the low complexity and available schema/annotations keep the bar low, and nothing essential is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%—the only parameter, 'id', is described as 'Sender ID (from list_email_senders)'. The description itself adds no extra meaning beyond the schema, so it meets the baseline without exceeding it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear action: 'Make a sender the account default.' It identifies the resource (sender) and the outcome (default for account). While it doesn't explicitly contrast with set_default_email_template, the distinct resource type is evident, and the verb is specific enough to separate from sibling operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. It doesn't mention that the sender ID must come from list_email_senders (though the schema hints at this) or that the default affects future email sends. There is no mention of prerequisites or exclusions, leaving the agent to infer context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_default_email_templateSet default email templateAInspect

Make an email template the account default.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesTemplate ID (from list_email_templates)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe template, now the account default.
successYesTrue when the call succeeded.

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are present: readOnlyHint=false, destructiveHint=false, indicating a non-destructive write operation. The description 'make an email template the account default' implies a change of state, which aligns with annotations. It adds no behavioral details beyond that, such as whether the previous default is replaced or if any permissions are needed, but given annotations cover basic safety, a mid score is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that is concise and to the point. It communicates the essential action without any fluff, which is ideal for a simple tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With only one parameter and an output schema present, the description doesn't need to explain return values. It covers the action and scope. The only minor omission is explicit mention of when to use it (e.g., when wanting to change the default), but that is implied. For a simple tool, it is adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the parameter 'id' is well described as 'Template ID (from list_email_templates)', which is sufficient. The description doesn't add more, but with full schema coverage, a baseline of 3 applies. It earns a 4 because the schema description provides a clear reference for obtaining valid IDs, which is semantically rich.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('set default') on a specific resource ('email template') with scope ('account default'). It is distinct from siblings like set_default_email_sender and list_email_templates, though it doesn't explicitly differentiate them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use it: to set a default template for the account, but it doesn't explicitly mention alternatives or when not to use it. The sibling list includes set_default_email_sender, which might be confused, but the description clearly focuses on template, so usage context is fairly clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

test_automationSend automation test emailA
Destructive
Inspect

Send a test email for an automation

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesAutomation ID (from list_automations)
recipientsNoTest recipient email addresses. When omitted, the automation's stored recipients are used.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoConfirmation that the test email was sent, and who it went to. A test does not change the schedule or count as a run.
successYesTrue when the call succeeded.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as destructive (destructiveHint: true) and not read-only, so the safety profile is established. The description's 'Send a test email' states the core action and is consistent with those annotations, though it adds no extra detail about side effects or delivery behavior. No contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler or redundancy. It is concise and to the point, though it omits any usage or side-effect context that would make it more informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a fully described input schema, an output schema, and annotations covering the destructive nature, the description is sufficient for an agent to understand the operation. It lacks explicit usage guidance, but the core purpose and parameters are fully specified elsewhere.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%; both id and recipients have clear descriptions, including the fallback to stored recipients when recipients is omitted. The description adds no parameter-level meaning beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Send') and resource ('test email for an automation'), making the tool's purpose immediately clear. It is distinct from sibling automation tools like create_automation or pause_automation, and the title reinforces the same intent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives, and it does not mention any exclusions, prerequisites, or related tools such as test_connection or get_automation_history. An agent must infer usage context from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

test_connectionTest datasource connectionAInspect

Test whether a stored datasource connection is still working (e.g. the OAuth token is valid). Records the outcome on the connection, so its status reflects this test.

ParametersJSON Schema
NameRequiredDescriptionDefault
connection_idYesConnection ID (from connected_datasources)
datasource_idYesDatasource alias of that connection (from datasources)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe test outcome — whether the connection still authenticates, and the vendor's error when it does not. The result is written back onto the connection's status.
successYesTrue when the call succeeded.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint=false and destructiveHint=false, the agent knows this is a non-sticky but still mutating operation. The description adds the key behavioral trait: the test result is recorded on the connection, so its status reflects this test. This adds useful context beyond annotations. However, no further details (idempotency, auth requirements, error behavior) are covered, so not a full 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences, front-loaded with the core purpose (test whether the connection works), then adding the key behavioral note about recording the outcome. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 2-parameter tool with a clear mutation, annotations covering destructive/read-only hints, and an output schema present, the description sufficiently covers what the tool does and its side effect (recording status). It could be enhanced with prerequisites or alternatives, but it's nearly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema documents both parameters (connection_id and datasource_id) with descriptions stating they come from connected_datasources and datasources respectively. The description adds no parameter syntax or format details, so baseline 3 is correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: tests whether a stored datasource connection is working, with a concrete example (OAuth token validity). This clearly distinguishes it from create_connection, delete_connection, rename_connection, and test_automation. No explicit sibling contrast, so 4 rather than 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The example (OAuth token validity) implies when you'd use it, but there is no explicit when-to-use trigger or when-not guidance. No alternative tools (e.g., connected_datasources, datasource_resources) are named. Usage is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

unpause_automationResume automationA
Destructive
Inspect

Unpause an automation. It starts emailing its recipients again on its schedule — confirm before calling.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesAutomation ID (from list_automations)
parent_idYesParent report or client ID (from list_reports or list_clients)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe automation, live again, with next_run_at showing when it will next send.
successYesTrue when the call succeeded.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, and the description adds concrete behavioral context by explaining that the tool resumes emailing recipients on schedule and advises confirmation before calling. This goes beyond the structured metadata without contradicting it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences with no filler. The core action and its consequence are front-loaded, and the warning is placed at the end without unnecessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter tool with full schema coverage, an output schema, and annotations that flag side effects, the description adequately explains what happens. It could mention that the automation must be paused first, but the schema and sibling context largely fill that gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema fully documents both parameters (id and parent_id) with descriptions, so the description adds no additional parameter semantics. With 100% schema coverage, the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Unpause'), names the resource ('automation'), and explains the consequence: it starts emailing recipients on schedule. This clearly distinguishes it from sibling tools like pause_automation and update_automation, even without naming them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the use case (resuming a previously paused automation) and includes a warning to confirm before calling, but it does not explicitly state when to use this tool versus alternatives, nor does it mention prerequisites or conditions where it should not be used.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_assetUpdate saved sectionBInspect

Update asset metadata. Only include fields you want to change.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesAsset ID (from list_assets).
nameNoNew name.
tagsNoNew tag list (replaces current tags).
descriptionNoNew description.
is_recommendedNoPromote this asset to the top of the default "Recommended" sort.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe saved section as saved — id, name, description and tags.
successYesTrue when the call succeeded.

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false, meaning this is a mutating operation. The description adds only that fields are updated selectively ('Only include fields you want to change'), which hints at partial-update behavior. But it doesn't disclose the response format, auth requirements, or what happens to unspecified fields beyond the implication that they're untouched. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with zero waste. The purpose is stated first, followed immediately by the key usage semantic. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is a low-complexity partial update with an output schema present and all params documented in the schema. The description is adequate for calling it correctly, but the title/description terminology mismatch ('section' vs 'asset') and lack of any guidance on when to use it leave minor gaps. Missing behavior details like what the update returns are covered by the output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 5 parameters with their meanings. The description adds the partial-update semantic ('Only include fields you want to change'), which clarifies that the tool merges changes rather than replacing the whole asset — genuine value beyond the schema. This warrants the baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states a specific verb and resource ('Update asset metadata'). Clear enough to distinguish from siblings like create_asset, get_asset, archive_asset. However, the title says 'Update saved section' while the description says 'asset metadata' — the terminology mismatch between 'section' and 'asset' introduces minor ambiguity about what resource is actually being updated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The only usage guidance is 'Only include fields you want to change,' which explains partial-update semantics but does not say when to use this tool vs alternatives. With over 100 sibling tools including other update_* tools (update_page, update_report, update_theme), there's no direction on when update_asset is the right choice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_automationUpdate automationC
Destructive
Inspect

Update an existing automation — only include the fields you want to change

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesAutomation ID (from list_automations)
dayNoDay of send: weekday name (weekly) or day-of-month (monthly)
nameNoAutomation name
hoursNoHour of send (e.g. "9")
customNoRequired when template_id === "custom"
minutesNoMinute of send (e.g. "00")
timezoneNoIANA timezone
date_textNoDate-range preset label for the report
frequencyNoSend frequency
sender_idNoSaved email sender id (from list_email_senders)
recipientsNoRecipient email addresses
template_idNoSaved email template id (from list_email_templates), or "custom" with a `custom` payload
time_formatNoMeridiem for the send time

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe automation as saved — schedule, recipients and the recomputed next_run_at.
successYesTrue when the call succeeded.

TDQS

C2.3/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

This description directly contradicts the annotations. The description says 'Update an existing automation,' a mutation, which is consistent with the mutation. However, the annotations include destructiveHint=true, and the description fails to disclose any destructive behaviors — e.g., whether changing template_id from a saved template to 'custom' would replace the content, or whether recipients will be overwritten wholesale. There is a contradiction: the description implies a straightforward partial update ('only include the fields you want to change') while the annotation marks it destructive. The description does not warn about irreversible or drastic side effects, and it does not articulate any behavioral ripple effects, so the safety profile in structured data is not echoed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very short (one sentence), which is efficient for a tool with a rich schema. The sentence brings one useful behavioral fact. It is rear-loaded. It doesn't over-explain. Given the breadth of the schema, a bit more could be added, but structurally it's clean.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool mutates a rich object (13 params, nested object), has destructiveHint=true, and an output schema exists. The description completely ignores the output and does not warn about which fields, if omitted, will be reset versus preserved. It also doesn't explain the interplay with pending-email-templates for the recipients or the sender, or the condition for the nested custom object being required. On a complex mutating tool like this, the description is insufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and many parameters have meaningful enum descriptions (frequency, date_text, time_format). The nested custom object is well documented (required fields, meaning of button_top, button_text), and the notion of template_id === 'custom' is explained in the schema. The description adds no new parameter meaning, but it does clarify the partial-update semantics. Given the schema is rich, the description doesn't need to restate parameter meanings, but it could have warned about how missing optional fields behave when not provided (whether they are reset to defaults or left untouched).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Update an existing automation' has a generic verb ('update') that matches the risk of sibling tools like update_client, update_report, update_theme, etc. It does identify the resource (automation) and adds a small operational note about partial updates, but it doesn't distinguish it from the many other update_* tools that share the same verb. The subtle hint about only including fields to change is useful but the purpose is under-specified.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives. It doesn't mention how it relates to create_automation, pause_automation, unpause_automation, or test_automation, nor when a partial-update call is preferred over an update. It states partial updates are possible but doesn't suggest a workflow (e.g., first list_automations, then update the specific automation).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_brandingUpdate account brandingAInspect

Update branding settings — only include the fields you want to change. For logo_url and favicon_url, use list_media to look up a URL from uploaded media. (Brand color is no longer configurable — theming is per-report.)

ParametersJSON Schema
NameRequiredDescriptionDefault
logo_urlNoLogo URL (use list_media to find an uploaded image URL)
favicon_urlNoFavicon URL (use list_media to find an uploaded icon URL)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe branding as saved — logo_url and favicon_url.
successYesTrue when the call succeeded.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds meaningful behavioral context beyond annotations: partial update semantics ('only include the fields you want to change') and the deprecation of brand color. Annotations already indicate this is a mutating but non-destructive operation, so the description complements rather than repeats them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences plus a brief parenthetical. The most important usage instruction is front-loaded, and every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-optional-parameter mutation with an output schema and annotations, the description covers what an agent needs: which fields, how to source URLs, and a key limitation. It could add a bit more about response behavior, but the output schema likely covers that.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and each parameter already references list_media. The description adds the partial-update rule, which is helpful, but does not materially expand per-parameter meaning beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Update branding settings') and the resource, and names the two relevant fields. It does not explicitly differentiate from related tools like update_company or update_theme, but the branding scope is unambiguous enough.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives practical usage guidance: only include fields to change, use list_media to find URLs, and notes that brand color is no longer configurable (theming is per-report). It lacks explicit when-to-use vs alternatives, but the guidance is specific and actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_button_widgetUpdate button widgetCInspect

Update a BUTTON widget.

ParametersJSON Schema
NameRequiredDescriptionDefault
linkNoNew click-through URL.
textNoNew button label.
widget_idYesWidget ID (from list_widgets).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe button widget as saved, with the update applied.
successYesTrue when the call succeeded.

TDQS

C2.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false and destructiveHint=false, indicating a non-destructive mutation. The description adds no behavioral context beyond this—it doesn't state whether the update replaces all fields or only provided ones, or what side effects occur. Since the description carries little weight and annotations are minimal, this is a notable gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no wasted words, which is concise. However, it lacks structure and substance—it's not front-loaded with key details because there are none. It's adequately short but not well-structured for an agent needing operational context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an update tool with only three parameters and an output schema, the description is incomplete. It doesn't explain the semantics of updating (e.g., whether link and text are optional and only provided fields change), nor does it mention the required widget_id. The output schema exists, so return values need not be described, but the operational behavior is under-specified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents each parameter (widget_id, link, text) with clear descriptions. The tool description adds no additional parameter semantics, so the baseline of 3 is appropriate—it neither enhances nor detracts from the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb and resource ('Update a BUTTON widget'), which differentiates it from other update_widget tools by naming the widget type. However, it adds no detail beyond the title and doesn't describe what updating entails, making it only slightly more informative than a tautology.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus alternatives. It doesn't mention that it's for modifying an existing button widget's link or text, nor does it contrast with add_button_widget or other update tools. The agent is left with no context for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_calculated_metricUpdate calculated metricAInspect

Update a calculated metric. Full replacement — you must send name, formula AND symbol.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCalculated metric ID (from list_calculated_metrics)
nameYesMetric name
symbolYesDisplay format: numbers, decimal, % or currency
formulaYesFormula as an ARRAY of tokens in evaluation order. CTR = clicks ÷ impressions × 100 is: [{id:"t1",type:"METRIC",query:{datasource_id:"gadw",data_view:"ACCOUNT",metrics:[{value:"clicks"}]}}, {id:"t2",type:"OPERATOR",operator:"÷"}, {id:"t3",type:"METRIC",query:{datasource_id:"gadw",data_view:"ACCOUNT",metrics:[{value:"impressions"}]}}, {id:"t4",type:"OPERATOR",operator:"×"}, {id:"t5",type:"NUMBER",number:100}]

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe calculated metric as saved — id, name, formula and symbol.
successYesTrue when the call succeeded.

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=false. The description adds a genuinely useful trait beyond those: this is a full-replacement update requiring name, formula and symbol, which warns the agent that omitted fields will be overwritten/clobbered. It does not cover auth requirements or what happens to prior values, keeping it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, front-loaded with the action and immediately followed by the critical constraint. No filler and nothing to trim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and 100% schema coverage, the description need not explain returns or field formats, and its full-replacement warning covers the main behavioral risk. It is nearly complete, missing only explicit routing against sibling update/create tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters are already documented by the schema, and the schema itself marks them required. The description merely restates the required fields (name, formula, symbol) without adding syntax or format insight beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The verb+resource are explicit ("Update a calculated metric"), and the second clause clarifies the update semantics as a full replacement. It does not name or differentiate itself from close siblings such as create_calculated_metric or update_calculated_metric_widget, so it lands just short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no explicit when-to-use vs. when-not-to-use guidance and names no alternatives (e.g., create_calculated_metric for new metrics, update_calculated_metric_widget for widgets). The "full replacement" note is a call-semantics constraint rather than routing guidance, so usage context is essentially absent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_calculated_metric_widgetUpdate calculated metric widgetAInspect

Point a Calculated Metric widget at a saved formula. Ids come from list_calculated_metrics. The series is re-fetched in the background — call get_widget_data with this id to read the numbers.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoDisplay name.
chartNoChart type.
dimensionNoTime dimension to trend by. A formula is evaluated over the report's date range, so this is what makes it a series rather than a single number.
widget_idYesWidget ID (from list_widgets).
calculated_metric_idNoCalculated metric id (from list_calculated_metrics).
calculated_metric_nameNoThe metric's name (from the same list) — labels the series, and names the widget while the name is still auto-generated.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe widget as saved, now pointed at that formula. The series is re-fetching in the background — read it with get_widget_data.
successYesTrue when the call succeeded.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses the non-obvious background behavior: the series is re-fetched asynchronously, and the current response is not where you read the numbers. This adds value beyond the annotations, which only indicate it is not read-only and not explicitly destructive. No contradiction with annotations exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler; the main action is front-loaded and the operational consequence is in the second sentence. Every clause contributes either intent or follow-up behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an update operation with six parameters, the description covers the prerequisite data source, the background side effect, and how to observe the result. With a full schema, an output schema, and annotations present, nothing critical is missing, though create-versus-update routing could have been more explicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds only a note about ID provenance and the follow-up widget ID, but those are already reflected in the schema descriptions for calculated_metric_id and widget_id. It does not meaningfully enhance the semantics of name, chart, or dimension.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific action — 'Point a Calculated Metric widget at a saved formula' — naming the exact resource and intent. This clearly distinguishes it from updating the formula itself (update_calculated_metric) or creating a widget (add_calculated_metric_widget). The ID sourcing detail reinforces what the operation is about.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit prerequisite by saying IDs come from list_calculated_metrics, and it provides a follow-up call (get_widget_data) for reading the resulting numbers. It does not explicitly contrast this with add_calculated_metric_widget or other update_* widgets, but the usage context is clear and actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_clientUpdate clientAInspect

Update an existing client — only include the fields you want to change

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesClient ID (from list_clients)
nameNoClient name
foldersNoFolder IDs (from list_folders)
managerNoManager user ID (from list_users)
websiteNoClient website URL
currencyNoCurrency ISO 4217 code, e.g. "USD" — the server fills in symbol + country iso
theme_idNoTheme ID (use list_themes to find one)
timezoneNoIANA timezone
domain_idNoWhite-label domain ID (from list_domains)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe client as saved. Changing the website re-derives its branding, so the theme_id may come back different.
successYesTrue when the call succeeded.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish that this is a non-read-only, non-destructive mutation. The description adds an important behavioral trait beyond the annotations: it is a PATCH-style update, and unspecified fields remain unchanged. This is genuinely useful for the agent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence that conveys the core behavior immediately. Every word earns its place; there is no filler or redundant repetition of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter update tool, the schema and output schema already document all parameters and return shape. The description adds the one missing behavioral fact — only changed fields need to be included — making the definition complete enough for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 100% parameter description coverage with excellent provenance hints (e.g. IDs sourced from list_clients, list_folders, list_users, list_themes, list_domains). The description itself adds only the partial-update semantics, but that is exactly the key cross-cutting parameter behavior the schema cannot convey per-field.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Update'), a specific resource ('an existing client'), and the key semantic of partial updates. It clearly distinguishes this from create_client, archive_client, and get_client without requiring the agent to open the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'existing client' clearly implies this tool is for modifying already-created clients, and 'only include the fields you want to change' gives a clear usage pattern. It does not explicitly name alternatives or exclusions, but the context is clear enough for correct selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_companyUpdate company profileCInspect

Update company settings

ParametersJSON Schema
NameRequiredDescriptionDefault
zipNoZip/postal code
cityNoCity
phoneNoPhone number
stateNoState/province
addressNoStreet address
countryNoCountry — must be one of the curated list the company-profile picker offers
websiteYesCompany website URL
timezoneYesIANA timezone (e.g. America/New_York)
company_nameYesCompany name

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe company profile as saved.
successYesTrue when the call succeeded.

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are minimal and only indicate read/write and destructive intent; the description does not add behavioral context. It fails to disclose whether this is a partial update or full replacement, whether omitting optional fields clears them, what permissions are required, or what side effects updating company settings may have.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very short and contains no filler, so it is structurally clean. However, it is under-specified: a single generic phrase does not provide enough information to be considered an appropriately sized description for a tool with nine parameters and multiple sibling update tools.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite the presence of an output schema and full parameter documentation, the description lacks critical context about update semantics, scope, and alternatives. An agent cannot tell what distinguishes this tool from update_client, update_branding, or update_user, nor whether fields are overwritten wholesale.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter is already documented with type, meaning, and example where relevant. The description adds nothing beyond the word 'settings', which is acceptable under the baseline since the schema carries the parameter documentation burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear action ('Update') and a clear resource ('company settings'), and the title clarifies this as the company profile. It is not a tautology, but it is generic and does not differentiate itself from sibling tools like update_client, update_branding, or update_my_profile.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives. The description does not mention whether this is for company-level profile settings, whether it complements get_company, or when one would use update_branding or update_client instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_custom_dataUpdate custom datasetAInspect

Update a custom-data dataset — send only the fields you want to change (e.g. { raw_data, columns }).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCustom-data ID (from list_custom_data)
nameNoDataset name
columnsNoReplacement column definitions — send alongside raw_data when the shape changed
raw_dataNoReplacement rows, each an object keyed by column name — replaces every stored row
file_nameNoOriginal file name
file_sizeNoFile size in bytes

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe dataset as saved — id, name, file_name and columns.
successYesTrue when the call succeeded.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=false (not read-only) and destructiveHint=false. The description adds the key behavior that only provided fields are updated, implying others remain unchanged. This is useful beyond annotations, but it doesn't disclose other behaviors like whether raw_data fully replaces stored rows (already in schema) or any side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that states the purpose and the key usage behavior (partial update). No wasted words, and the example is concise. It is efficient and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 6 parameters, but the schema covers all with descriptions. The description adds the essential partial-update behavior. It doesn't mention output, but an output schema exists (per context) so that is covered. Missing is any guidance on when to use this over similar update tools, but the core update semantics are well conveyed. Overall, it is adequate for an agent to call correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for all 6 parameters, so baseline is 3. The description adds the partial-update semantics ('send only the fields you want to change') which is not captured in the schema. It gives an example with raw_data and columns, clarifying that these are the commonly changed fields. This adds meaningful value beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the verb 'update' and the resource 'custom-data dataset', which is clear. It also specifies partial update behavior. However, it does not explicitly distinguish from sibling update_custom_data_widget, though the resource is different. The distinction is implied by the resource name but not stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives guidance on how to perform the update (send only changed fields) but provides no guidance on when to use this tool versus alternatives like update_custom_data_widget or create_custom_data. No mention of prerequisites or conditions for selecting this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_custom_data_widgetUpdate custom data widgetAInspect

Point a Custom Data widget at an uploaded CSV dataset and choose its columns. The dataset id comes from list_custom_data and the column names from get_custom_data — a dataset has no fixed catalog, so its own column names are the metrics and dimensions. The series is re-fetched in the background.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoDisplay name.
chartNoChart type.
metricsNoValue columns to plot, e.g. [{ column: "Revenue", format: "currency" }] — names exactly as get_custom_data reports them.
widget_idYesWidget ID (from list_widgets).
dimensionsNoLabel column(s) to break down by, e.g. ["Channel"] — names exactly as get_custom_data reports them.
custom_data_idNoCustom-data dataset id (from list_custom_data).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe widget as saved, now pointed at that dataset and its columns. The series is re-fetching in the background — read it with get_widget_data.
successYesTrue when the call succeeded.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses a non-obvious side effect: 'The series is re-fetched in the background.' This adds behavior beyond the annotations, which only indicate readOnlyHint=false and destructiveHint=false. It does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact: a clear opening statement of the operation, followed by the source of identifiers and a one-line behavioral note. Every sentence adds information and the most important action is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that an output schema exists and annotations already signal mutation, the description covers the key remaining context: where to get the dataset id and column names, that columns are the metrics/dimensions, and that a background refetch occurs. Nothing essential for invoking the tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds meaningful semantic guidance: a dataset has no fixed catalog and its own column names serve as metrics and dimensions. This helps the agent correctly derive metrics and dimensions from get_custom_data instead of guessing field names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action and resource: 'Point a Custom Data widget at an uploaded CSV dataset and choose its columns.' It clearly conveys that the tool reconfigures a widget's data source rather than merely restating the tool name, and it distinguishes the widget type from generic data widgets.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives concrete usage context by telling the agent where to obtain required identifiers: 'The dataset id comes from list_custom_data and the column names from get_custom_data.' It does not explicitly contrast this tool with add_custom_data_widget or update_data_widget, so it stops short of full alternative-routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_data_widgetUpdate data widgetAInspect

Update a DATA widget — its name, datasource, data view, metrics, dimensions, filters, advanced settings, chart type, date range, sort and row limit. Applies the report builder's rules: a new datasource or data view clears the selections below it and re-applies defaults, per-metric renames and formats are kept, the combination is validated, and the series is re-fetched with the new config. Discover ids with datasources → describe_datasource. The re-fetch runs in the background — call get_widget_data with this id to read the new numbers.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoDisplay name. Omit to use the generated one ("Clicks & Impressions by Date")
chartNoChart type: table, score (KPI), area, line, bar, column, pie, donut, funnel, or map. 'score' shows a single value, so it takes exactly one metric
filtersNoRow filters. Every row needs a field, an operator and a value
metricsNoMetrics to display, e.g. [{ value: "clicks" }] — ids from describe_datasource. Must belong to the chosen data view. Only `value` is required; the server fills the rest
sort_byNoMetric or dimension id to sort rows by. Defaults to the first dimension
advancedNoDatasource-specific settings (Meta attribution, SEM Rush region, Mailchimp audience…). Several datasources require keys here — describe_datasource lists them per data view. Merges with existing settings
currencyNoPer-widget currency code override; falls back to the client currency
data_viewNoDatasource data view (from describe_datasource), e.g. ACCOUNT. Changing it clears metrics and dimensions
row_limitNoRows to keep (default 'all')
widget_idYesWidget ID (from list_widgets).
date_rangeNoPer-widget date range (overrides the report range) — also set show_custom_date_range
dimensionsNoBreakdown dimensions, e.g. [{ value: "DATE" }] — ids from describe_datasource. A widget needs at least one; a dimension flagged `single` must be the only one
sort_orderNoSort direction (default 'asc')
datasource_idNoDatasource alias (from datasources), e.g. gadw. Changing it clears the data view, metrics, dimensions, filters and advanced settings, then applies that datasource's defaults. A datasource the client has not connected renders demo data until the connection is made — connected_datasources shows what is connected. The internal sources take no metrics/dimensions and are configured through `advanced` instead: 'CUSTOM_DATA' (Static Value — advanced.value), 'GOALS' (advanced.goal_id from list_goals), 'CUSTOM_IMPORT' (advanced.custom_data_id from list_custom_data), 'CALCULATION' (a calculated metric id as the single metric)
show_custom_date_rangeNoUse the widget date_range instead of the report range

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe data widget as saved, with the builder's rules applied — cleared selections, re-applied defaults and the regenerated name. When the selection changed the series is re-fetching in the background; read it with get_widget_data.
successYesTrue when the call succeeded.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations, which only declare readOnlyHint=false, destructiveHint=false, openWorldHint=false. The description discloses the cascading side effects (a new datasource or data view clears downstream selections and re-applies defaults), which user edits survive (per-metric renames/formats), that the combination is validated, and that the series re-fetch is asynchronous. That is exactly the behavioral context an agent needs before mutating a widget.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the affected fields, then behavior, then the follow-up workflow. The field enumeration is mildly redundant with the 100%-covered schema, but it works as a quick scan and the rest earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 15-parameter tool with nested objects, an output schema, and dense annotations, the description covers purpose, cascading side effects, async behavior, and the id-discovery workflow. Nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema carries the per-field burden and the baseline is 3. The description adds meaning the schema cannot: the cascade semantics of datasource_id/data_view, and the fact that renames and formats are preserved across the update. It does not add syntax detail for the many nested metric/dimension/filter fields, so it stops at 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (Update) plus resource (DATA widget) and an explicit enumeration of what can be changed. The qualifier 'DATA widget' distinguishes it from the many sibling update_*_widget tools (calculated_metric, custom_data, goal, embed, image, text, title, button), so an agent can route correctly without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear workflow guidance: discover ids via 'datasources → describe_datasource', and read the new numbers via get_widget_data after the async re-fetch. It does not state explicit exclusions (e.g., when to prefer update_calculated_metric_widget or refresh_widgets instead), so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_embed_widgetUpdate embed widgetCInspect

Update an EMBED widget.

ParametersJSON Schema
NameRequiredDescriptionDefault
link_urlNoNew embed source URL.
widget_idYesWidget ID (from list_widgets).
embed_typeNoNew embed mode.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe embed widget as saved, with the update applied.
successYesTrue when the call succeeded.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already indicate readOnlyHint=false and destructiveHint=false, and the description adds no behavioral context beyond the word 'Update'. It does not disclose whether existing embed settings are replaced, whether partial updates are allowed, or any side effects on rendered pages.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, short sentence with no filler words. It is efficient but so terse that it adds little information beyond the tool's title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The schema fully documents all three parameters and an output schema exists, so return-value documentation is not required. However, the description omits usage context, such as prerequisites (e.g., the widget must already exist) and whether link_url is required for certain embed types.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameters are already fully documented in the schema. The description adds no additional meaning about parameter relationships, such as whether embed_type and link_url interact or which combinations are valid.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb ('Update') and a specific resource type ('EMBED widget'), which differentiates it from sibling update_*_widget tools. However, it closely mirrors the title and offers no additional scoping details beyond the resource type.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to use this tool versus alternatives such as add_embed_widget, delete_widget, or other update_*_widget tools. The description simply states what it does, leaving the agent to infer appropriate usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_folderUpdate client folderBInspect

Rename a client folder

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesFolder ID (from list_folders)
nameYesNew folder name

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe folder as renamed — id and name.
successYesTrue when the call succeeded.

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and destructiveHint=false, but the description adds no behavioral context beyond the bare action 'rename'. It does not disclose permissions, side effects (e.g., impact on folder contents), reversibility, or response behavior, so it adds minimal value over the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-front-loaded sentence with no filler. It communicates the core purpose efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter rename tool with an output schema and annotations, the description is largely sufficient. It does not explain prerequisites like folder existence, but the id parameter's 'from list_folders' hint partially covers that.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both parameters (id and name) have descriptions. The description adds no extra semantic detail beyond the schema, so the baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'rename' and resource 'client folder', clearly distinguishing it from siblings like update_client, create_folder, delete_folder, and move_client_to_folder. It is unambiguous and matches the title.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives such as move_client_to_folder or update_client. It does not mention when not to use it or any prerequisites, leaving the agent without explicit selection criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_goalUpdate goalBInspect

Update a goal — only include the fields you want to change.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesGoal ID (from list_goals)
nameNoGoal name
queryNoThe metric query the goal measures — replaces the stored one outright
symbolNoDisplay format: numbers, decimal, % or currency; null clears it
operatorNoSuccess comparison: >= (at or above), = (equal), <= (at or below)
client_idNoBind the goal to a client (from list_clients); null makes it account-wide
goal_typeNostatic (fixed target) or change (delta over the period)
descriptionNoOptional description; null clears it
target_valueNoTarget value to measure against

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe goal as saved, with every field after the update applied.
successYesTrue when the call succeeded.

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false. The description adds useful partial-update semantics ('only include the fields you want to change'), but it does not cover side effects, nested query replacement behavior, permissions, or other mutation consequences.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, front-loaded, and completely free of filler. It communicates the essential invocation rule without repeating schema content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The schema is rich, annotations are present, and an output schema exists, so the description need not explain parameters or return values. However, for a complex mutation with nested objects and a query field that replaces stored data outright, the one-line description is minimal and leaves important behavioral context to the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 9 parameters in detail. The description adds no parameter-specific meaning beyond the general partial-update instruction, making the baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a clear verb+resource: 'Update a goal'. It does not distinguish itself from siblings like update_goal_widget, create_goal, or archive_goal, but the core purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'only include the fields you want to change' gives patch-style invocation guidance, but there is no explicit when-to-use, when-not-to-use, or alternative-tool routing. The agent gets no help choosing this over create_goal or update_goal_widget.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_goal_widgetUpdate goal widgetAInspect

Point a Goal widget at a saved goal. Ids come from list_goals. The goal carries its own metric query, target and comparison, so nothing else is needed; the gauge is re-fetched in the background.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoDisplay name. Omit to show the goal's own name.
goal_idYesGoal id (from list_goals).
widget_idYesWidget ID (from list_widgets).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe widget as saved, now pointed at that goal. The gauge is re-fetching in the background — read it with get_widget_data.
successYesTrue when the call succeeded.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only provide readOnlyHint:false and destructiveHint:false, so the description adds valuable behavioral context: it explains that the goal carries its own metric query, target, and comparison (so no extra params are needed) and that the gauge is re-fetched in the background. This goes beyond the annotations to explain what happens on execution, notably the background refresh, without contradicting the structured hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is efficient: two sentences, no filler. The first sentence front-loads the core purpose, and the second explains the minimal inputs and the background behavior. Every clause earns its place, making it easy to scan and act on quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a straightforward widget update, the description is fairly complete: it states what it does, the required IDs, and the fact that no other goal parameters are needed. It also notes the background refresh, which is relevant side behavior. The output schema exists, so not describing return values is acceptable. It doesn't cover potential failure modes or permissions, but those are not critical for this simple, non-destructive update.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers all three parameters with 100% description coverage, so the baseline is 3. The description reinforces that widget_id and goal_id are the primary identifiers and implies that name is optional, but it does not add meaning beyond what the schema already provides (e.g., that goal_id comes from list_goals is already in the parameter description). It adds no new semantics about format or constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: 'Point a Goal widget at a saved goal.' It identifies the resource (Goal widget) and the specific operation (pointing it at a goal), making it easily distinguishable from other update_*_widget tools in the sibling list. The mention of 'Ids come from list_goals' further clarifies the required inputs, leaving no ambiguity about what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by stating the purpose and the need for IDs from list_goals, and explicitly notes that 'nothing else is needed' for the goal's metric/target. However, it does not explicitly differentiate from closely related sibling tools like update_goal (which updates the goal itself) or other widget update tools, nor does it state when not to use it. Usage context is implied but not fully explicit about alternatives or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_image_widgetUpdate image widgetCInspect

Update an IMAGE widget.

ParametersJSON Schema
NameRequiredDescriptionDefault
linkNoNew click-through URL.
link_urlNoNew image source URL — use list_media to find an uploaded image.
image_fitNoNew CSS object-fit class.
widget_idYesWidget ID (from list_widgets).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe image widget as saved, with the update applied.
successYesTrue when the call succeeded.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and destructiveHint=false, so the description's 'update' action is consistent but adds no extra behavioral context. It does not mention partial updates, side effects, authorization requirements, or what happens to unspecified fields—information that would be valuable for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single short sentence, which is concise, but it essentially restates the tool name ('Update an IMAGE widget.') and does not earn its place by adding new information. It is not verbose, but it could be more informative within the same length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the moderate complexity (4 params, 1 required), full schema documentation, and presence of an output schema, the description is minimally sufficient. It lacks guidance on edge cases, prerequisites (e.g., widget must exist), or typical usage flows, but these are not critical given the schema covers parameter origins.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with each parameter (link, link_url, image_fit, widget_id) having a clear description. The tool description adds nothing about parameters, but since the schema already documents them thoroughly, the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Update') and a clearly scoped resource ('an IMAGE widget'), which distinguishes it from sibling update_*_widget tools by resource type. It is not a tautology because it names the exact widget kind, though it does not enumerate capabilities.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus the many sibling update_*_widget tools (e.g., update_button_widget, update_data_widget). It does not mention prerequisites, selection criteria, or exclusions, leaving the agent to infer context from the schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_my_avatarUpdate user avatarBInspect

Update the authenticated user's profile picture

ParametersJSON Schema
NameRequiredDescriptionDefault
avatar_urlYesProfile picture URL or path — optionally a Media URL, or any image URL

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe profile carrying the new avatar_url.
successYesTrue when the call succeeded.

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description only restates the mutating intent already implied by the annotations (readOnlyHint=false). It adds no details about validation, image requirements, side effects, or what happens to the previous avatar beyond the parameter description.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence that conveys the essential purpose with no wasted words. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple self-service avatar update with one fully documented parameter and an output schema, the definition is largely complete. The only notable gap is the lack of explicit distinction from update_my_profile and update_user.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the avatar_url parameter is already described as a profile picture URL or path. The description adds little beyond the schema, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Update') and resource ('authenticated user's profile picture'), making the tool's function clear. It does not explicitly contrast with siblings like update_my_profile or update_user, but the focus on the current user's avatar is sufficiently distinct.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit guidance on when to use this tool rather than update_my_profile or update_user. The phrase 'authenticated user's' implies self-service scope, but no exclusions or alternative tools are mentioned, leaving the agent to infer usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_my_profileUpdate user profileBInspect

Update the authenticated user's profile — only include the fields you want to change

ParametersJSON Schema
NameRequiredDescriptionDefault
themeNoUI theme
fullnameNoFull name
languageNoUI language code

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe profile as saved — fullname, language and theme.
successYesTrue when the call succeeded.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and destructiveHint=false, so the mutation nature is known. The description adds the partial-update behavior (unchanged fields remain untouched), which is real added value. No contradiction with annotations, but no further disclosure about validation, no-op calls, or response behavior is provided.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single efficient sentence that front-loads the purpose before the usage instruction. No wasted words; appropriately minimal for a tool whose parameters are fully documented in the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with three optional parameters, full schema coverage, and an output schema, the description is adequate. It covers partial-update semantics but omits the self-vs-other-user distinction relative to update_user and any validation notes — minor gaps given the simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all three parameters (theme, fullname, language) with enums for two. The description adds nothing beyond the schema; the baseline 3 applies since the schema carries the full documentation burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb-resource pair ('Update the authenticated user's profile'), which distinguishes this from sibling update_user by restricting scope to the authenticated user's own profile. It's specific and identifiable, though it doesn't name the sibling it differs from explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Only include the fields you want to change' gives genuine partial-update (PATCH) semantics, which is useful for an all-optional-parameter tool. However, it never references the natural alternative update_user or get_current_user, so an agent must infer when self-update is the right choice vs. updating another user.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_pageUpdate report pageAInspect

Update a page — only include the fields you want to change

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoPage name
page_idYesPage ID (from list_pages)
visibleNoShow or hide the page
positionNoMove the page to this position, 0-based. The pages it moves past shift to close the gap

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe page as saved — page_id, name, position and visible.
successYesTrue when the call succeeded.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=false and destructiveHint=false. The description adds the partial-update behavior ('only include the fields you want to change'), which implies unspecified fields remain unchanged. This is useful beyond annotations, though it doesn't mention side effects like page reordering when position changes (schema covers that).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single concise sentence that front-loads the operation and adds the most important usage nuance. No redundancy with schema or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema, rich parameter descriptions, and annotations, the description is nearly sufficient. It could mention that page_id is required or that this operates on report pages, but the title and schema already communicate those. It's adequate for a simple update tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so each parameter already has a description. The description adds the key semantic that omitted fields are left unchanged, which significantly clarifies how the parameters work together, exceeding the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Update') and resource ('page'), and the title clarifies it is a report page, aligning with sibling create_page/delete_page. However, it does not explicitly differentiate from other update_* siblings like update_report, though the resource name makes it unambiguous enough.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides no guidance on when to use this tool instead of alternatives like delete_page or create_page. The only usage instruction, 'only include the fields you want to change', addresses partial updates but not tool selection criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_reportUpdate report or dashboardBInspect

Update a report — only include the fields you want to change

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoReport name
passwordNoPassword
theme_idNoTheme ID (use list_themes to find one)
report_idYesReport ID (from list_reports)
descriptionNoReport description
pdf_enabledNoEnable PDF download
show_cover_pageNoShow cover page
cover_page_titleNoCover heading, overriding the theme's. Null clears the override and inherits the theme again.
password_enabledNoEnable password protection
cover_page_subtitleNoCover subheading, overriding the theme's. Null clears the override and inherits the theme again.
thank_you_page_titleNoThank-you heading, overriding the theme's. Null clears the override and inherits the theme again.
cover_page_pattern_idNoGenerated artwork for the cover, overriding the theme's. Null clears the override and inherits the theme again.
show_table_of_contentsNoShow table of contents
thank_you_page_subtitleNoThank-you message, overriding the theme's. Null clears the override and inherits the theme again.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe report as saved, with every field after the update applied.
successYesTrue when the call succeeded.

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and destructiveHint=false, so the write-and-non-destructive profile is covered. The description adds one genuinely useful behavioral trait beyond the annotations: omitted fields are left untouched (PATCH semantics), but it stops there, with no disclosure of side effects, atomicity, or implications of passing null overrides.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with zero filler, front-loaded with the verb and resource. It earns its place by conveying the key partial-update behavior, though for a 14-parameter tool the terseness borders on under-specification rather than disciplined brevity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The output schema and 100%-covered input schema carry most of the load, so the description needn't explain returns. However, it leaves untold when to prefer this over archive/duplicate/create report variants and what happens to theme overrides when fields are touched; adequate but leaning on structured data.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already documents each parameter well, including null-clearing semantics for cover/text overrides and cross-references to list_themes and list_reports. The description adds no per-parameter meaning, only a tool-level note about partial updates, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ('Update a report') and adds a distinguishing partial-update qualifier, which separates it from full-replacement update tools. The title's 'report or dashboard' introduces minor ambiguity since the description only mentions report, and the tool isn't differentiated against the many other update_* siblings beyond the resource name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The only guidance is 'only include the fields you want to change,' which is partial-update semantics rather than when-to-use guidance. There is no direction on when to choose this over create_report, duplicate_report, archive_report, or update_theme, and no exclusions or prerequisites are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_static_value_widgetUpdate static value widgetAInspect

Set the value on a Static Value widget — a number, an amount like "R50", or free text like "Active". It has no datasource and never fetches, so the value is shown exactly as passed.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoLabel shown above the value.
valueYesThe value to display.
widget_idYesWidget ID (from list_widgets).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe widget as saved, holding the value inline. Nothing is fetched, so it is already showing what you passed.
successYesTrue when the call succeeded.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses key behavioral traits: the widget has no datasource and never fetches, so the value is shown exactly as passed. This goes beyond the annotations (readOnlyHint=false, destructiveHint=false) by explaining the widget's data behavior. It doesn't mention side effects or permissions, but the annotations already cover the safety profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero waste. The core action is front-loaded, examples clarify the value format, and the behavioral note about no datasource is concise and valuable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is complete for a simple update tool. It explains the value semantics and the widget's behavior. The output schema exists, so return values are covered. It could mention that widget_id comes from list_widgets, but the schema already says that.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all three parameters. The description adds context about the value parameter (examples like 'R50' or 'Active') but doesn't add meaning beyond what the schema provides. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Set the value on a Static Value widget' with specific examples of value types. It distinguishes this from other update_*_widget tools by emphasizing the static value widget's unique behavior (no datasource, never fetches).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use this tool: when updating a Static Value widget, as opposed to other widget types. It doesn't explicitly name alternatives or exclusions, but the context of sibling tools (update_data_widget, update_calculated_metric_widget, etc.) makes the usage context clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_templateUpdate templateAInspect

Update a template — only include the fields you want to change

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesTemplate ID (from list_templates)
nameNoTemplate name
descriptionNoTemplate description

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe template as saved — id, name and description.
successYesTrue when the call succeeded.

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark it as non-read-only, and the description adds the useful behavior that it performs a partial update rather than a full replacement. It does not disclose side effects, idempotency, or what happens to omitted fields beyond the implication that they remain unchanged, but this is a simple update with an output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single compact sentence with no filler; the key partial-update instruction is front-loaded right after the verb+resource.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-parameter update with a full schema, output schema, and annotations, the description is adequate: the only missing context is explicit guidance about when to choose this over create_template, but the verb and title make that reasonably clear.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so each parameter (id, name, description) is already documented. The description adds the crucial semantic that name and description are optional and only changed when included, which the schema alone does not express.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ('Update a template') and adds partial-update semantics ('only include the fields you want to change'), so an agent can tell it is a patch-style mutation of a template. It does not explicitly contrast with create_template, get_template, or archive_template, though the verb itself implies the distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'only include the fields you want to change' conveys how to call the tool, and the name implies the use case of modifying an existing template. There is no explicit when-to-use or when-not-to-use guidance versus the many create/list/archive siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_text_widgetUpdate text widgetAInspect

Update a TEXT widget — an executive summary, commentary, any prose block. The body accepts Markdown. Replaces the entire text content.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesBody text. Markdown is rendered: # / ## / ### headings, - and 1. lists, **bold**, *italic*, ~~strike~~, `code`, > quotes, ``` fences and [links](url). Plain prose works too — it becomes paragraphs. Replaces the existing content entirely.
widget_idYesWidget ID (from list_widgets).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe text widget as saved, with the update applied.
successYesTrue when the call succeeded.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description explicitly discloses the key behavioral trait: 'Replaces the entire text content,' preventing an agent from assuming an append or partial edit. It also notes Markdown support. Annotations already indicate this is a mutation, and the description adds the meaningful replacement nuance without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three short, focused sentences with no filler. The resource type and core behavior are front-loaded, and every sentence adds useful context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter update tool with a rich input schema, an output schema, and clear sibling differentiation, the description covers the purpose, the content type, Markdown support, and replacement semantics. Nothing essential for invoking the tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already documents both parameters in detail, including the Markdown syntax and the full-replacement behavior. The tool description adds no new parameter-specific meaning beyond what the schema provides, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Update') and the resource ('TEXT widget'), and further defines what a text widget is: an executive summary, commentary, or prose block. This distinguishes it from sibling update_*_widget tools by emphasizing prose content.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear usage context: use this for text/prose widgets whose body accepts Markdown. It does not explicitly name alternative tools or provide when-not-to-use guidance, but the resource type is well-enough scoped to make the intended use obvious among the siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_themeUpdate themeAInspect

Update a theme — only include the fields you want to change. Supply the full tokens map when changing visual properties (partial token updates replace the entire map). Update cover_page or thank_you_page to change the chosen background images. Flip is_default true/false to manage the account default (only one default per account).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesTheme ID (from list_themes)
nameNoTheme name
tokensNoComplete token map — replaces the entire stored token set. Include all tokens when updating visual properties.
cover_pageNoCover-page configuration: background image URL plus title and subtitle overlays (variable-substituted at render time).
is_defaultNoMark/unmark this theme as the account default
thank_you_pageNoThank-you-page configuration: background image + title + subtitle.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe theme as saved — id, name, tokens and page config.
successYesTrue when the call succeeded.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations mark it as non-read-only and non-destructive, so mutation is implied. The description adds behavioral details beyond annotations: partial token updates replace the entire map, and only one default per account. These behaviors are not visible in annotations and help the agent anticipate side effects. It does not contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four sentences, each adding distinct value: partial updates, token map behavior, cover/thank-you pages, and default management. It is front-loaded with the core action and wastes no words, making it easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return format is covered. The tool has 6 parameters including nested objects, and the description explains how each major field behaves. It does not mention error cases or prerequisites, but the schema covers required id and id sourcing. Overall, sufficient for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so every parameter is already described in the schema. The description adds a few clarifications (e.g., full token map replacement, default uniqueness) but largely paraphrases the schema. Baseline 3 is appropriate because the schema carries the primary semantic load.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with 'Update a theme' — a specific verb and resource — and enumerates the fields that can be changed (tokens, cover_page, thank_you_page, is_default). It clearly differentiates from sibling update_* tools by focusing on theme-specific attributes and partial-update semantics, making its purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear instructions on how to use the tool: include only fields to change, supply full token map for visual changes, update cover/thank_you pages for backgrounds, flip is_default. It does not explicitly name alternative tools, but the tool name and context make it obvious when to use it. It provides usage context without explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_title_widgetUpdate title widgetCInspect

Update a TITLE widget.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoNew title text.
headingNoNew heading level.
widget_idYesWidget ID (from list_widgets).

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe title widget as saved, with the update applied.
successYesTrue when the call succeeded.

TDQS

C2.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already indicate this is a mutation (readOnlyHint=false), but the description adds no behavioral context beyond the word 'update.' It does not disclose partial-update behavior, what happens to omitted fields, or any side effects, and it does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short, but the brevity is under-specification rather than efficient clarity. The single sentence repeats the tool name and provides no substantive information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple 3-parameter tool with full schema coverage and an output schema, an agent can minimally call it correctly. However, the description leaves important usage context, such as when to choose this over sibling widget updates, entirely unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so title, heading, and widget_id are each documented in the schema, including the heading enum. The description itself contributes no parameter-level meaning, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Update a TITLE widget.' is essentially a restatement of the tool name and title. It names the target resource but does not say what can be updated or how it differs from sibling update_*_widget tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus add_title_widget or the many other update_*_widget siblings. There are no conditions, prerequisites, or exclusions mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_userEdit team memberBInspect

Edit a team member — only include the fields you want to change

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesUser ID to edit (from list_users)
roleNoRole to assign (admin, clients, or readonly)
clientsNoClient IDs the user can access, from list_clients (for the "clients" and "readonly" roles)
fullnameNoFull name

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThe team member as saved — id, fullname, role and their client scope.
successYesTrue when the call succeeded.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already convey readOnlyHint=false and destructiveHint=false, so mutation is known. The description adds partial-update semantics ('only include the fields you want to change'), which is useful behavioral context beyond structured data. However, it does not disclose consequences of role changes or how unspecified fields are handled beyond the implied preservation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that states the purpose and the key usage pattern with zero wasted words. The 'edit' action is front-loaded, and the partial-update instruction follows naturally.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists, return values are externally documented. Annotations cover safety. The schema covers all parameters at 100% coverage. The description's partial-update statement fills the main behavioral gap. It is complete enough for an agent to invoke correctly, though it could briefly mention not to use it for user creation or deletion.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all parameter descriptions are present in the schema. The description's phrase 'only include the fields you want to change' subtly reinforces the optionality of non-id fields but does not add new per-parameter meaning beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action and resource: 'Edit a team member'. The title reinforces this. It is clearly distinct from invite_user and remove_user, though it does not explicitly name those alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description only says 'only include the fields you want to change', which is a how-to instruction, not a when-to-use instruction. It gives no guidance on selecting this tool over siblings like invite_user, remove_user, or update_my_profile, which is a notable gap given the large sibling list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

whoamiWho am IA
Read-only
Inspect

Who this connection is signed in as: the user, the account, the plan and how much of it is used. Call this first in a session — it answers "which account am I on?" without combining get_current_user, get_account and get_account_usage.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoThree parts. `user` — id, email, fullname, role, and the client ids they are scoped to (empty means all). `account` — id, company name, timezone and the plan. `usage` — counts of clients, reports and users against the plan limits. A part is null when that lookup failed; the rest still come back.
successYesTrue when the call succeeded.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds value by disclosing the response content (user, account, plan, usage) and the semantic question it answers ('which account am I on?'). No contradiction found.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is exactly two sentences, front-loaded with the core purpose ('Who this connection is signed in as') and then justifies its existence by contrasting with sibling tools. Every sentence contributes meaning; there is zero fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-parameter, read-only tool with an output schema, the description fully explains what it does, when to use it, and how it differs from alternatives. Nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the schema coverage trivially covers all params. The baseline for 0 params is 4 per guidelines. The description correctly implies no parameters are needed, adding no extra confusion.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns identity info (user, account, plan, and usage). It explicitly distinguishes itself from sibling tools get_current_user, get_account, and get_account_usage by presenting itself as a combined call. The verb and resource are specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit situational guidance: 'Call this first in a session'. It also names the alternative (combining the three separate tools) and implies this is the simpler choice. This effectively routes the agent to the right decision without ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 16 tool updates
    • Changedadd_data_widget1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk",
        -  "chart-mogul",
        -  "amplitude",
        -  "harvest",
        -  "zoho-crm",
        -  "clockify"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude",
        +  "harvest",
        +  "zoho-crm",
        +  "clockify",
        +  "adtraction"
        +]
    • Changedcreate_calculated_metric1 field changed
      • changedInput schema / properties / formula / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": true,
        -      "properties": {
        -        "id": {
        -          "description": "Unique token id within the formula, e.g. \"t1\"",
        -          "type": "string"
        -        },
        -        "number": {
        -          "description": "Required when type is NUMBER",
        -          "type": [
        -            "number",
        -            "null"
        -          ]
        -        },
        -        "operator": {
        -          "anyOf": [
        -            {
        -              "enum": [
        -                "+",
        -                "-",
        -                "*",
        -                "/",
        -                "×",
        -                "÷",
        -                "(",
        -                ")"
        -              ],
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Required when type is OPERATOR. Use × and ÷ for multiply/divide (what the UI writes); the ASCII * and / are also accepted since migrated formulas use them. Grouping: ( and )"
        -        },
        -        "query": {
        -          "anyOf": [
        -            {
        -              "additionalProperties": true,
        -              "description": "A builder query: which datasource, view, metrics, dimensions and filters to compute",
        -              "properties": {
        -                "advanced": {
        -                  "additionalProperties": {},
        -                  "description": "Datasource-specific settings — describe_datasource lists required keys per view",
        -                  "type": "object"
        -                },
        -                "data_view": {
        -                  "description": "Data view (from describe_datasource), e.g. ACCOUNT",
        -                  "type": "string"
        -                },
        -                "datasource_id": {
        -                  "description": "Datasource alias, e.g. gadw (from datasources)",
        -                  "enum": [
        -                    "advanced-web-ranking",
        -                    "ac",
        -                    "adroll",
        -                    "ahrefs",
        -                    "basecamp",
        -                    "brightlocal",
        -                    "call-rail",
        -                    "drip",
        -                    "keywords",
        -                    "sendin-blue",
        -                    "sendgrid",
        -                    "moosend",
        -                    "mailer-lite",
        -                    "pingdom",
        -                    "uptime-robot",
        -                    "piwik-pro",
        -                    "wordpress",
        -                    "pabbly-connect",
        -                    "ment",
        -                    "twilio",
        -                    "switchy",
        -                    "vimeo",
        -                    "pinterest",
        -                    "pinterest-ads",
        -                    "gtres",
        -                    "paypal",
        -                    "gps",
        -                    "gs",
        -                    "CUSTOM_IMPORT",
        -                    "CUSTOM_DATA",
        -                    "CALCULATION",
        -                    "GOALS",
        -                    "str",
        -                    "wistia",
        -                    "ca-mon",
        -                    "convertkit",
        -                    "woocommerce",
        -                    "xero",
        -                    "matomo",
        -                    "go-high-level",
        -                    "wcs",
        -                    "bing-webmaster-tools",
        -                    "pipedrive",
        -                    "salesforce",
        -                    "tiktok",
        -                    "tiktok-ads",
        -                    "twr",
        -                    "twr-ads",
        -                    "spf",
        -                    "ytbe",
        -                    "google-local-services-ads",
        -                    "klaviyo",
        -                    "gsh",
        -                    "ga4",
        -                    "lkdin-ads",
        -                    "lkdin-pg",
        -                    "mlchmp",
        -                    "inst-ads",
        -                    "inst",
        -                    "fb-ads",
        -                    "fb-pg",
        -                    "gmb",
        -                    "serpstat",
        -                    "hubspot",
        -                    "gadw",
        -                    "sem-rush",
        -                    "se-ranking",
        -                    "microsoft-ads",
        -                    "plausible",
        -                    "snapchat-ads",
        -                    "amazon-advertising",
        -                    "microsoft-clarity",
        -                    "serp-watch",
        -                    "vbout",
        -                    "moz",
        -                    "chatgpt-ads",
        -                    "omnisend",
        -                    "airtable",
        -                    "nozzle",
        -                    "surnex",
        -                    "clickup",
        -                    "make",
        -                    "freshdesk",
        -                    "chart-mogul",
        -                    "amplitude",
        -                    "harvest",
        -                    "zoho-crm",
        -                    "clockify",
        -                    "demo"
        -                  ],
        -                  "type": "string"
        -                },
        -                "dimensions": {
        -                  "description": "Breakdown dimensions, e.g. [{ value: \"DATE\" }]",
        -                  "items": {
        -                    "additionalProperties": true,
        -                    "properties": {
        -                      "custom": {
        -                        "description": "A dynamic dimension absent from the static catalog",
        -                        "type": "boolean"
        -                      },
        -                      "data_view": {
        -                        "description": "Data view the dimension belongs to; filled from the catalog when omitted",
        -                        "type": "string"
        -                      },
        -                      "label": {
        -                        "description": "Display name — renames the dimension on the widget",
        -                        "type": "string"
        -                      },
        -                      "selector": {
        -                        "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true",
        -                        "type": "string"
        -                      },
        -                      "value": {
        -                        "description": "Dimension id (from describe_datasource)",
        -                        "type": "string"
        -                      }
        -                    },
        -                    "required": [
        -                      "value"
        -                    ],
        -                    "type": "object"
        -                  },
        -                  "type": "array"
        -                },
        -                "filters": {
        -                  "description": "Row filters",
        -                  "items": {
        -                    "additionalProperties": true,
        -                    "properties": {
        -                      "field": {
        -                        "description": "Metric or dimension id to filter on",
        -                        "type": "string"
        -                      },
        -                      "logicalOperator": {
        -                        "anyOf": [
        -                          {
        -                            "enum": [
        -                              "and",
        -                              "or"
        -                            ],
        -                            "type": "string"
        -                          },
        -                          {
        -                            "type": "null"
        -                          }
        -                        ],
        -                        "description": "How this row joins the previous one — 'and' (default) or 'or'"
        -                      },
        -                      "operator": {
        -                        "description": "Operator id — the valid list per datasource comes from describe_datasource",
        -                        "type": "string"
        -                      },
        -                      "value": {
        -                        "anyOf": [
        -                          {
        -                            "type": "string"
        -                          },
        -                          {
        -                            "type": "number"
        -                          },
        -                          {
        -                            "type": "boolean"
        -                          },
        -                          {
        -                            "items": {},
        -                            "type": "array"
        -                          }
        -                        ],
        -                        "description": "Value to compare against"
        -                      }
        -                    },
        -                    "required": [
        -                      "field",
        -                      "operator",
        -                      "value"
        -                    ],
        -                    "type": "object"
        -                  },
        -                  "type": "array"
        -                },
        -                "metrics": {
        -                  "description": "Metrics to compute over — must belong to the data view",
        -                  "items": {
        -                    "additionalProperties": true,
        -                    "properties": {
        -                      "action_type": {
        -                        "description": "Meta/Instagram action-based metrics only (actions, conversions, cost_per_action_type…) — the action key the value is read under. Filled from the catalog — only send it with custom: true",
        -                        "type": "string"
        -                      },
        -                      "custom": {
        -                        "description": "A dynamic per-account metric absent from the static catalog (e.g. a Meta custom conversion)",
        -                        "type": "boolean"
        -                      },
        -                      "data_view": {
        -                        "description": "Data view the metric belongs to; resolved from the catalog when omitted",
        -                        "type": "string"
        -                      },
        -                      "invert_comparison": {
        -                        "description": "Colour a rise as negative — for lower-is-better metrics (cost, CPC, bounce rate)",
        -                        "type": "boolean"
        -                      },
        -                      "label": {
        -                        "description": "Display name — renames the metric on the widget",
        -                        "type": "string"
        -                      },
        -                      "request_metrics": {
        -                        "description": "The upstream vendor field(s) this metric is built from. Filled from the catalog — only send it with custom: true",
        -                        "items": {
        -                          "type": "string"
        -                        },
        -                        "type": "array"
        -                      },
        -                      "selector": {
        -                        "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true, copying what describe_datasource reports",
        -                        "type": "string"
        -                      },
        -                      "summary": {
        -                        "description": "Aggregation for the total: 'SUM', 'AVG', 'MAX', or 'MIN'",
        -                        "enum": [
        -                          "SUM",
        -                          "AVG",
        -                          "MAX",
        -                          "MIN"
        -                        ],
        -                        "type": "string"
        -                      },
        -                      "symbol": {
        -                        "description": "Number format. Numeric: 'number' (plain), 'decimal', 'percent' (or '%'), 'currency' (or '$'). Duration: 's', 'ms', 'time', 'seconds', 'minutes', 'milliseconds'. Passed through unformatted: 'text', 'link', 'date'",
        -                        "enum": [
        -                          "number",
        -                          "decimal",
        -                          "percent",
        -                          "%",
        -                          "currency",
        -                          "$",
        -                          "text",
        -                          "link",
        -                          "date",
        -                          "s",
        -                          "ms",
        -                          "time",
        -                          "seconds",
        -                          "minutes",
        -                          "milliseconds"
        -                        ],
        -                        "type": "string"
        -                      },
        -                      "value": {
        -                        "description": "Metric id (from describe_datasource)",
        -                        "type": "string"
        -                      }
        -                    },
        -                    "required": [
        -                      "value"
        -                    ],
        -                    "type": "object"
        -                  },
        -                  "type": "array"
        -                }
        -              },
        -              "type": "object"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Required when type is METRIC — the query whose value this token contributes"
        -        },
        -        "type": {
        -          "description": "'METRIC' (a query), 'NUMBER' (a literal), or 'OPERATOR' (an arithmetic symbol)",
        -          "enum": [
        -            "METRIC",
        -            "NUMBER",
        -            "OPERATOR"
        -          ],
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "id": {
        +          "description": "Unique token id within the formula, e.g. \"t1\"",
        +          "type": "string"
        +        },
        +        "number": {
        +          "description": "Required when type is NUMBER",
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "operator": {
        +          "anyOf": [
        +            {
        +              "enum": [
        +                "+",
        +                "-",
        +                "*",
        +                "/",
        +                "×",
        +                "÷",
        +                "(",
        +                ")"
        +              ],
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Required when type is OPERATOR. Use × and ÷ for multiply/divide (what the UI writes); the ASCII * and / are also accepted since migrated formulas use them. Grouping: ( and )"
        +        },
        +        "query": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "description": "A builder query: which datasource, view, metrics, dimensions and filters to compute",
        +              "properties": {
        +                "advanced": {
        +                  "additionalProperties": {},
        +                  "description": "Datasource-specific settings — describe_datasource lists required keys per view",
        +                  "type": "object"
        +                },
        +                "data_view": {
        +                  "description": "Data view (from describe_datasource), e.g. ACCOUNT",
        +                  "type": "string"
        +                },
        +                "datasource_id": {
        +                  "description": "Datasource alias, e.g. gadw (from datasources)",
        +                  "enum": [
        +                    "advanced-web-ranking",
        +                    "ac",
        +                    "adroll",
        +                    "ahrefs",
        +                    "basecamp",
        +                    "brightlocal",
        +                    "call-rail",
        +                    "drip",
        +                    "keywords",
        +                    "sendin-blue",
        +                    "sendgrid",
        +                    "moosend",
        +                    "mailer-lite",
        +                    "pingdom",
        +                    "uptime-robot",
        +                    "piwik-pro",
        +                    "wordpress",
        +                    "pabbly-connect",
        +                    "ment",
        +                    "twilio",
        +                    "switchy",
        +                    "vimeo",
        +                    "pinterest",
        +                    "pinterest-ads",
        +                    "gtres",
        +                    "paypal",
        +                    "gps",
        +                    "gs",
        +                    "CUSTOM_IMPORT",
        +                    "CUSTOM_DATA",
        +                    "CALCULATION",
        +                    "GOALS",
        +                    "str",
        +                    "wistia",
        +                    "ca-mon",
        +                    "convertkit",
        +                    "woocommerce",
        +                    "xero",
        +                    "matomo",
        +                    "go-high-level",
        +                    "wcs",
        +                    "bing-webmaster-tools",
        +                    "pipedrive",
        +                    "salesforce",
        +                    "tiktok",
        +                    "tiktok-ads",
        +                    "twr",
        +                    "twr-ads",
        +                    "spf",
        +                    "ytbe",
        +                    "google-local-services-ads",
        +                    "klaviyo",
        +                    "gsh",
        +                    "ga4",
        +                    "lkdin-ads",
        +                    "lkdin-pg",
        +                    "mlchmp",
        +                    "inst-ads",
        +                    "inst",
        +                    "fb-ads",
        +                    "fb-pg",
        +                    "gmb",
        +                    "serpstat",
        +                    "hubspot",
        +                    "gadw",
        +                    "sem-rush",
        +                    "se-ranking",
        +                    "microsoft-ads",
        +                    "plausible",
        +                    "snapchat-ads",
        +                    "amazon-advertising",
        +                    "microsoft-clarity",
        +                    "serp-watch",
        +                    "vbout",
        +                    "moz",
        +                    "chatgpt-ads",
        +                    "omnisend",
        +                    "airtable",
        +                    "nozzle",
        +                    "surnex",
        +                    "clickup",
        +                    "make",
        +                    "freshdesk",
        +                    "chart-mogul",
        +                    "amplitude",
        +                    "harvest",
        +                    "zoho-crm",
        +                    "clockify",
        +                    "adtraction",
        +                    "demo"
        +                  ],
        +                  "type": "string"
        +                },
        +                "dimensions": {
        +                  "description": "Breakdown dimensions, e.g. [{ value: \"DATE\" }]",
        +                  "items": {
        +                    "additionalProperties": true,
        +                    "properties": {
        +                      "custom": {
        +                        "description": "A dynamic dimension absent from the static catalog",
        +                        "type": "boolean"
        +                      },
        +                      "data_view": {
        +                        "description": "Data view the dimension belongs to; filled from the catalog when omitted",
        +                        "type": "string"
        +                      },
        +                      "label": {
        +                        "description": "Display name — renames the dimension on the widget",
        +                        "type": "string"
        +                      },
        +                      "selector": {
        +                        "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true",
        +                        "type": "string"
        +                      },
        +                      "value": {
        +                        "description": "Dimension id (from describe_datasource)",
        +                        "type": "string"
        +                      }
        +                    },
        +                    "required": [
        +                      "value"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "type": "array"
        +                },
        +                "filters": {
        +                  "description": "Row filters",
        +                  "items": {
        +                    "additionalProperties": true,
        +                    "properties": {
        +                      "field": {
        +                        "description": "Metric or dimension id to filter on",
        +                        "type": "string"
        +                      },
        +                      "logicalOperator": {
        +                        "anyOf": [
        +                          {
        +                            "enum": [
        +                              "and",
        +                              "or"
        +                            ],
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "description": "How this row joins the previous one — 'and' (default) or 'or'"
        +                      },
        +                      "operator": {
        +                        "description": "Operator id — the valid list per datasource comes from describe_datasource",
        +                        "type": "string"
        +                      },
        +                      "value": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "number"
        +                          },
        +                          {
        +                            "type": "boolean"
        +                          },
        +                          {
        +                            "items": {},
        +                            "type": "array"
        +                          }
        +                        ],
        +                        "description": "Value to compare against"
        +                      }
        +                    },
        +                    "required": [
        +                      "field",
        +                      "operator",
        +                      "value"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "type": "array"
        +                },
        +                "metrics": {
        +                  "description": "Metrics to compute over — must belong to the data view",
        +                  "items": {
        +                    "additionalProperties": true,
        +                    "properties": {
        +                      "action_type": {
        +                        "description": "Meta/Instagram action-based metrics only (actions, conversions, cost_per_action_type…) — the action key the value is read under. Filled from the catalog — only send it with custom: true",
        +                        "type": "string"
        +                      },
        +                      "custom": {
        +                        "description": "A dynamic per-account metric absent from the static catalog (e.g. a Meta custom conversion)",
        +                        "type": "boolean"
        +                      },
        +                      "data_view": {
        +                        "description": "Data view the metric belongs to; resolved from the catalog when omitted",
        +                        "type": "string"
        +                      },
        +                      "invert_comparison": {
        +                        "description": "Colour a rise as negative — for lower-is-better metrics (cost, CPC, bounce rate)",
        +                        "type": "boolean"
        +                      },
        +                      "label": {
        +                        "description": "Display name — renames the metric on the widget",
        +                        "type": "string"
        +                      },
        +                      "request_metrics": {
        +                        "description": "The upstream vendor field(s) this metric is built from. Filled from the catalog — only send it with custom: true",
        +                        "items": {
        +                          "type": "string"
        +                        },
        +                        "type": "array"
        +                      },
        +                      "selector": {
        +                        "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true, copying what describe_datasource reports",
        +                        "type": "string"
        +                      },
        +                      "summary": {
        +                        "description": "Aggregation for the total: 'SUM', 'AVG', 'MAX', or 'MIN'",
        +                        "enum": [
        +                          "SUM",
        +                          "AVG",
        +                          "MAX",
        +                          "MIN"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      "symbol": {
        +                        "description": "Number format. Numeric: 'number' (plain), 'decimal', 'percent' (or '%'), 'currency' (or '$'). Duration: 's', 'ms', 'time', 'seconds', 'minutes', 'milliseconds'. Passed through unformatted: 'text', 'link', 'date'",
        +                        "enum": [
        +                          "number",
        +                          "decimal",
        +                          "percent",
        +                          "%",
        +                          "currency",
        +                          "$",
        +                          "text",
        +                          "link",
        +                          "date",
        +                          "s",
        +                          "ms",
        +                          "time",
        +                          "seconds",
        +                          "minutes",
        +                          "milliseconds"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      "value": {
        +                        "description": "Metric id (from describe_datasource)",
        +                        "type": "string"
        +                      }
        +                    },
        +                    "required": [
        +                      "value"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "type": "array"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Required when type is METRIC — the query whose value this token contributes"
        +        },
        +        "type": {
        +          "description": "'METRIC' (a query), 'NUMBER' (a literal), or 'OPERATOR' (an arithmetic symbol)",
        +          "enum": [
        +            "METRIC",
        +            "NUMBER",
        +            "OPERATOR"
        +          ],
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "id",
        +        "type"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
    • Changedcreate_connection1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk",
        -  "chart-mogul",
        -  "amplitude",
        -  "harvest",
        -  "zoho-crm",
        -  "clockify"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude",
        +  "harvest",
        +  "zoho-crm",
        +  "clockify",
        +  "adtraction"
        +]
    • Changedcreate_goal1 field changed
      • changedInput schema / properties / query / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk",
        -  "chart-mogul",
        -  "amplitude",
        -  "harvest",
        -  "zoho-crm",
        -  "clockify",
        -  "demo"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude",
        +  "harvest",
        +  "zoho-crm",
        +  "clockify",
        +  "adtraction",
        +  "demo"
        +]
    • Changeddatasource_resources1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk",
        -  "chart-mogul",
        -  "amplitude",
        -  "harvest",
        -  "zoho-crm",
        -  "clockify"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude",
        +  "harvest",
        +  "zoho-crm",
        +  "clockify",
        +  "adtraction"
        +]
    • Changeddescribe_datasource1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk",
        -  "chart-mogul",
        -  "amplitude",
        -  "harvest",
        -  "zoho-crm",
        -  "clockify"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude",
        +  "harvest",
        +  "zoho-crm",
        +  "clockify",
        +  "adtraction"
        +]
    • Changedlink_datasource1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk",
        -  "chart-mogul",
        -  "amplitude",
        -  "harvest",
        -  "zoho-crm",
        -  "clockify"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude",
        +  "harvest",
        +  "zoho-crm",
        +  "clockify",
        +  "adtraction"
        +]
    • Changedlist_assets1 field changed
      • changedInput schema / properties / datasources / items / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk",
        -  "chart-mogul",
        -  "amplitude",
        -  "harvest",
        -  "zoho-crm",
        -  "clockify"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude",
        +  "harvest",
        +  "zoho-crm",
        +  "clockify",
        +  "adtraction"
        +]
    • Changedlist_templates1 field changed
      • changedInput schema / properties / datasources / items / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk",
        -  "chart-mogul",
        -  "amplitude",
        -  "harvest",
        -  "zoho-crm",
        -  "clockify"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude",
        +  "harvest",
        +  "zoho-crm",
        +  "clockify",
        +  "adtraction"
        +]
    • Changedquery_data1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk",
        -  "chart-mogul",
        -  "amplitude",
        -  "harvest",
        -  "zoho-crm",
        -  "clockify"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude",
        +  "harvest",
        +  "zoho-crm",
        +  "clockify",
        +  "adtraction"
        +]
    • Changedrefresh_report1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk",
        -  "chart-mogul",
        -  "amplitude",
        -  "harvest",
        -  "zoho-crm",
        -  "clockify"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude",
        +  "harvest",
        +  "zoho-crm",
        +  "clockify",
        +  "adtraction"
        +]
    • Changedtest_connection1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk",
        -  "chart-mogul",
        -  "amplitude",
        -  "harvest",
        -  "zoho-crm",
        -  "clockify"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude",
        +  "harvest",
        +  "zoho-crm",
        +  "clockify",
        +  "adtraction"
        +]
    • Changedunlink_datasource1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk",
        -  "chart-mogul",
        -  "amplitude",
        -  "harvest",
        -  "zoho-crm",
        -  "clockify"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude",
        +  "harvest",
        +  "zoho-crm",
        +  "clockify",
        +  "adtraction"
        +]
    • Changedupdate_calculated_metric1 field changed
      • changedInput schema / properties / formula / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": true,
        -      "properties": {
        -        "id": {
        -          "description": "Unique token id within the formula, e.g. \"t1\"",
        -          "type": "string"
        -        },
        -        "number": {
        -          "description": "Required when type is NUMBER",
        -          "type": [
        -            "number",
        -            "null"
        -          ]
        -        },
        -        "operator": {
        -          "anyOf": [
        -            {
        -              "enum": [
        -                "+",
        -                "-",
        -                "*",
        -                "/",
        -                "×",
        -                "÷",
        -                "(",
        -                ")"
        -              ],
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Required when type is OPERATOR. Use × and ÷ for multiply/divide (what the UI writes); the ASCII * and / are also accepted since migrated formulas use them. Grouping: ( and )"
        -        },
        -        "query": {
        -          "anyOf": [
        -            {
        -              "additionalProperties": true,
        -              "description": "A builder query: which datasource, view, metrics, dimensions and filters to compute",
        -              "properties": {
        -                "advanced": {
        -                  "additionalProperties": {},
        -                  "description": "Datasource-specific settings — describe_datasource lists required keys per view",
        -                  "type": "object"
        -                },
        -                "data_view": {
        -                  "description": "Data view (from describe_datasource), e.g. ACCOUNT",
        -                  "type": "string"
        -                },
        -                "datasource_id": {
        -                  "description": "Datasource alias, e.g. gadw (from datasources)",
        -                  "enum": [
        -                    "advanced-web-ranking",
        -                    "ac",
        -                    "adroll",
        -                    "ahrefs",
        -                    "basecamp",
        -                    "brightlocal",
        -                    "call-rail",
        -                    "drip",
        -                    "keywords",
        -                    "sendin-blue",
        -                    "sendgrid",
        -                    "moosend",
        -                    "mailer-lite",
        -                    "pingdom",
        -                    "uptime-robot",
        -                    "piwik-pro",
        -                    "wordpress",
        -                    "pabbly-connect",
        -                    "ment",
        -                    "twilio",
        -                    "switchy",
        -                    "vimeo",
        -                    "pinterest",
        -                    "pinterest-ads",
        -                    "gtres",
        -                    "paypal",
        -                    "gps",
        -                    "gs",
        -                    "CUSTOM_IMPORT",
        -                    "CUSTOM_DATA",
        -                    "CALCULATION",
        -                    "GOALS",
        -                    "str",
        -                    "wistia",
        -                    "ca-mon",
        -                    "convertkit",
        -                    "woocommerce",
        -                    "xero",
        -                    "matomo",
        -                    "go-high-level",
        -                    "wcs",
        -                    "bing-webmaster-tools",
        -                    "pipedrive",
        -                    "salesforce",
        -                    "tiktok",
        -                    "tiktok-ads",
        -                    "twr",
        -                    "twr-ads",
        -                    "spf",
        -                    "ytbe",
        -                    "google-local-services-ads",
        -                    "klaviyo",
        -                    "gsh",
        -                    "ga4",
        -                    "lkdin-ads",
        -                    "lkdin-pg",
        -                    "mlchmp",
        -                    "inst-ads",
        -                    "inst",
        -                    "fb-ads",
        -                    "fb-pg",
        -                    "gmb",
        -                    "serpstat",
        -                    "hubspot",
        -                    "gadw",
        -                    "sem-rush",
        -                    "se-ranking",
        -                    "microsoft-ads",
        -                    "plausible",
        -                    "snapchat-ads",
        -                    "amazon-advertising",
        -                    "microsoft-clarity",
        -                    "serp-watch",
        -                    "vbout",
        -                    "moz",
        -                    "chatgpt-ads",
        -                    "omnisend",
        -                    "airtable",
        -                    "nozzle",
        -                    "surnex",
        -                    "clickup",
        -                    "make",
        -                    "freshdesk",
        -                    "chart-mogul",
        -                    "amplitude",
        -                    "harvest",
        -                    "zoho-crm",
        -                    "clockify",
        -                    "demo"
        -                  ],
        -                  "type": "string"
        -                },
        -                "dimensions": {
        -                  "description": "Breakdown dimensions, e.g. [{ value: \"DATE\" }]",
        -                  "items": {
        -                    "additionalProperties": true,
        -                    "properties": {
        -                      "custom": {
        -                        "description": "A dynamic dimension absent from the static catalog",
        -                        "type": "boolean"
        -                      },
        -                      "data_view": {
        -                        "description": "Data view the dimension belongs to; filled from the catalog when omitted",
        -                        "type": "string"
        -                      },
        -                      "label": {
        -                        "description": "Display name — renames the dimension on the widget",
        -                        "type": "string"
        -                      },
        -                      "selector": {
        -                        "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true",
        -                        "type": "string"
        -                      },
        -                      "value": {
        -                        "description": "Dimension id (from describe_datasource)",
        -                        "type": "string"
        -                      }
        -                    },
        -                    "required": [
        -                      "value"
        -                    ],
        -                    "type": "object"
        -                  },
        -                  "type": "array"
        -                },
        -                "filters": {
        -                  "description": "Row filters",
        -                  "items": {
        -                    "additionalProperties": true,
        -                    "properties": {
        -                      "field": {
        -                        "description": "Metric or dimension id to filter on",
        -                        "type": "string"
        -                      },
        -                      "logicalOperator": {
        -                        "anyOf": [
        -                          {
        -                            "enum": [
        -                              "and",
        -                              "or"
        -                            ],
        -                            "type": "string"
        -                          },
        -                          {
        -                            "type": "null"
        -                          }
        -                        ],
        -                        "description": "How this row joins the previous one — 'and' (default) or 'or'"
        -                      },
        -                      "operator": {
        -                        "description": "Operator id — the valid list per datasource comes from describe_datasource",
        -                        "type": "string"
        -                      },
        -                      "value": {
        -                        "anyOf": [
        -                          {
        -                            "type": "string"
        -                          },
        -                          {
        -                            "type": "number"
        -                          },
        -                          {
        -                            "type": "boolean"
        -                          },
        -                          {
        -                            "items": {},
        -                            "type": "array"
        -                          }
        -                        ],
        -                        "description": "Value to compare against"
        -                      }
        -                    },
        -                    "required": [
        -                      "field",
        -                      "operator",
        -                      "value"
        -                    ],
        -                    "type": "object"
        -                  },
        -                  "type": "array"
        -                },
        -                "metrics": {
        -                  "description": "Metrics to compute over — must belong to the data view",
        -                  "items": {
        -                    "additionalProperties": true,
        -                    "properties": {
        -                      "action_type": {
        -                        "description": "Meta/Instagram action-based metrics only (actions, conversions, cost_per_action_type…) — the action key the value is read under. Filled from the catalog — only send it with custom: true",
        -                        "type": "string"
        -                      },
        -                      "custom": {
        -                        "description": "A dynamic per-account metric absent from the static catalog (e.g. a Meta custom conversion)",
        -                        "type": "boolean"
        -                      },
        -                      "data_view": {
        -                        "description": "Data view the metric belongs to; resolved from the catalog when omitted",
        -                        "type": "string"
        -                      },
        -                      "invert_comparison": {
        -                        "description": "Colour a rise as negative — for lower-is-better metrics (cost, CPC, bounce rate)",
        -                        "type": "boolean"
        -                      },
        -                      "label": {
        -                        "description": "Display name — renames the metric on the widget",
        -                        "type": "string"
        -                      },
        -                      "request_metrics": {
        -                        "description": "The upstream vendor field(s) this metric is built from. Filled from the catalog — only send it with custom: true",
        -                        "items": {
        -                          "type": "string"
        -                        },
        -                        "type": "array"
        -                      },
        -                      "selector": {
        -                        "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true, copying what describe_datasource reports",
        -                        "type": "string"
        -                      },
        -                      "summary": {
        -                        "description": "Aggregation for the total: 'SUM', 'AVG', 'MAX', or 'MIN'",
        -                        "enum": [
        -                          "SUM",
        -                          "AVG",
        -                          "MAX",
        -                          "MIN"
        -                        ],
        -                        "type": "string"
        -                      },
        -                      "symbol": {
        -                        "description": "Number format. Numeric: 'number' (plain), 'decimal', 'percent' (or '%'), 'currency' (or '$'). Duration: 's', 'ms', 'time', 'seconds', 'minutes', 'milliseconds'. Passed through unformatted: 'text', 'link', 'date'",
        -                        "enum": [
        -                          "number",
        -                          "decimal",
        -                          "percent",
        -                          "%",
        -                          "currency",
        -                          "$",
        -                          "text",
        -                          "link",
        -                          "date",
        -                          "s",
        -                          "ms",
        -                          "time",
        -                          "seconds",
        -                          "minutes",
        -                          "milliseconds"
        -                        ],
        -                        "type": "string"
        -                      },
        -                      "value": {
        -                        "description": "Metric id (from describe_datasource)",
        -                        "type": "string"
        -                      }
        -                    },
        -                    "required": [
        -                      "value"
        -                    ],
        -                    "type": "object"
        -                  },
        -                  "type": "array"
        -                }
        -              },
        -              "type": "object"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Required when type is METRIC — the query whose value this token contributes"
        -        },
        -        "type": {
        -          "description": "'METRIC' (a query), 'NUMBER' (a literal), or 'OPERATOR' (an arithmetic symbol)",
        -          "enum": [
        -            "METRIC",
        -            "NUMBER",
        -            "OPERATOR"
        -          ],
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "id": {
        +          "description": "Unique token id within the formula, e.g. \"t1\"",
        +          "type": "string"
        +        },
        +        "number": {
        +          "description": "Required when type is NUMBER",
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "operator": {
        +          "anyOf": [
        +            {
        +              "enum": [
        +                "+",
        +                "-",
        +                "*",
        +                "/",
        +                "×",
        +                "÷",
        +                "(",
        +                ")"
        +              ],
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Required when type is OPERATOR. Use × and ÷ for multiply/divide (what the UI writes); the ASCII * and / are also accepted since migrated formulas use them. Grouping: ( and )"
        +        },
        +        "query": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "description": "A builder query: which datasource, view, metrics, dimensions and filters to compute",
        +              "properties": {
        +                "advanced": {
        +                  "additionalProperties": {},
        +                  "description": "Datasource-specific settings — describe_datasource lists required keys per view",
        +                  "type": "object"
        +                },
        +                "data_view": {
        +                  "description": "Data view (from describe_datasource), e.g. ACCOUNT",
        +                  "type": "string"
        +                },
        +                "datasource_id": {
        +                  "description": "Datasource alias, e.g. gadw (from datasources)",
        +                  "enum": [
        +                    "advanced-web-ranking",
        +                    "ac",
        +                    "adroll",
        +                    "ahrefs",
        +                    "basecamp",
        +                    "brightlocal",
        +                    "call-rail",
        +                    "drip",
        +                    "keywords",
        +                    "sendin-blue",
        +                    "sendgrid",
        +                    "moosend",
        +                    "mailer-lite",
        +                    "pingdom",
        +                    "uptime-robot",
        +                    "piwik-pro",
        +                    "wordpress",
        +                    "pabbly-connect",
        +                    "ment",
        +                    "twilio",
        +                    "switchy",
        +                    "vimeo",
        +                    "pinterest",
        +                    "pinterest-ads",
        +                    "gtres",
        +                    "paypal",
        +                    "gps",
        +                    "gs",
        +                    "CUSTOM_IMPORT",
        +                    "CUSTOM_DATA",
        +                    "CALCULATION",
        +                    "GOALS",
        +                    "str",
        +                    "wistia",
        +                    "ca-mon",
        +                    "convertkit",
        +                    "woocommerce",
        +                    "xero",
        +                    "matomo",
        +                    "go-high-level",
        +                    "wcs",
        +                    "bing-webmaster-tools",
        +                    "pipedrive",
        +                    "salesforce",
        +                    "tiktok",
        +                    "tiktok-ads",
        +                    "twr",
        +                    "twr-ads",
        +                    "spf",
        +                    "ytbe",
        +                    "google-local-services-ads",
        +                    "klaviyo",
        +                    "gsh",
        +                    "ga4",
        +                    "lkdin-ads",
        +                    "lkdin-pg",
        +                    "mlchmp",
        +                    "inst-ads",
        +                    "inst",
        +                    "fb-ads",
        +                    "fb-pg",
        +                    "gmb",
        +                    "serpstat",
        +                    "hubspot",
        +                    "gadw",
        +                    "sem-rush",
        +                    "se-ranking",
        +                    "microsoft-ads",
        +                    "plausible",
        +                    "snapchat-ads",
        +                    "amazon-advertising",
        +                    "microsoft-clarity",
        +                    "serp-watch",
        +                    "vbout",
        +                    "moz",
        +                    "chatgpt-ads",
        +                    "omnisend",
        +                    "airtable",
        +                    "nozzle",
        +                    "surnex",
        +                    "clickup",
        +                    "make",
        +                    "freshdesk",
        +                    "chart-mogul",
        +                    "amplitude",
        +                    "harvest",
        +                    "zoho-crm",
        +                    "clockify",
        +                    "adtraction",
        +                    "demo"
        +                  ],
        +                  "type": "string"
        +                },
        +                "dimensions": {
        +                  "description": "Breakdown dimensions, e.g. [{ value: \"DATE\" }]",
        +                  "items": {
        +                    "additionalProperties": true,
        +                    "properties": {
        +                      "custom": {
        +                        "description": "A dynamic dimension absent from the static catalog",
        +                        "type": "boolean"
        +                      },
        +                      "data_view": {
        +                        "description": "Data view the dimension belongs to; filled from the catalog when omitted",
        +                        "type": "string"
        +                      },
        +                      "label": {
        +                        "description": "Display name — renames the dimension on the widget",
        +                        "type": "string"
        +                      },
        +                      "selector": {
        +                        "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true",
        +                        "type": "string"
        +                      },
        +                      "value": {
        +                        "description": "Dimension id (from describe_datasource)",
        +                        "type": "string"
        +                      }
        +                    },
        +                    "required": [
        +                      "value"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "type": "array"
        +                },
        +                "filters": {
        +                  "description": "Row filters",
        +                  "items": {
        +                    "additionalProperties": true,
        +                    "properties": {
        +                      "field": {
        +                        "description": "Metric or dimension id to filter on",
        +                        "type": "string"
        +                      },
        +                      "logicalOperator": {
        +                        "anyOf": [
        +                          {
        +                            "enum": [
        +                              "and",
        +                              "or"
        +                            ],
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "description": "How this row joins the previous one — 'and' (default) or 'or'"
        +                      },
        +                      "operator": {
        +                        "description": "Operator id — the valid list per datasource comes from describe_datasource",
        +                        "type": "string"
        +                      },
        +                      "value": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "number"
        +                          },
        +                          {
        +                            "type": "boolean"
        +                          },
        +                          {
        +                            "items": {},
        +                            "type": "array"
        +                          }
        +                        ],
        +                        "description": "Value to compare against"
        +                      }
        +                    },
        +                    "required": [
        +                      "field",
        +                      "operator",
        +                      "value"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "type": "array"
        +                },
        +                "metrics": {
        +                  "description": "Metrics to compute over — must belong to the data view",
        +                  "items": {
        +                    "additionalProperties": true,
        +                    "properties": {
        +                      "action_type": {
        +                        "description": "Meta/Instagram action-based metrics only (actions, conversions, cost_per_action_type…) — the action key the value is read under. Filled from the catalog — only send it with custom: true",
        +                        "type": "string"
        +                      },
        +                      "custom": {
        +                        "description": "A dynamic per-account metric absent from the static catalog (e.g. a Meta custom conversion)",
        +                        "type": "boolean"
        +                      },
        +                      "data_view": {
        +                        "description": "Data view the metric belongs to; resolved from the catalog when omitted",
        +                        "type": "string"
        +                      },
        +                      "invert_comparison": {
        +                        "description": "Colour a rise as negative — for lower-is-better metrics (cost, CPC, bounce rate)",
        +                        "type": "boolean"
        +                      },
        +                      "label": {
        +                        "description": "Display name — renames the metric on the widget",
        +                        "type": "string"
        +                      },
        +                      "request_metrics": {
        +                        "description": "The upstream vendor field(s) this metric is built from. Filled from the catalog — only send it with custom: true",
        +                        "items": {
        +                          "type": "string"
        +                        },
        +                        "type": "array"
        +                      },
        +                      "selector": {
        +                        "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true, copying what describe_datasource reports",
        +                        "type": "string"
        +                      },
        +                      "summary": {
        +                        "description": "Aggregation for the total: 'SUM', 'AVG', 'MAX', or 'MIN'",
        +                        "enum": [
        +                          "SUM",
        +                          "AVG",
        +                          "MAX",
        +                          "MIN"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      "symbol": {
        +                        "description": "Number format. Numeric: 'number' (plain), 'decimal', 'percent' (or '%'), 'currency' (or '$'). Duration: 's', 'ms', 'time', 'seconds', 'minutes', 'milliseconds'. Passed through unformatted: 'text', 'link', 'date'",
        +                        "enum": [
        +                          "number",
        +                          "decimal",
        +                          "percent",
        +                          "%",
        +                          "currency",
        +                          "$",
        +                          "text",
        +                          "link",
        +                          "date",
        +                          "s",
        +                          "ms",
        +                          "time",
        +                          "seconds",
        +                          "minutes",
        +                          "milliseconds"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      "value": {
        +                        "description": "Metric id (from describe_datasource)",
        +                        "type": "string"
        +                      }
        +                    },
        +                    "required": [
        +                      "value"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "type": "array"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Required when type is METRIC — the query whose value this token contributes"
        +        },
        +        "type": {
        +          "description": "'METRIC' (a query), 'NUMBER' (a literal), or 'OPERATOR' (an arithmetic symbol)",
        +          "enum": [
        +            "METRIC",
        +            "NUMBER",
        +            "OPERATOR"
        +          ],
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "id",
        +        "type"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
    • Changedupdate_data_widget1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk",
        -  "chart-mogul",
        -  "amplitude",
        -  "harvest",
        -  "zoho-crm",
        -  "clockify"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude",
        +  "harvest",
        +  "zoho-crm",
        +  "clockify",
        +  "adtraction"
        +]
    • Changedupdate_goal1 field changed
      • changedInput schema / properties / query / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk",
        -  "chart-mogul",
        -  "amplitude",
        -  "harvest",
        -  "zoho-crm",
        -  "clockify",
        -  "demo"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude",
        +  "harvest",
        +  "zoho-crm",
        +  "clockify",
        +  "adtraction",
        +  "demo"
        +]
  2. 16 tool updates
    • Changedadd_data_widget1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk",
        -  "chart-mogul",
        -  "amplitude",
        -  "harvest"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude",
        +  "harvest",
        +  "zoho-crm",
        +  "clockify"
        +]
    • Changedcreate_calculated_metric1 field changed
      • changedInput schema / properties / formula / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": true,
        -      "properties": {
        -        "id": {
        -          "description": "Unique token id within the formula, e.g. \"t1\"",
        -          "type": "string"
        -        },
        -        "number": {
        -          "description": "Required when type is NUMBER",
        -          "type": [
        -            "number",
        -            "null"
        -          ]
        -        },
        -        "operator": {
        -          "anyOf": [
        -            {
        -              "enum": [
        -                "+",
        -                "-",
        -                "*",
        -                "/",
        -                "×",
        -                "÷",
        -                "(",
        -                ")"
        -              ],
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Required when type is OPERATOR. Use × and ÷ for multiply/divide (what the UI writes); the ASCII * and / are also accepted since migrated formulas use them. Grouping: ( and )"
        -        },
        -        "query": {
        -          "anyOf": [
        -            {
        -              "additionalProperties": true,
        -              "description": "A builder query: which datasource, view, metrics, dimensions and filters to compute",
        -              "properties": {
        -                "advanced": {
        -                  "additionalProperties": {},
        -                  "description": "Datasource-specific settings — describe_datasource lists required keys per view",
        -                  "type": "object"
        -                },
        -                "data_view": {
        -                  "description": "Data view (from describe_datasource), e.g. ACCOUNT",
        -                  "type": "string"
        -                },
        -                "datasource_id": {
        -                  "description": "Datasource alias, e.g. gadw (from datasources)",
        -                  "enum": [
        -                    "advanced-web-ranking",
        -                    "ac",
        -                    "adroll",
        -                    "ahrefs",
        -                    "basecamp",
        -                    "brightlocal",
        -                    "call-rail",
        -                    "drip",
        -                    "keywords",
        -                    "sendin-blue",
        -                    "sendgrid",
        -                    "moosend",
        -                    "mailer-lite",
        -                    "pingdom",
        -                    "uptime-robot",
        -                    "piwik-pro",
        -                    "wordpress",
        -                    "pabbly-connect",
        -                    "ment",
        -                    "twilio",
        -                    "switchy",
        -                    "vimeo",
        -                    "pinterest",
        -                    "pinterest-ads",
        -                    "gtres",
        -                    "paypal",
        -                    "gps",
        -                    "gs",
        -                    "CUSTOM_IMPORT",
        -                    "CUSTOM_DATA",
        -                    "CALCULATION",
        -                    "GOALS",
        -                    "str",
        -                    "wistia",
        -                    "ca-mon",
        -                    "convertkit",
        -                    "woocommerce",
        -                    "xero",
        -                    "matomo",
        -                    "go-high-level",
        -                    "wcs",
        -                    "bing-webmaster-tools",
        -                    "pipedrive",
        -                    "salesforce",
        -                    "tiktok",
        -                    "tiktok-ads",
        -                    "twr",
        -                    "twr-ads",
        -                    "spf",
        -                    "ytbe",
        -                    "google-local-services-ads",
        -                    "klaviyo",
        -                    "gsh",
        -                    "ga4",
        -                    "lkdin-ads",
        -                    "lkdin-pg",
        -                    "mlchmp",
        -                    "inst-ads",
        -                    "inst",
        -                    "fb-ads",
        -                    "fb-pg",
        -                    "gmb",
        -                    "serpstat",
        -                    "hubspot",
        -                    "gadw",
        -                    "sem-rush",
        -                    "se-ranking",
        -                    "microsoft-ads",
        -                    "plausible",
        -                    "snapchat-ads",
        -                    "amazon-advertising",
        -                    "microsoft-clarity",
        -                    "serp-watch",
        -                    "vbout",
        -                    "moz",
        -                    "chatgpt-ads",
        -                    "omnisend",
        -                    "airtable",
        -                    "nozzle",
        -                    "surnex",
        -                    "clickup",
        -                    "make",
        -                    "freshdesk",
        -                    "chart-mogul",
        -                    "amplitude",
        -                    "harvest",
        -                    "demo"
        -                  ],
        -                  "type": "string"
        -                },
        -                "dimensions": {
        -                  "description": "Breakdown dimensions, e.g. [{ value: \"DATE\" }]",
        -                  "items": {
        -                    "additionalProperties": true,
        -                    "properties": {
        -                      "custom": {
        -                        "description": "A dynamic dimension absent from the static catalog",
        -                        "type": "boolean"
        -                      },
        -                      "data_view": {
        -                        "description": "Data view the dimension belongs to; filled from the catalog when omitted",
        -                        "type": "string"
        -                      },
        -                      "label": {
        -                        "description": "Display name — renames the dimension on the widget",
        -                        "type": "string"
        -                      },
        -                      "selector": {
        -                        "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true",
        -                        "type": "string"
        -                      },
        -                      "value": {
        -                        "description": "Dimension id (from describe_datasource)",
        -                        "type": "string"
        -                      }
        -                    },
        -                    "required": [
        -                      "value"
        -                    ],
        -                    "type": "object"
        -                  },
        -                  "type": "array"
        -                },
        -                "filters": {
        -                  "description": "Row filters",
        -                  "items": {
        -                    "additionalProperties": true,
        -                    "properties": {
        -                      "field": {
        -                        "description": "Metric or dimension id to filter on",
        -                        "type": "string"
        -                      },
        -                      "logicalOperator": {
        -                        "anyOf": [
        -                          {
        -                            "enum": [
        -                              "and",
        -                              "or"
        -                            ],
        -                            "type": "string"
        -                          },
        -                          {
        -                            "type": "null"
        -                          }
        -                        ],
        -                        "description": "How this row joins the previous one — 'and' (default) or 'or'"
        -                      },
        -                      "operator": {
        -                        "description": "Operator id — the valid list per datasource comes from describe_datasource",
        -                        "type": "string"
        -                      },
        -                      "value": {
        -                        "anyOf": [
        -                          {
        -                            "type": "string"
        -                          },
        -                          {
        -                            "type": "number"
        -                          },
        -                          {
        -                            "type": "boolean"
        -                          },
        -                          {
        -                            "items": {},
        -                            "type": "array"
        -                          }
        -                        ],
        -                        "description": "Value to compare against"
        -                      }
        -                    },
        -                    "required": [
        -                      "field",
        -                      "operator",
        -                      "value"
        -                    ],
        -                    "type": "object"
        -                  },
        -                  "type": "array"
        -                },
        -                "metrics": {
        -                  "description": "Metrics to compute over — must belong to the data view",
        -                  "items": {
        -                    "additionalProperties": true,
        -                    "properties": {
        -                      "action_type": {
        -                        "description": "Meta/Instagram action-based metrics only (actions, conversions, cost_per_action_type…) — the action key the value is read under. Filled from the catalog — only send it with custom: true",
        -                        "type": "string"
        -                      },
        -                      "custom": {
        -                        "description": "A dynamic per-account metric absent from the static catalog (e.g. a Meta custom conversion)",
        -                        "type": "boolean"
        -                      },
        -                      "data_view": {
        -                        "description": "Data view the metric belongs to; resolved from the catalog when omitted",
        -                        "type": "string"
        -                      },
        -                      "invert_comparison": {
        -                        "description": "Colour a rise as negative — for lower-is-better metrics (cost, CPC, bounce rate)",
        -                        "type": "boolean"
        -                      },
        -                      "label": {
        -                        "description": "Display name — renames the metric on the widget",
        -                        "type": "string"
        -                      },
        -                      "request_metrics": {
        -                        "description": "The upstream vendor field(s) this metric is built from. Filled from the catalog — only send it with custom: true",
        -                        "items": {
        -                          "type": "string"
        -                        },
        -                        "type": "array"
        -                      },
        -                      "selector": {
        -                        "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true, copying what describe_datasource reports",
        -                        "type": "string"
        -                      },
        -                      "summary": {
        -                        "description": "Aggregation for the total: 'SUM', 'AVG', 'MAX', or 'MIN'",
        -                        "enum": [
        -                          "SUM",
        -                          "AVG",
        -                          "MAX",
        -                          "MIN"
        -                        ],
        -                        "type": "string"
        -                      },
        -                      "symbol": {
        -                        "description": "Number format. Numeric: 'number' (plain), 'decimal', 'percent' (or '%'), 'currency' (or '$'). Duration: 's', 'ms', 'time', 'seconds', 'minutes', 'milliseconds'. Passed through unformatted: 'text', 'link', 'date'",
        -                        "enum": [
        -                          "number",
        -                          "decimal",
        -                          "percent",
        -                          "%",
        -                          "currency",
        -                          "$",
        -                          "text",
        -                          "link",
        -                          "date",
        -                          "s",
        -                          "ms",
        -                          "time",
        -                          "seconds",
        -                          "minutes",
        -                          "milliseconds"
        -                        ],
        -                        "type": "string"
        -                      },
        -                      "value": {
        -                        "description": "Metric id (from describe_datasource)",
        -                        "type": "string"
        -                      }
        -                    },
        -                    "required": [
        -                      "value"
        -                    ],
        -                    "type": "object"
        -                  },
        -                  "type": "array"
        -                }
        -              },
        -              "type": "object"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Required when type is METRIC — the query whose value this token contributes"
        -        },
        -        "type": {
        -          "description": "'METRIC' (a query), 'NUMBER' (a literal), or 'OPERATOR' (an arithmetic symbol)",
        -          "enum": [
        -            "METRIC",
        -            "NUMBER",
        -            "OPERATOR"
        -          ],
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "id": {
        +          "description": "Unique token id within the formula, e.g. \"t1\"",
        +          "type": "string"
        +        },
        +        "number": {
        +          "description": "Required when type is NUMBER",
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "operator": {
        +          "anyOf": [
        +            {
        +              "enum": [
        +                "+",
        +                "-",
        +                "*",
        +                "/",
        +                "×",
        +                "÷",
        +                "(",
        +                ")"
        +              ],
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Required when type is OPERATOR. Use × and ÷ for multiply/divide (what the UI writes); the ASCII * and / are also accepted since migrated formulas use them. Grouping: ( and )"
        +        },
        +        "query": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "description": "A builder query: which datasource, view, metrics, dimensions and filters to compute",
        +              "properties": {
        +                "advanced": {
        +                  "additionalProperties": {},
        +                  "description": "Datasource-specific settings — describe_datasource lists required keys per view",
        +                  "type": "object"
        +                },
        +                "data_view": {
        +                  "description": "Data view (from describe_datasource), e.g. ACCOUNT",
        +                  "type": "string"
        +                },
        +                "datasource_id": {
        +                  "description": "Datasource alias, e.g. gadw (from datasources)",
        +                  "enum": [
        +                    "advanced-web-ranking",
        +                    "ac",
        +                    "adroll",
        +                    "ahrefs",
        +                    "basecamp",
        +                    "brightlocal",
        +                    "call-rail",
        +                    "drip",
        +                    "keywords",
        +                    "sendin-blue",
        +                    "sendgrid",
        +                    "moosend",
        +                    "mailer-lite",
        +                    "pingdom",
        +                    "uptime-robot",
        +                    "piwik-pro",
        +                    "wordpress",
        +                    "pabbly-connect",
        +                    "ment",
        +                    "twilio",
        +                    "switchy",
        +                    "vimeo",
        +                    "pinterest",
        +                    "pinterest-ads",
        +                    "gtres",
        +                    "paypal",
        +                    "gps",
        +                    "gs",
        +                    "CUSTOM_IMPORT",
        +                    "CUSTOM_DATA",
        +                    "CALCULATION",
        +                    "GOALS",
        +                    "str",
        +                    "wistia",
        +                    "ca-mon",
        +                    "convertkit",
        +                    "woocommerce",
        +                    "xero",
        +                    "matomo",
        +                    "go-high-level",
        +                    "wcs",
        +                    "bing-webmaster-tools",
        +                    "pipedrive",
        +                    "salesforce",
        +                    "tiktok",
        +                    "tiktok-ads",
        +                    "twr",
        +                    "twr-ads",
        +                    "spf",
        +                    "ytbe",
        +                    "google-local-services-ads",
        +                    "klaviyo",
        +                    "gsh",
        +                    "ga4",
        +                    "lkdin-ads",
        +                    "lkdin-pg",
        +                    "mlchmp",
        +                    "inst-ads",
        +                    "inst",
        +                    "fb-ads",
        +                    "fb-pg",
        +                    "gmb",
        +                    "serpstat",
        +                    "hubspot",
        +                    "gadw",
        +                    "sem-rush",
        +                    "se-ranking",
        +                    "microsoft-ads",
        +                    "plausible",
        +                    "snapchat-ads",
        +                    "amazon-advertising",
        +                    "microsoft-clarity",
        +                    "serp-watch",
        +                    "vbout",
        +                    "moz",
        +                    "chatgpt-ads",
        +                    "omnisend",
        +                    "airtable",
        +                    "nozzle",
        +                    "surnex",
        +                    "clickup",
        +                    "make",
        +                    "freshdesk",
        +                    "chart-mogul",
        +                    "amplitude",
        +                    "harvest",
        +                    "zoho-crm",
        +                    "clockify",
        +                    "demo"
        +                  ],
        +                  "type": "string"
        +                },
        +                "dimensions": {
        +                  "description": "Breakdown dimensions, e.g. [{ value: \"DATE\" }]",
        +                  "items": {
        +                    "additionalProperties": true,
        +                    "properties": {
        +                      "custom": {
        +                        "description": "A dynamic dimension absent from the static catalog",
        +                        "type": "boolean"
        +                      },
        +                      "data_view": {
        +                        "description": "Data view the dimension belongs to; filled from the catalog when omitted",
        +                        "type": "string"
        +                      },
        +                      "label": {
        +                        "description": "Display name — renames the dimension on the widget",
        +                        "type": "string"
        +                      },
        +                      "selector": {
        +                        "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true",
        +                        "type": "string"
        +                      },
        +                      "value": {
        +                        "description": "Dimension id (from describe_datasource)",
        +                        "type": "string"
        +                      }
        +                    },
        +                    "required": [
        +                      "value"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "type": "array"
        +                },
        +                "filters": {
        +                  "description": "Row filters",
        +                  "items": {
        +                    "additionalProperties": true,
        +                    "properties": {
        +                      "field": {
        +                        "description": "Metric or dimension id to filter on",
        +                        "type": "string"
        +                      },
        +                      "logicalOperator": {
        +                        "anyOf": [
        +                          {
        +                            "enum": [
        +                              "and",
        +                              "or"
        +                            ],
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "description": "How this row joins the previous one — 'and' (default) or 'or'"
        +                      },
        +                      "operator": {
        +                        "description": "Operator id — the valid list per datasource comes from describe_datasource",
        +                        "type": "string"
        +                      },
        +                      "value": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "number"
        +                          },
        +                          {
        +                            "type": "boolean"
        +                          },
        +                          {
        +                            "items": {},
        +                            "type": "array"
        +                          }
        +                        ],
        +                        "description": "Value to compare against"
        +                      }
        +                    },
        +                    "required": [
        +                      "field",
        +                      "operator",
        +                      "value"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "type": "array"
        +                },
        +                "metrics": {
        +                  "description": "Metrics to compute over — must belong to the data view",
        +                  "items": {
        +                    "additionalProperties": true,
        +                    "properties": {
        +                      "action_type": {
        +                        "description": "Meta/Instagram action-based metrics only (actions, conversions, cost_per_action_type…) — the action key the value is read under. Filled from the catalog — only send it with custom: true",
        +                        "type": "string"
        +                      },
        +                      "custom": {
        +                        "description": "A dynamic per-account metric absent from the static catalog (e.g. a Meta custom conversion)",
        +                        "type": "boolean"
        +                      },
        +                      "data_view": {
        +                        "description": "Data view the metric belongs to; resolved from the catalog when omitted",
        +                        "type": "string"
        +                      },
        +                      "invert_comparison": {
        +                        "description": "Colour a rise as negative — for lower-is-better metrics (cost, CPC, bounce rate)",
        +                        "type": "boolean"
        +                      },
        +                      "label": {
        +                        "description": "Display name — renames the metric on the widget",
        +                        "type": "string"
        +                      },
        +                      "request_metrics": {
        +                        "description": "The upstream vendor field(s) this metric is built from. Filled from the catalog — only send it with custom: true",
        +                        "items": {
        +                          "type": "string"
        +                        },
        +                        "type": "array"
        +                      },
        +                      "selector": {
        +                        "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true, copying what describe_datasource reports",
        +                        "type": "string"
        +                      },
        +                      "summary": {
        +                        "description": "Aggregation for the total: 'SUM', 'AVG', 'MAX', or 'MIN'",
        +                        "enum": [
        +                          "SUM",
        +                          "AVG",
        +                          "MAX",
        +                          "MIN"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      "symbol": {
        +                        "description": "Number format. Numeric: 'number' (plain), 'decimal', 'percent' (or '%'), 'currency' (or '$'). Duration: 's', 'ms', 'time', 'seconds', 'minutes', 'milliseconds'. Passed through unformatted: 'text', 'link', 'date'",
        +                        "enum": [
        +                          "number",
        +                          "decimal",
        +                          "percent",
        +                          "%",
        +                          "currency",
        +                          "$",
        +                          "text",
        +                          "link",
        +                          "date",
        +                          "s",
        +                          "ms",
        +                          "time",
        +                          "seconds",
        +                          "minutes",
        +                          "milliseconds"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      "value": {
        +                        "description": "Metric id (from describe_datasource)",
        +                        "type": "string"
        +                      }
        +                    },
        +                    "required": [
        +                      "value"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "type": "array"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Required when type is METRIC — the query whose value this token contributes"
        +        },
        +        "type": {
        +          "description": "'METRIC' (a query), 'NUMBER' (a literal), or 'OPERATOR' (an arithmetic symbol)",
        +          "enum": [
        +            "METRIC",
        +            "NUMBER",
        +            "OPERATOR"
        +          ],
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "id",
        +        "type"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
    • Changedcreate_connection1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk",
        -  "chart-mogul",
        -  "amplitude",
        -  "harvest"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude",
        +  "harvest",
        +  "zoho-crm",
        +  "clockify"
        +]
    • Changedcreate_goal1 field changed
      • changedInput schema / properties / query / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk",
        -  "chart-mogul",
        -  "amplitude",
        -  "harvest",
        -  "demo"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude",
        +  "harvest",
        +  "zoho-crm",
        +  "clockify",
        +  "demo"
        +]
    • Changeddatasource_resources1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk",
        -  "chart-mogul",
        -  "amplitude",
        -  "harvest"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude",
        +  "harvest",
        +  "zoho-crm",
        +  "clockify"
        +]
    • Changeddescribe_datasource1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk",
        -  "chart-mogul",
        -  "amplitude",
        -  "harvest"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude",
        +  "harvest",
        +  "zoho-crm",
        +  "clockify"
        +]
    • Changedlink_datasource1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk",
        -  "chart-mogul",
        -  "amplitude",
        -  "harvest"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude",
        +  "harvest",
        +  "zoho-crm",
        +  "clockify"
        +]
    • Changedlist_assets1 field changed
      • changedInput schema / properties / datasources / items / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk",
        -  "chart-mogul",
        -  "amplitude",
        -  "harvest"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude",
        +  "harvest",
        +  "zoho-crm",
        +  "clockify"
        +]
    • Changedlist_templates1 field changed
      • changedInput schema / properties / datasources / items / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk",
        -  "chart-mogul",
        -  "amplitude",
        -  "harvest"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude",
        +  "harvest",
        +  "zoho-crm",
        +  "clockify"
        +]
    • Changedquery_data1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk",
        -  "chart-mogul",
        -  "amplitude",
        -  "harvest"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude",
        +  "harvest",
        +  "zoho-crm",
        +  "clockify"
        +]
    • Changedrefresh_report1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk",
        -  "chart-mogul",
        -  "amplitude",
        -  "harvest"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude",
        +  "harvest",
        +  "zoho-crm",
        +  "clockify"
        +]
    • Changedtest_connection1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk",
        -  "chart-mogul",
        -  "amplitude",
        -  "harvest"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude",
        +  "harvest",
        +  "zoho-crm",
        +  "clockify"
        +]
    • Changedunlink_datasource1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk",
        -  "chart-mogul",
        -  "amplitude",
        -  "harvest"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude",
        +  "harvest",
        +  "zoho-crm",
        +  "clockify"
        +]
    • Changedupdate_calculated_metric1 field changed
      • changedInput schema / properties / formula / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": true,
        -      "properties": {
        -        "id": {
        -          "description": "Unique token id within the formula, e.g. \"t1\"",
        -          "type": "string"
        -        },
        -        "number": {
        -          "description": "Required when type is NUMBER",
        -          "type": [
        -            "number",
        -            "null"
        -          ]
        -        },
        -        "operator": {
        -          "anyOf": [
        -            {
        -              "enum": [
        -                "+",
        -                "-",
        -                "*",
        -                "/",
        -                "×",
        -                "÷",
        -                "(",
        -                ")"
        -              ],
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Required when type is OPERATOR. Use × and ÷ for multiply/divide (what the UI writes); the ASCII * and / are also accepted since migrated formulas use them. Grouping: ( and )"
        -        },
        -        "query": {
        -          "anyOf": [
        -            {
        -              "additionalProperties": true,
        -              "description": "A builder query: which datasource, view, metrics, dimensions and filters to compute",
        -              "properties": {
        -                "advanced": {
        -                  "additionalProperties": {},
        -                  "description": "Datasource-specific settings — describe_datasource lists required keys per view",
        -                  "type": "object"
        -                },
        -                "data_view": {
        -                  "description": "Data view (from describe_datasource), e.g. ACCOUNT",
        -                  "type": "string"
        -                },
        -                "datasource_id": {
        -                  "description": "Datasource alias, e.g. gadw (from datasources)",
        -                  "enum": [
        -                    "advanced-web-ranking",
        -                    "ac",
        -                    "adroll",
        -                    "ahrefs",
        -                    "basecamp",
        -                    "brightlocal",
        -                    "call-rail",
        -                    "drip",
        -                    "keywords",
        -                    "sendin-blue",
        -                    "sendgrid",
        -                    "moosend",
        -                    "mailer-lite",
        -                    "pingdom",
        -                    "uptime-robot",
        -                    "piwik-pro",
        -                    "wordpress",
        -                    "pabbly-connect",
        -                    "ment",
        -                    "twilio",
        -                    "switchy",
        -                    "vimeo",
        -                    "pinterest",
        -                    "pinterest-ads",
        -                    "gtres",
        -                    "paypal",
        -                    "gps",
        -                    "gs",
        -                    "CUSTOM_IMPORT",
        -                    "CUSTOM_DATA",
        -                    "CALCULATION",
        -                    "GOALS",
        -                    "str",
        -                    "wistia",
        -                    "ca-mon",
        -                    "convertkit",
        -                    "woocommerce",
        -                    "xero",
        -                    "matomo",
        -                    "go-high-level",
        -                    "wcs",
        -                    "bing-webmaster-tools",
        -                    "pipedrive",
        -                    "salesforce",
        -                    "tiktok",
        -                    "tiktok-ads",
        -                    "twr",
        -                    "twr-ads",
        -                    "spf",
        -                    "ytbe",
        -                    "google-local-services-ads",
        -                    "klaviyo",
        -                    "gsh",
        -                    "ga4",
        -                    "lkdin-ads",
        -                    "lkdin-pg",
        -                    "mlchmp",
        -                    "inst-ads",
        -                    "inst",
        -                    "fb-ads",
        -                    "fb-pg",
        -                    "gmb",
        -                    "serpstat",
        -                    "hubspot",
        -                    "gadw",
        -                    "sem-rush",
        -                    "se-ranking",
        -                    "microsoft-ads",
        -                    "plausible",
        -                    "snapchat-ads",
        -                    "amazon-advertising",
        -                    "microsoft-clarity",
        -                    "serp-watch",
        -                    "vbout",
        -                    "moz",
        -                    "chatgpt-ads",
        -                    "omnisend",
        -                    "airtable",
        -                    "nozzle",
        -                    "surnex",
        -                    "clickup",
        -                    "make",
        -                    "freshdesk",
        -                    "chart-mogul",
        -                    "amplitude",
        -                    "harvest",
        -                    "demo"
        -                  ],
        -                  "type": "string"
        -                },
        -                "dimensions": {
        -                  "description": "Breakdown dimensions, e.g. [{ value: \"DATE\" }]",
        -                  "items": {
        -                    "additionalProperties": true,
        -                    "properties": {
        -                      "custom": {
        -                        "description": "A dynamic dimension absent from the static catalog",
        -                        "type": "boolean"
        -                      },
        -                      "data_view": {
        -                        "description": "Data view the dimension belongs to; filled from the catalog when omitted",
        -                        "type": "string"
        -                      },
        -                      "label": {
        -                        "description": "Display name — renames the dimension on the widget",
        -                        "type": "string"
        -                      },
        -                      "selector": {
        -                        "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true",
        -                        "type": "string"
        -                      },
        -                      "value": {
        -                        "description": "Dimension id (from describe_datasource)",
        -                        "type": "string"
        -                      }
        -                    },
        -                    "required": [
        -                      "value"
        -                    ],
        -                    "type": "object"
        -                  },
        -                  "type": "array"
        -                },
        -                "filters": {
        -                  "description": "Row filters",
        -                  "items": {
        -                    "additionalProperties": true,
        -                    "properties": {
        -                      "field": {
        -                        "description": "Metric or dimension id to filter on",
        -                        "type": "string"
        -                      },
        -                      "logicalOperator": {
        -                        "anyOf": [
        -                          {
        -                            "enum": [
        -                              "and",
        -                              "or"
        -                            ],
        -                            "type": "string"
        -                          },
        -                          {
        -                            "type": "null"
        -                          }
        -                        ],
        -                        "description": "How this row joins the previous one — 'and' (default) or 'or'"
        -                      },
        -                      "operator": {
        -                        "description": "Operator id — the valid list per datasource comes from describe_datasource",
        -                        "type": "string"
        -                      },
        -                      "value": {
        -                        "anyOf": [
        -                          {
        -                            "type": "string"
        -                          },
        -                          {
        -                            "type": "number"
        -                          },
        -                          {
        -                            "type": "boolean"
        -                          },
        -                          {
        -                            "items": {},
        -                            "type": "array"
        -                          }
        -                        ],
        -                        "description": "Value to compare against"
        -                      }
        -                    },
        -                    "required": [
        -                      "field",
        -                      "operator",
        -                      "value"
        -                    ],
        -                    "type": "object"
        -                  },
        -                  "type": "array"
        -                },
        -                "metrics": {
        -                  "description": "Metrics to compute over — must belong to the data view",
        -                  "items": {
        -                    "additionalProperties": true,
        -                    "properties": {
        -                      "action_type": {
        -                        "description": "Meta/Instagram action-based metrics only (actions, conversions, cost_per_action_type…) — the action key the value is read under. Filled from the catalog — only send it with custom: true",
        -                        "type": "string"
        -                      },
        -                      "custom": {
        -                        "description": "A dynamic per-account metric absent from the static catalog (e.g. a Meta custom conversion)",
        -                        "type": "boolean"
        -                      },
        -                      "data_view": {
        -                        "description": "Data view the metric belongs to; resolved from the catalog when omitted",
        -                        "type": "string"
        -                      },
        -                      "invert_comparison": {
        -                        "description": "Colour a rise as negative — for lower-is-better metrics (cost, CPC, bounce rate)",
        -                        "type": "boolean"
        -                      },
        -                      "label": {
        -                        "description": "Display name — renames the metric on the widget",
        -                        "type": "string"
        -                      },
        -                      "request_metrics": {
        -                        "description": "The upstream vendor field(s) this metric is built from. Filled from the catalog — only send it with custom: true",
        -                        "items": {
        -                          "type": "string"
        -                        },
        -                        "type": "array"
        -                      },
        -                      "selector": {
        -                        "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true, copying what describe_datasource reports",
        -                        "type": "string"
        -                      },
        -                      "summary": {
        -                        "description": "Aggregation for the total: 'SUM', 'AVG', 'MAX', or 'MIN'",
        -                        "enum": [
        -                          "SUM",
        -                          "AVG",
        -                          "MAX",
        -                          "MIN"
        -                        ],
        -                        "type": "string"
        -                      },
        -                      "symbol": {
        -                        "description": "Number format. Numeric: 'number' (plain), 'decimal', 'percent' (or '%'), 'currency' (or '$'). Duration: 's', 'ms', 'time', 'seconds', 'minutes', 'milliseconds'. Passed through unformatted: 'text', 'link', 'date'",
        -                        "enum": [
        -                          "number",
        -                          "decimal",
        -                          "percent",
        -                          "%",
        -                          "currency",
        -                          "$",
        -                          "text",
        -                          "link",
        -                          "date",
        -                          "s",
        -                          "ms",
        -                          "time",
        -                          "seconds",
        -                          "minutes",
        -                          "milliseconds"
        -                        ],
        -                        "type": "string"
        -                      },
        -                      "value": {
        -                        "description": "Metric id (from describe_datasource)",
        -                        "type": "string"
        -                      }
        -                    },
        -                    "required": [
        -                      "value"
        -                    ],
        -                    "type": "object"
        -                  },
        -                  "type": "array"
        -                }
        -              },
        -              "type": "object"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Required when type is METRIC — the query whose value this token contributes"
        -        },
        -        "type": {
        -          "description": "'METRIC' (a query), 'NUMBER' (a literal), or 'OPERATOR' (an arithmetic symbol)",
        -          "enum": [
        -            "METRIC",
        -            "NUMBER",
        -            "OPERATOR"
        -          ],
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "id": {
        +          "description": "Unique token id within the formula, e.g. \"t1\"",
        +          "type": "string"
        +        },
        +        "number": {
        +          "description": "Required when type is NUMBER",
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "operator": {
        +          "anyOf": [
        +            {
        +              "enum": [
        +                "+",
        +                "-",
        +                "*",
        +                "/",
        +                "×",
        +                "÷",
        +                "(",
        +                ")"
        +              ],
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Required when type is OPERATOR. Use × and ÷ for multiply/divide (what the UI writes); the ASCII * and / are also accepted since migrated formulas use them. Grouping: ( and )"
        +        },
        +        "query": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "description": "A builder query: which datasource, view, metrics, dimensions and filters to compute",
        +              "properties": {
        +                "advanced": {
        +                  "additionalProperties": {},
        +                  "description": "Datasource-specific settings — describe_datasource lists required keys per view",
        +                  "type": "object"
        +                },
        +                "data_view": {
        +                  "description": "Data view (from describe_datasource), e.g. ACCOUNT",
        +                  "type": "string"
        +                },
        +                "datasource_id": {
        +                  "description": "Datasource alias, e.g. gadw (from datasources)",
        +                  "enum": [
        +                    "advanced-web-ranking",
        +                    "ac",
        +                    "adroll",
        +                    "ahrefs",
        +                    "basecamp",
        +                    "brightlocal",
        +                    "call-rail",
        +                    "drip",
        +                    "keywords",
        +                    "sendin-blue",
        +                    "sendgrid",
        +                    "moosend",
        +                    "mailer-lite",
        +                    "pingdom",
        +                    "uptime-robot",
        +                    "piwik-pro",
        +                    "wordpress",
        +                    "pabbly-connect",
        +                    "ment",
        +                    "twilio",
        +                    "switchy",
        +                    "vimeo",
        +                    "pinterest",
        +                    "pinterest-ads",
        +                    "gtres",
        +                    "paypal",
        +                    "gps",
        +                    "gs",
        +                    "CUSTOM_IMPORT",
        +                    "CUSTOM_DATA",
        +                    "CALCULATION",
        +                    "GOALS",
        +                    "str",
        +                    "wistia",
        +                    "ca-mon",
        +                    "convertkit",
        +                    "woocommerce",
        +                    "xero",
        +                    "matomo",
        +                    "go-high-level",
        +                    "wcs",
        +                    "bing-webmaster-tools",
        +                    "pipedrive",
        +                    "salesforce",
        +                    "tiktok",
        +                    "tiktok-ads",
        +                    "twr",
        +                    "twr-ads",
        +                    "spf",
        +                    "ytbe",
        +                    "google-local-services-ads",
        +                    "klaviyo",
        +                    "gsh",
        +                    "ga4",
        +                    "lkdin-ads",
        +                    "lkdin-pg",
        +                    "mlchmp",
        +                    "inst-ads",
        +                    "inst",
        +                    "fb-ads",
        +                    "fb-pg",
        +                    "gmb",
        +                    "serpstat",
        +                    "hubspot",
        +                    "gadw",
        +                    "sem-rush",
        +                    "se-ranking",
        +                    "microsoft-ads",
        +                    "plausible",
        +                    "snapchat-ads",
        +                    "amazon-advertising",
        +                    "microsoft-clarity",
        +                    "serp-watch",
        +                    "vbout",
        +                    "moz",
        +                    "chatgpt-ads",
        +                    "omnisend",
        +                    "airtable",
        +                    "nozzle",
        +                    "surnex",
        +                    "clickup",
        +                    "make",
        +                    "freshdesk",
        +                    "chart-mogul",
        +                    "amplitude",
        +                    "harvest",
        +                    "zoho-crm",
        +                    "clockify",
        +                    "demo"
        +                  ],
        +                  "type": "string"
        +                },
        +                "dimensions": {
        +                  "description": "Breakdown dimensions, e.g. [{ value: \"DATE\" }]",
        +                  "items": {
        +                    "additionalProperties": true,
        +                    "properties": {
        +                      "custom": {
        +                        "description": "A dynamic dimension absent from the static catalog",
        +                        "type": "boolean"
        +                      },
        +                      "data_view": {
        +                        "description": "Data view the dimension belongs to; filled from the catalog when omitted",
        +                        "type": "string"
        +                      },
        +                      "label": {
        +                        "description": "Display name — renames the dimension on the widget",
        +                        "type": "string"
        +                      },
        +                      "selector": {
        +                        "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true",
        +                        "type": "string"
        +                      },
        +                      "value": {
        +                        "description": "Dimension id (from describe_datasource)",
        +                        "type": "string"
        +                      }
        +                    },
        +                    "required": [
        +                      "value"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "type": "array"
        +                },
        +                "filters": {
        +                  "description": "Row filters",
        +                  "items": {
        +                    "additionalProperties": true,
        +                    "properties": {
        +                      "field": {
        +                        "description": "Metric or dimension id to filter on",
        +                        "type": "string"
        +                      },
        +                      "logicalOperator": {
        +                        "anyOf": [
        +                          {
        +                            "enum": [
        +                              "and",
        +                              "or"
        +                            ],
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "description": "How this row joins the previous one — 'and' (default) or 'or'"
        +                      },
        +                      "operator": {
        +                        "description": "Operator id — the valid list per datasource comes from describe_datasource",
        +                        "type": "string"
        +                      },
        +                      "value": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "number"
        +                          },
        +                          {
        +                            "type": "boolean"
        +                          },
        +                          {
        +                            "items": {},
        +                            "type": "array"
        +                          }
        +                        ],
        +                        "description": "Value to compare against"
        +                      }
        +                    },
        +                    "required": [
        +                      "field",
        +                      "operator",
        +                      "value"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "type": "array"
        +                },
        +                "metrics": {
        +                  "description": "Metrics to compute over — must belong to the data view",
        +                  "items": {
        +                    "additionalProperties": true,
        +                    "properties": {
        +                      "action_type": {
        +                        "description": "Meta/Instagram action-based metrics only (actions, conversions, cost_per_action_type…) — the action key the value is read under. Filled from the catalog — only send it with custom: true",
        +                        "type": "string"
        +                      },
        +                      "custom": {
        +                        "description": "A dynamic per-account metric absent from the static catalog (e.g. a Meta custom conversion)",
        +                        "type": "boolean"
        +                      },
        +                      "data_view": {
        +                        "description": "Data view the metric belongs to; resolved from the catalog when omitted",
        +                        "type": "string"
        +                      },
        +                      "invert_comparison": {
        +                        "description": "Colour a rise as negative — for lower-is-better metrics (cost, CPC, bounce rate)",
        +                        "type": "boolean"
        +                      },
        +                      "label": {
        +                        "description": "Display name — renames the metric on the widget",
        +                        "type": "string"
        +                      },
        +                      "request_metrics": {
        +                        "description": "The upstream vendor field(s) this metric is built from. Filled from the catalog — only send it with custom: true",
        +                        "items": {
        +                          "type": "string"
        +                        },
        +                        "type": "array"
        +                      },
        +                      "selector": {
        +                        "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true, copying what describe_datasource reports",
        +                        "type": "string"
        +                      },
        +                      "summary": {
        +                        "description": "Aggregation for the total: 'SUM', 'AVG', 'MAX', or 'MIN'",
        +                        "enum": [
        +                          "SUM",
        +                          "AVG",
        +                          "MAX",
        +                          "MIN"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      "symbol": {
        +                        "description": "Number format. Numeric: 'number' (plain), 'decimal', 'percent' (or '%'), 'currency' (or '$'). Duration: 's', 'ms', 'time', 'seconds', 'minutes', 'milliseconds'. Passed through unformatted: 'text', 'link', 'date'",
        +                        "enum": [
        +                          "number",
        +                          "decimal",
        +                          "percent",
        +                          "%",
        +                          "currency",
        +                          "$",
        +                          "text",
        +                          "link",
        +                          "date",
        +                          "s",
        +                          "ms",
        +                          "time",
        +                          "seconds",
        +                          "minutes",
        +                          "milliseconds"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      "value": {
        +                        "description": "Metric id (from describe_datasource)",
        +                        "type": "string"
        +                      }
        +                    },
        +                    "required": [
        +                      "value"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "type": "array"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Required when type is METRIC — the query whose value this token contributes"
        +        },
        +        "type": {
        +          "description": "'METRIC' (a query), 'NUMBER' (a literal), or 'OPERATOR' (an arithmetic symbol)",
        +          "enum": [
        +            "METRIC",
        +            "NUMBER",
        +            "OPERATOR"
        +          ],
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "id",
        +        "type"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
    • Changedupdate_data_widget1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk",
        -  "chart-mogul",
        -  "amplitude",
        -  "harvest"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude",
        +  "harvest",
        +  "zoho-crm",
        +  "clockify"
        +]
    • Changedupdate_goal1 field changed
      • changedInput schema / properties / query / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk",
        -  "chart-mogul",
        -  "amplitude",
        -  "harvest",
        -  "demo"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude",
        +  "harvest",
        +  "zoho-crm",
        +  "clockify",
        +  "demo"
        +]
  3. 16 tool updates
    • Changedadd_data_widget1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk",
        -  "chart-mogul",
        -  "amplitude"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude",
        +  "harvest"
        +]
    • Changedcreate_calculated_metric1 field changed
      • changedInput schema / properties / formula / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": true,
        -      "properties": {
        -        "id": {
        -          "description": "Unique token id within the formula, e.g. \"t1\"",
        -          "type": "string"
        -        },
        -        "number": {
        -          "description": "Required when type is NUMBER",
        -          "type": [
        -            "number",
        -            "null"
        -          ]
        -        },
        -        "operator": {
        -          "anyOf": [
        -            {
        -              "enum": [
        -                "+",
        -                "-",
        -                "*",
        -                "/",
        -                "×",
        -                "÷",
        -                "(",
        -                ")"
        -              ],
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Required when type is OPERATOR. Use × and ÷ for multiply/divide (what the UI writes); the ASCII * and / are also accepted since migrated formulas use them. Grouping: ( and )"
        -        },
        -        "query": {
        -          "anyOf": [
        -            {
        -              "additionalProperties": true,
        -              "description": "A builder query: which datasource, view, metrics, dimensions and filters to compute",
        -              "properties": {
        -                "advanced": {
        -                  "additionalProperties": {},
        -                  "description": "Datasource-specific settings — describe_datasource lists required keys per view",
        -                  "type": "object"
        -                },
        -                "data_view": {
        -                  "description": "Data view (from describe_datasource), e.g. ACCOUNT",
        -                  "type": "string"
        -                },
        -                "datasource_id": {
        -                  "description": "Datasource alias, e.g. gadw (from datasources)",
        -                  "enum": [
        -                    "advanced-web-ranking",
        -                    "ac",
        -                    "adroll",
        -                    "ahrefs",
        -                    "basecamp",
        -                    "brightlocal",
        -                    "call-rail",
        -                    "drip",
        -                    "keywords",
        -                    "sendin-blue",
        -                    "sendgrid",
        -                    "moosend",
        -                    "mailer-lite",
        -                    "pingdom",
        -                    "uptime-robot",
        -                    "piwik-pro",
        -                    "wordpress",
        -                    "pabbly-connect",
        -                    "ment",
        -                    "twilio",
        -                    "switchy",
        -                    "vimeo",
        -                    "pinterest",
        -                    "pinterest-ads",
        -                    "gtres",
        -                    "paypal",
        -                    "gps",
        -                    "gs",
        -                    "CUSTOM_IMPORT",
        -                    "CUSTOM_DATA",
        -                    "CALCULATION",
        -                    "GOALS",
        -                    "str",
        -                    "wistia",
        -                    "ca-mon",
        -                    "convertkit",
        -                    "woocommerce",
        -                    "xero",
        -                    "matomo",
        -                    "go-high-level",
        -                    "wcs",
        -                    "bing-webmaster-tools",
        -                    "pipedrive",
        -                    "salesforce",
        -                    "tiktok",
        -                    "tiktok-ads",
        -                    "twr",
        -                    "twr-ads",
        -                    "spf",
        -                    "ytbe",
        -                    "google-local-services-ads",
        -                    "klaviyo",
        -                    "gsh",
        -                    "ga4",
        -                    "lkdin-ads",
        -                    "lkdin-pg",
        -                    "mlchmp",
        -                    "inst-ads",
        -                    "inst",
        -                    "fb-ads",
        -                    "fb-pg",
        -                    "gmb",
        -                    "serpstat",
        -                    "hubspot",
        -                    "gadw",
        -                    "sem-rush",
        -                    "se-ranking",
        -                    "microsoft-ads",
        -                    "plausible",
        -                    "snapchat-ads",
        -                    "amazon-advertising",
        -                    "microsoft-clarity",
        -                    "serp-watch",
        -                    "vbout",
        -                    "moz",
        -                    "chatgpt-ads",
        -                    "omnisend",
        -                    "airtable",
        -                    "nozzle",
        -                    "surnex",
        -                    "clickup",
        -                    "make",
        -                    "freshdesk",
        -                    "chart-mogul",
        -                    "amplitude",
        -                    "demo"
        -                  ],
        -                  "type": "string"
        -                },
        -                "dimensions": {
        -                  "description": "Breakdown dimensions, e.g. [{ value: \"DATE\" }]",
        -                  "items": {
        -                    "additionalProperties": true,
        -                    "properties": {
        -                      "custom": {
        -                        "description": "A dynamic dimension absent from the static catalog",
        -                        "type": "boolean"
        -                      },
        -                      "data_view": {
        -                        "description": "Data view the dimension belongs to; filled from the catalog when omitted",
        -                        "type": "string"
        -                      },
        -                      "label": {
        -                        "description": "Display name — renames the dimension on the widget",
        -                        "type": "string"
        -                      },
        -                      "selector": {
        -                        "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true",
        -                        "type": "string"
        -                      },
        -                      "value": {
        -                        "description": "Dimension id (from describe_datasource)",
        -                        "type": "string"
        -                      }
        -                    },
        -                    "required": [
        -                      "value"
        -                    ],
        -                    "type": "object"
        -                  },
        -                  "type": "array"
        -                },
        -                "filters": {
        -                  "description": "Row filters",
        -                  "items": {
        -                    "additionalProperties": true,
        -                    "properties": {
        -                      "field": {
        -                        "description": "Metric or dimension id to filter on",
        -                        "type": "string"
        -                      },
        -                      "logicalOperator": {
        -                        "anyOf": [
        -                          {
        -                            "enum": [
        -                              "and",
        -                              "or"
        -                            ],
        -                            "type": "string"
        -                          },
        -                          {
        -                            "type": "null"
        -                          }
        -                        ],
        -                        "description": "How this row joins the previous one — 'and' (default) or 'or'"
        -                      },
        -                      "operator": {
        -                        "description": "Operator id — the valid list per datasource comes from describe_datasource",
        -                        "type": "string"
        -                      },
        -                      "value": {
        -                        "anyOf": [
        -                          {
        -                            "type": "string"
        -                          },
        -                          {
        -                            "type": "number"
        -                          },
        -                          {
        -                            "type": "boolean"
        -                          },
        -                          {
        -                            "items": {},
        -                            "type": "array"
        -                          }
        -                        ],
        -                        "description": "Value to compare against"
        -                      }
        -                    },
        -                    "required": [
        -                      "field",
        -                      "operator",
        -                      "value"
        -                    ],
        -                    "type": "object"
        -                  },
        -                  "type": "array"
        -                },
        -                "metrics": {
        -                  "description": "Metrics to compute over — must belong to the data view",
        -                  "items": {
        -                    "additionalProperties": true,
        -                    "properties": {
        -                      "action_type": {
        -                        "description": "Meta/Instagram action-based metrics only (actions, conversions, cost_per_action_type…) — the action key the value is read under. Filled from the catalog — only send it with custom: true",
        -                        "type": "string"
        -                      },
        -                      "custom": {
        -                        "description": "A dynamic per-account metric absent from the static catalog (e.g. a Meta custom conversion)",
        -                        "type": "boolean"
        -                      },
        -                      "data_view": {
        -                        "description": "Data view the metric belongs to; resolved from the catalog when omitted",
        -                        "type": "string"
        -                      },
        -                      "invert_comparison": {
        -                        "description": "Colour a rise as negative — for lower-is-better metrics (cost, CPC, bounce rate)",
        -                        "type": "boolean"
        -                      },
        -                      "label": {
        -                        "description": "Display name — renames the metric on the widget",
        -                        "type": "string"
        -                      },
        -                      "request_metrics": {
        -                        "description": "The upstream vendor field(s) this metric is built from. Filled from the catalog — only send it with custom: true",
        -                        "items": {
        -                          "type": "string"
        -                        },
        -                        "type": "array"
        -                      },
        -                      "selector": {
        -                        "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true, copying what describe_datasource reports",
        -                        "type": "string"
        -                      },
        -                      "summary": {
        -                        "description": "Aggregation for the total: 'SUM', 'AVG', 'MAX', or 'MIN'",
        -                        "enum": [
        -                          "SUM",
        -                          "AVG",
        -                          "MAX",
        -                          "MIN"
        -                        ],
        -                        "type": "string"
        -                      },
        -                      "symbol": {
        -                        "description": "Number format. Numeric: 'number' (plain), 'decimal', 'percent' (or '%'), 'currency' (or '$'). Duration: 's', 'ms', 'time', 'seconds', 'minutes', 'milliseconds'. Passed through unformatted: 'text', 'link', 'date'",
        -                        "enum": [
        -                          "number",
        -                          "decimal",
        -                          "percent",
        -                          "%",
        -                          "currency",
        -                          "$",
        -                          "text",
        -                          "link",
        -                          "date",
        -                          "s",
        -                          "ms",
        -                          "time",
        -                          "seconds",
        -                          "minutes",
        -                          "milliseconds"
        -                        ],
        -                        "type": "string"
        -                      },
        -                      "value": {
        -                        "description": "Metric id (from describe_datasource)",
        -                        "type": "string"
        -                      }
        -                    },
        -                    "required": [
        -                      "value"
        -                    ],
        -                    "type": "object"
        -                  },
        -                  "type": "array"
        -                }
        -              },
        -              "type": "object"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Required when type is METRIC — the query whose value this token contributes"
        -        },
        -        "type": {
        -          "description": "'METRIC' (a query), 'NUMBER' (a literal), or 'OPERATOR' (an arithmetic symbol)",
        -          "enum": [
        -            "METRIC",
        -            "NUMBER",
        -            "OPERATOR"
        -          ],
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "id": {
        +          "description": "Unique token id within the formula, e.g. \"t1\"",
        +          "type": "string"
        +        },
        +        "number": {
        +          "description": "Required when type is NUMBER",
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "operator": {
        +          "anyOf": [
        +            {
        +              "enum": [
        +                "+",
        +                "-",
        +                "*",
        +                "/",
        +                "×",
        +                "÷",
        +                "(",
        +                ")"
        +              ],
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Required when type is OPERATOR. Use × and ÷ for multiply/divide (what the UI writes); the ASCII * and / are also accepted since migrated formulas use them. Grouping: ( and )"
        +        },
        +        "query": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "description": "A builder query: which datasource, view, metrics, dimensions and filters to compute",
        +              "properties": {
        +                "advanced": {
        +                  "additionalProperties": {},
        +                  "description": "Datasource-specific settings — describe_datasource lists required keys per view",
        +                  "type": "object"
        +                },
        +                "data_view": {
        +                  "description": "Data view (from describe_datasource), e.g. ACCOUNT",
        +                  "type": "string"
        +                },
        +                "datasource_id": {
        +                  "description": "Datasource alias, e.g. gadw (from datasources)",
        +                  "enum": [
        +                    "advanced-web-ranking",
        +                    "ac",
        +                    "adroll",
        +                    "ahrefs",
        +                    "basecamp",
        +                    "brightlocal",
        +                    "call-rail",
        +                    "drip",
        +                    "keywords",
        +                    "sendin-blue",
        +                    "sendgrid",
        +                    "moosend",
        +                    "mailer-lite",
        +                    "pingdom",
        +                    "uptime-robot",
        +                    "piwik-pro",
        +                    "wordpress",
        +                    "pabbly-connect",
        +                    "ment",
        +                    "twilio",
        +                    "switchy",
        +                    "vimeo",
        +                    "pinterest",
        +                    "pinterest-ads",
        +                    "gtres",
        +                    "paypal",
        +                    "gps",
        +                    "gs",
        +                    "CUSTOM_IMPORT",
        +                    "CUSTOM_DATA",
        +                    "CALCULATION",
        +                    "GOALS",
        +                    "str",
        +                    "wistia",
        +                    "ca-mon",
        +                    "convertkit",
        +                    "woocommerce",
        +                    "xero",
        +                    "matomo",
        +                    "go-high-level",
        +                    "wcs",
        +                    "bing-webmaster-tools",
        +                    "pipedrive",
        +                    "salesforce",
        +                    "tiktok",
        +                    "tiktok-ads",
        +                    "twr",
        +                    "twr-ads",
        +                    "spf",
        +                    "ytbe",
        +                    "google-local-services-ads",
        +                    "klaviyo",
        +                    "gsh",
        +                    "ga4",
        +                    "lkdin-ads",
        +                    "lkdin-pg",
        +                    "mlchmp",
        +                    "inst-ads",
        +                    "inst",
        +                    "fb-ads",
        +                    "fb-pg",
        +                    "gmb",
        +                    "serpstat",
        +                    "hubspot",
        +                    "gadw",
        +                    "sem-rush",
        +                    "se-ranking",
        +                    "microsoft-ads",
        +                    "plausible",
        +                    "snapchat-ads",
        +                    "amazon-advertising",
        +                    "microsoft-clarity",
        +                    "serp-watch",
        +                    "vbout",
        +                    "moz",
        +                    "chatgpt-ads",
        +                    "omnisend",
        +                    "airtable",
        +                    "nozzle",
        +                    "surnex",
        +                    "clickup",
        +                    "make",
        +                    "freshdesk",
        +                    "chart-mogul",
        +                    "amplitude",
        +                    "harvest",
        +                    "demo"
        +                  ],
        +                  "type": "string"
        +                },
        +                "dimensions": {
        +                  "description": "Breakdown dimensions, e.g. [{ value: \"DATE\" }]",
        +                  "items": {
        +                    "additionalProperties": true,
        +                    "properties": {
        +                      "custom": {
        +                        "description": "A dynamic dimension absent from the static catalog",
        +                        "type": "boolean"
        +                      },
        +                      "data_view": {
        +                        "description": "Data view the dimension belongs to; filled from the catalog when omitted",
        +                        "type": "string"
        +                      },
        +                      "label": {
        +                        "description": "Display name — renames the dimension on the widget",
        +                        "type": "string"
        +                      },
        +                      "selector": {
        +                        "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true",
        +                        "type": "string"
        +                      },
        +                      "value": {
        +                        "description": "Dimension id (from describe_datasource)",
        +                        "type": "string"
        +                      }
        +                    },
        +                    "required": [
        +                      "value"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "type": "array"
        +                },
        +                "filters": {
        +                  "description": "Row filters",
        +                  "items": {
        +                    "additionalProperties": true,
        +                    "properties": {
        +                      "field": {
        +                        "description": "Metric or dimension id to filter on",
        +                        "type": "string"
        +                      },
        +                      "logicalOperator": {
        +                        "anyOf": [
        +                          {
        +                            "enum": [
        +                              "and",
        +                              "or"
        +                            ],
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "description": "How this row joins the previous one — 'and' (default) or 'or'"
        +                      },
        +                      "operator": {
        +                        "description": "Operator id — the valid list per datasource comes from describe_datasource",
        +                        "type": "string"
        +                      },
        +                      "value": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "number"
        +                          },
        +                          {
        +                            "type": "boolean"
        +                          },
        +                          {
        +                            "items": {},
        +                            "type": "array"
        +                          }
        +                        ],
        +                        "description": "Value to compare against"
        +                      }
        +                    },
        +                    "required": [
        +                      "field",
        +                      "operator",
        +                      "value"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "type": "array"
        +                },
        +                "metrics": {
        +                  "description": "Metrics to compute over — must belong to the data view",
        +                  "items": {
        +                    "additionalProperties": true,
        +                    "properties": {
        +                      "action_type": {
        +                        "description": "Meta/Instagram action-based metrics only (actions, conversions, cost_per_action_type…) — the action key the value is read under. Filled from the catalog — only send it with custom: true",
        +                        "type": "string"
        +                      },
        +                      "custom": {
        +                        "description": "A dynamic per-account metric absent from the static catalog (e.g. a Meta custom conversion)",
        +                        "type": "boolean"
        +                      },
        +                      "data_view": {
        +                        "description": "Data view the metric belongs to; resolved from the catalog when omitted",
        +                        "type": "string"
        +                      },
        +                      "invert_comparison": {
        +                        "description": "Colour a rise as negative — for lower-is-better metrics (cost, CPC, bounce rate)",
        +                        "type": "boolean"
        +                      },
        +                      "label": {
        +                        "description": "Display name — renames the metric on the widget",
        +                        "type": "string"
        +                      },
        +                      "request_metrics": {
        +                        "description": "The upstream vendor field(s) this metric is built from. Filled from the catalog — only send it with custom: true",
        +                        "items": {
        +                          "type": "string"
        +                        },
        +                        "type": "array"
        +                      },
        +                      "selector": {
        +                        "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true, copying what describe_datasource reports",
        +                        "type": "string"
        +                      },
        +                      "summary": {
        +                        "description": "Aggregation for the total: 'SUM', 'AVG', 'MAX', or 'MIN'",
        +                        "enum": [
        +                          "SUM",
        +                          "AVG",
        +                          "MAX",
        +                          "MIN"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      "symbol": {
        +                        "description": "Number format. Numeric: 'number' (plain), 'decimal', 'percent' (or '%'), 'currency' (or '$'). Duration: 's', 'ms', 'time', 'seconds', 'minutes', 'milliseconds'. Passed through unformatted: 'text', 'link', 'date'",
        +                        "enum": [
        +                          "number",
        +                          "decimal",
        +                          "percent",
        +                          "%",
        +                          "currency",
        +                          "$",
        +                          "text",
        +                          "link",
        +                          "date",
        +                          "s",
        +                          "ms",
        +                          "time",
        +                          "seconds",
        +                          "minutes",
        +                          "milliseconds"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      "value": {
        +                        "description": "Metric id (from describe_datasource)",
        +                        "type": "string"
        +                      }
        +                    },
        +                    "required": [
        +                      "value"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "type": "array"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Required when type is METRIC — the query whose value this token contributes"
        +        },
        +        "type": {
        +          "description": "'METRIC' (a query), 'NUMBER' (a literal), or 'OPERATOR' (an arithmetic symbol)",
        +          "enum": [
        +            "METRIC",
        +            "NUMBER",
        +            "OPERATOR"
        +          ],
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "id",
        +        "type"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
    • Changedcreate_connection1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk",
        -  "chart-mogul",
        -  "amplitude"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude",
        +  "harvest"
        +]
    • Changedcreate_goal1 field changed
      • changedInput schema / properties / query / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk",
        -  "chart-mogul",
        -  "amplitude",
        -  "demo"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude",
        +  "harvest",
        +  "demo"
        +]
    • Changeddatasource_resources1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk",
        -  "chart-mogul",
        -  "amplitude"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude",
        +  "harvest"
        +]
    • Changeddescribe_datasource1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk",
        -  "chart-mogul",
        -  "amplitude"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude",
        +  "harvest"
        +]
    • Changedlink_datasource1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk",
        -  "chart-mogul",
        -  "amplitude"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude",
        +  "harvest"
        +]
    • Changedlist_assets1 field changed
      • changedInput schema / properties / datasources / items / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk",
        -  "chart-mogul",
        -  "amplitude"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude",
        +  "harvest"
        +]
    • Changedlist_templates1 field changed
      • changedInput schema / properties / datasources / items / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk",
        -  "chart-mogul",
        -  "amplitude"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude",
        +  "harvest"
        +]
    • Changedquery_data1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk",
        -  "chart-mogul",
        -  "amplitude"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude",
        +  "harvest"
        +]
    • Changedrefresh_report1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk",
        -  "chart-mogul",
        -  "amplitude"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude",
        +  "harvest"
        +]
    • Changedtest_connection1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk",
        -  "chart-mogul",
        -  "amplitude"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude",
        +  "harvest"
        +]
    • Changedunlink_datasource1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk",
        -  "chart-mogul",
        -  "amplitude"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude",
        +  "harvest"
        +]
    • Changedupdate_calculated_metric1 field changed
      • changedInput schema / properties / formula / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": true,
        -      "properties": {
        -        "id": {
        -          "description": "Unique token id within the formula, e.g. \"t1\"",
        -          "type": "string"
        -        },
        -        "number": {
        -          "description": "Required when type is NUMBER",
        -          "type": [
        -            "number",
        -            "null"
        -          ]
        -        },
        -        "operator": {
        -          "anyOf": [
        -            {
        -              "enum": [
        -                "+",
        -                "-",
        -                "*",
        -                "/",
        -                "×",
        -                "÷",
        -                "(",
        -                ")"
        -              ],
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Required when type is OPERATOR. Use × and ÷ for multiply/divide (what the UI writes); the ASCII * and / are also accepted since migrated formulas use them. Grouping: ( and )"
        -        },
        -        "query": {
        -          "anyOf": [
        -            {
        -              "additionalProperties": true,
        -              "description": "A builder query: which datasource, view, metrics, dimensions and filters to compute",
        -              "properties": {
        -                "advanced": {
        -                  "additionalProperties": {},
        -                  "description": "Datasource-specific settings — describe_datasource lists required keys per view",
        -                  "type": "object"
        -                },
        -                "data_view": {
        -                  "description": "Data view (from describe_datasource), e.g. ACCOUNT",
        -                  "type": "string"
        -                },
        -                "datasource_id": {
        -                  "description": "Datasource alias, e.g. gadw (from datasources)",
        -                  "enum": [
        -                    "advanced-web-ranking",
        -                    "ac",
        -                    "adroll",
        -                    "ahrefs",
        -                    "basecamp",
        -                    "brightlocal",
        -                    "call-rail",
        -                    "drip",
        -                    "keywords",
        -                    "sendin-blue",
        -                    "sendgrid",
        -                    "moosend",
        -                    "mailer-lite",
        -                    "pingdom",
        -                    "uptime-robot",
        -                    "piwik-pro",
        -                    "wordpress",
        -                    "pabbly-connect",
        -                    "ment",
        -                    "twilio",
        -                    "switchy",
        -                    "vimeo",
        -                    "pinterest",
        -                    "pinterest-ads",
        -                    "gtres",
        -                    "paypal",
        -                    "gps",
        -                    "gs",
        -                    "CUSTOM_IMPORT",
        -                    "CUSTOM_DATA",
        -                    "CALCULATION",
        -                    "GOALS",
        -                    "str",
        -                    "wistia",
        -                    "ca-mon",
        -                    "convertkit",
        -                    "woocommerce",
        -                    "xero",
        -                    "matomo",
        -                    "go-high-level",
        -                    "wcs",
        -                    "bing-webmaster-tools",
        -                    "pipedrive",
        -                    "salesforce",
        -                    "tiktok",
        -                    "tiktok-ads",
        -                    "twr",
        -                    "twr-ads",
        -                    "spf",
        -                    "ytbe",
        -                    "google-local-services-ads",
        -                    "klaviyo",
        -                    "gsh",
        -                    "ga4",
        -                    "lkdin-ads",
        -                    "lkdin-pg",
        -                    "mlchmp",
        -                    "inst-ads",
        -                    "inst",
        -                    "fb-ads",
        -                    "fb-pg",
        -                    "gmb",
        -                    "serpstat",
        -                    "hubspot",
        -                    "gadw",
        -                    "sem-rush",
        -                    "se-ranking",
        -                    "microsoft-ads",
        -                    "plausible",
        -                    "snapchat-ads",
        -                    "amazon-advertising",
        -                    "microsoft-clarity",
        -                    "serp-watch",
        -                    "vbout",
        -                    "moz",
        -                    "chatgpt-ads",
        -                    "omnisend",
        -                    "airtable",
        -                    "nozzle",
        -                    "surnex",
        -                    "clickup",
        -                    "make",
        -                    "freshdesk",
        -                    "chart-mogul",
        -                    "amplitude",
        -                    "demo"
        -                  ],
        -                  "type": "string"
        -                },
        -                "dimensions": {
        -                  "description": "Breakdown dimensions, e.g. [{ value: \"DATE\" }]",
        -                  "items": {
        -                    "additionalProperties": true,
        -                    "properties": {
        -                      "custom": {
        -                        "description": "A dynamic dimension absent from the static catalog",
        -                        "type": "boolean"
        -                      },
        -                      "data_view": {
        -                        "description": "Data view the dimension belongs to; filled from the catalog when omitted",
        -                        "type": "string"
        -                      },
        -                      "label": {
        -                        "description": "Display name — renames the dimension on the widget",
        -                        "type": "string"
        -                      },
        -                      "selector": {
        -                        "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true",
        -                        "type": "string"
        -                      },
        -                      "value": {
        -                        "description": "Dimension id (from describe_datasource)",
        -                        "type": "string"
        -                      }
        -                    },
        -                    "required": [
        -                      "value"
        -                    ],
        -                    "type": "object"
        -                  },
        -                  "type": "array"
        -                },
        -                "filters": {
        -                  "description": "Row filters",
        -                  "items": {
        -                    "additionalProperties": true,
        -                    "properties": {
        -                      "field": {
        -                        "description": "Metric or dimension id to filter on",
        -                        "type": "string"
        -                      },
        -                      "logicalOperator": {
        -                        "anyOf": [
        -                          {
        -                            "enum": [
        -                              "and",
        -                              "or"
        -                            ],
        -                            "type": "string"
        -                          },
        -                          {
        -                            "type": "null"
        -                          }
        -                        ],
        -                        "description": "How this row joins the previous one — 'and' (default) or 'or'"
        -                      },
        -                      "operator": {
        -                        "description": "Operator id — the valid list per datasource comes from describe_datasource",
        -                        "type": "string"
        -                      },
        -                      "value": {
        -                        "anyOf": [
        -                          {
        -                            "type": "string"
        -                          },
        -                          {
        -                            "type": "number"
        -                          },
        -                          {
        -                            "type": "boolean"
        -                          },
        -                          {
        -                            "items": {},
        -                            "type": "array"
        -                          }
        -                        ],
        -                        "description": "Value to compare against"
        -                      }
        -                    },
        -                    "required": [
        -                      "field",
        -                      "operator",
        -                      "value"
        -                    ],
        -                    "type": "object"
        -                  },
        -                  "type": "array"
        -                },
        -                "metrics": {
        -                  "description": "Metrics to compute over — must belong to the data view",
        -                  "items": {
        -                    "additionalProperties": true,
        -                    "properties": {
        -                      "action_type": {
        -                        "description": "Meta/Instagram action-based metrics only (actions, conversions, cost_per_action_type…) — the action key the value is read under. Filled from the catalog — only send it with custom: true",
        -                        "type": "string"
        -                      },
        -                      "custom": {
        -                        "description": "A dynamic per-account metric absent from the static catalog (e.g. a Meta custom conversion)",
        -                        "type": "boolean"
        -                      },
        -                      "data_view": {
        -                        "description": "Data view the metric belongs to; resolved from the catalog when omitted",
        -                        "type": "string"
        -                      },
        -                      "invert_comparison": {
        -                        "description": "Colour a rise as negative — for lower-is-better metrics (cost, CPC, bounce rate)",
        -                        "type": "boolean"
        -                      },
        -                      "label": {
        -                        "description": "Display name — renames the metric on the widget",
        -                        "type": "string"
        -                      },
        -                      "request_metrics": {
        -                        "description": "The upstream vendor field(s) this metric is built from. Filled from the catalog — only send it with custom: true",
        -                        "items": {
        -                          "type": "string"
        -                        },
        -                        "type": "array"
        -                      },
        -                      "selector": {
        -                        "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true, copying what describe_datasource reports",
        -                        "type": "string"
        -                      },
        -                      "summary": {
        -                        "description": "Aggregation for the total: 'SUM', 'AVG', 'MAX', or 'MIN'",
        -                        "enum": [
        -                          "SUM",
        -                          "AVG",
        -                          "MAX",
        -                          "MIN"
        -                        ],
        -                        "type": "string"
        -                      },
        -                      "symbol": {
        -                        "description": "Number format. Numeric: 'number' (plain), 'decimal', 'percent' (or '%'), 'currency' (or '$'). Duration: 's', 'ms', 'time', 'seconds', 'minutes', 'milliseconds'. Passed through unformatted: 'text', 'link', 'date'",
        -                        "enum": [
        -                          "number",
        -                          "decimal",
        -                          "percent",
        -                          "%",
        -                          "currency",
        -                          "$",
        -                          "text",
        -                          "link",
        -                          "date",
        -                          "s",
        -                          "ms",
        -                          "time",
        -                          "seconds",
        -                          "minutes",
        -                          "milliseconds"
        -                        ],
        -                        "type": "string"
        -                      },
        -                      "value": {
        -                        "description": "Metric id (from describe_datasource)",
        -                        "type": "string"
        -                      }
        -                    },
        -                    "required": [
        -                      "value"
        -                    ],
        -                    "type": "object"
        -                  },
        -                  "type": "array"
        -                }
        -              },
        -              "type": "object"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Required when type is METRIC — the query whose value this token contributes"
        -        },
        -        "type": {
        -          "description": "'METRIC' (a query), 'NUMBER' (a literal), or 'OPERATOR' (an arithmetic symbol)",
        -          "enum": [
        -            "METRIC",
        -            "NUMBER",
        -            "OPERATOR"
        -          ],
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "id": {
        +          "description": "Unique token id within the formula, e.g. \"t1\"",
        +          "type": "string"
        +        },
        +        "number": {
        +          "description": "Required when type is NUMBER",
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "operator": {
        +          "anyOf": [
        +            {
        +              "enum": [
        +                "+",
        +                "-",
        +                "*",
        +                "/",
        +                "×",
        +                "÷",
        +                "(",
        +                ")"
        +              ],
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Required when type is OPERATOR. Use × and ÷ for multiply/divide (what the UI writes); the ASCII * and / are also accepted since migrated formulas use them. Grouping: ( and )"
        +        },
        +        "query": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "description": "A builder query: which datasource, view, metrics, dimensions and filters to compute",
        +              "properties": {
        +                "advanced": {
        +                  "additionalProperties": {},
        +                  "description": "Datasource-specific settings — describe_datasource lists required keys per view",
        +                  "type": "object"
        +                },
        +                "data_view": {
        +                  "description": "Data view (from describe_datasource), e.g. ACCOUNT",
        +                  "type": "string"
        +                },
        +                "datasource_id": {
        +                  "description": "Datasource alias, e.g. gadw (from datasources)",
        +                  "enum": [
        +                    "advanced-web-ranking",
        +                    "ac",
        +                    "adroll",
        +                    "ahrefs",
        +                    "basecamp",
        +                    "brightlocal",
        +                    "call-rail",
        +                    "drip",
        +                    "keywords",
        +                    "sendin-blue",
        +                    "sendgrid",
        +                    "moosend",
        +                    "mailer-lite",
        +                    "pingdom",
        +                    "uptime-robot",
        +                    "piwik-pro",
        +                    "wordpress",
        +                    "pabbly-connect",
        +                    "ment",
        +                    "twilio",
        +                    "switchy",
        +                    "vimeo",
        +                    "pinterest",
        +                    "pinterest-ads",
        +                    "gtres",
        +                    "paypal",
        +                    "gps",
        +                    "gs",
        +                    "CUSTOM_IMPORT",
        +                    "CUSTOM_DATA",
        +                    "CALCULATION",
        +                    "GOALS",
        +                    "str",
        +                    "wistia",
        +                    "ca-mon",
        +                    "convertkit",
        +                    "woocommerce",
        +                    "xero",
        +                    "matomo",
        +                    "go-high-level",
        +                    "wcs",
        +                    "bing-webmaster-tools",
        +                    "pipedrive",
        +                    "salesforce",
        +                    "tiktok",
        +                    "tiktok-ads",
        +                    "twr",
        +                    "twr-ads",
        +                    "spf",
        +                    "ytbe",
        +                    "google-local-services-ads",
        +                    "klaviyo",
        +                    "gsh",
        +                    "ga4",
        +                    "lkdin-ads",
        +                    "lkdin-pg",
        +                    "mlchmp",
        +                    "inst-ads",
        +                    "inst",
        +                    "fb-ads",
        +                    "fb-pg",
        +                    "gmb",
        +                    "serpstat",
        +                    "hubspot",
        +                    "gadw",
        +                    "sem-rush",
        +                    "se-ranking",
        +                    "microsoft-ads",
        +                    "plausible",
        +                    "snapchat-ads",
        +                    "amazon-advertising",
        +                    "microsoft-clarity",
        +                    "serp-watch",
        +                    "vbout",
        +                    "moz",
        +                    "chatgpt-ads",
        +                    "omnisend",
        +                    "airtable",
        +                    "nozzle",
        +                    "surnex",
        +                    "clickup",
        +                    "make",
        +                    "freshdesk",
        +                    "chart-mogul",
        +                    "amplitude",
        +                    "harvest",
        +                    "demo"
        +                  ],
        +                  "type": "string"
        +                },
        +                "dimensions": {
        +                  "description": "Breakdown dimensions, e.g. [{ value: \"DATE\" }]",
        +                  "items": {
        +                    "additionalProperties": true,
        +                    "properties": {
        +                      "custom": {
        +                        "description": "A dynamic dimension absent from the static catalog",
        +                        "type": "boolean"
        +                      },
        +                      "data_view": {
        +                        "description": "Data view the dimension belongs to; filled from the catalog when omitted",
        +                        "type": "string"
        +                      },
        +                      "label": {
        +                        "description": "Display name — renames the dimension on the widget",
        +                        "type": "string"
        +                      },
        +                      "selector": {
        +                        "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true",
        +                        "type": "string"
        +                      },
        +                      "value": {
        +                        "description": "Dimension id (from describe_datasource)",
        +                        "type": "string"
        +                      }
        +                    },
        +                    "required": [
        +                      "value"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "type": "array"
        +                },
        +                "filters": {
        +                  "description": "Row filters",
        +                  "items": {
        +                    "additionalProperties": true,
        +                    "properties": {
        +                      "field": {
        +                        "description": "Metric or dimension id to filter on",
        +                        "type": "string"
        +                      },
        +                      "logicalOperator": {
        +                        "anyOf": [
        +                          {
        +                            "enum": [
        +                              "and",
        +                              "or"
        +                            ],
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "description": "How this row joins the previous one — 'and' (default) or 'or'"
        +                      },
        +                      "operator": {
        +                        "description": "Operator id — the valid list per datasource comes from describe_datasource",
        +                        "type": "string"
        +                      },
        +                      "value": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "number"
        +                          },
        +                          {
        +                            "type": "boolean"
        +                          },
        +                          {
        +                            "items": {},
        +                            "type": "array"
        +                          }
        +                        ],
        +                        "description": "Value to compare against"
        +                      }
        +                    },
        +                    "required": [
        +                      "field",
        +                      "operator",
        +                      "value"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "type": "array"
        +                },
        +                "metrics": {
        +                  "description": "Metrics to compute over — must belong to the data view",
        +                  "items": {
        +                    "additionalProperties": true,
        +                    "properties": {
        +                      "action_type": {
        +                        "description": "Meta/Instagram action-based metrics only (actions, conversions, cost_per_action_type…) — the action key the value is read under. Filled from the catalog — only send it with custom: true",
        +                        "type": "string"
        +                      },
        +                      "custom": {
        +                        "description": "A dynamic per-account metric absent from the static catalog (e.g. a Meta custom conversion)",
        +                        "type": "boolean"
        +                      },
        +                      "data_view": {
        +                        "description": "Data view the metric belongs to; resolved from the catalog when omitted",
        +                        "type": "string"
        +                      },
        +                      "invert_comparison": {
        +                        "description": "Colour a rise as negative — for lower-is-better metrics (cost, CPC, bounce rate)",
        +                        "type": "boolean"
        +                      },
        +                      "label": {
        +                        "description": "Display name — renames the metric on the widget",
        +                        "type": "string"
        +                      },
        +                      "request_metrics": {
        +                        "description": "The upstream vendor field(s) this metric is built from. Filled from the catalog — only send it with custom: true",
        +                        "items": {
        +                          "type": "string"
        +                        },
        +                        "type": "array"
        +                      },
        +                      "selector": {
        +                        "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true, copying what describe_datasource reports",
        +                        "type": "string"
        +                      },
        +                      "summary": {
        +                        "description": "Aggregation for the total: 'SUM', 'AVG', 'MAX', or 'MIN'",
        +                        "enum": [
        +                          "SUM",
        +                          "AVG",
        +                          "MAX",
        +                          "MIN"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      "symbol": {
        +                        "description": "Number format. Numeric: 'number' (plain), 'decimal', 'percent' (or '%'), 'currency' (or '$'). Duration: 's', 'ms', 'time', 'seconds', 'minutes', 'milliseconds'. Passed through unformatted: 'text', 'link', 'date'",
        +                        "enum": [
        +                          "number",
        +                          "decimal",
        +                          "percent",
        +                          "%",
        +                          "currency",
        +                          "$",
        +                          "text",
        +                          "link",
        +                          "date",
        +                          "s",
        +                          "ms",
        +                          "time",
        +                          "seconds",
        +                          "minutes",
        +                          "milliseconds"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      "value": {
        +                        "description": "Metric id (from describe_datasource)",
        +                        "type": "string"
        +                      }
        +                    },
        +                    "required": [
        +                      "value"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "type": "array"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Required when type is METRIC — the query whose value this token contributes"
        +        },
        +        "type": {
        +          "description": "'METRIC' (a query), 'NUMBER' (a literal), or 'OPERATOR' (an arithmetic symbol)",
        +          "enum": [
        +            "METRIC",
        +            "NUMBER",
        +            "OPERATOR"
        +          ],
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "id",
        +        "type"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
    • Changedupdate_data_widget1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk",
        -  "chart-mogul",
        -  "amplitude"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude",
        +  "harvest"
        +]
    • Changedupdate_goal1 field changed
      • changedInput schema / properties / query / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk",
        -  "chart-mogul",
        -  "amplitude",
        -  "demo"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude",
        +  "harvest",
        +  "demo"
        +]
  4. 16 tool updates
    • Changedadd_data_widget1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude"
        +]
    • Changedcreate_calculated_metric1 field changed
      • changedInput schema / properties / formula / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": true,
        -      "properties": {
        -        "id": {
        -          "description": "Unique token id within the formula, e.g. \"t1\"",
        -          "type": "string"
        -        },
        -        "number": {
        -          "description": "Required when type is NUMBER",
        -          "type": [
        -            "number",
        -            "null"
        -          ]
        -        },
        -        "operator": {
        -          "anyOf": [
        -            {
        -              "enum": [
        -                "+",
        -                "-",
        -                "*",
        -                "/",
        -                "×",
        -                "÷",
        -                "(",
        -                ")"
        -              ],
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Required when type is OPERATOR. Use × and ÷ for multiply/divide (what the UI writes); the ASCII * and / are also accepted since migrated formulas use them. Grouping: ( and )"
        -        },
        -        "query": {
        -          "anyOf": [
        -            {
        -              "additionalProperties": true,
        -              "description": "A builder query: which datasource, view, metrics, dimensions and filters to compute",
        -              "properties": {
        -                "advanced": {
        -                  "additionalProperties": {},
        -                  "description": "Datasource-specific settings — describe_datasource lists required keys per view",
        -                  "type": "object"
        -                },
        -                "data_view": {
        -                  "description": "Data view (from describe_datasource), e.g. ACCOUNT",
        -                  "type": "string"
        -                },
        -                "datasource_id": {
        -                  "description": "Datasource alias, e.g. gadw (from datasources)",
        -                  "enum": [
        -                    "advanced-web-ranking",
        -                    "ac",
        -                    "adroll",
        -                    "ahrefs",
        -                    "basecamp",
        -                    "brightlocal",
        -                    "call-rail",
        -                    "drip",
        -                    "keywords",
        -                    "sendin-blue",
        -                    "sendgrid",
        -                    "moosend",
        -                    "mailer-lite",
        -                    "pingdom",
        -                    "uptime-robot",
        -                    "piwik-pro",
        -                    "wordpress",
        -                    "pabbly-connect",
        -                    "ment",
        -                    "twilio",
        -                    "switchy",
        -                    "vimeo",
        -                    "pinterest",
        -                    "pinterest-ads",
        -                    "gtres",
        -                    "paypal",
        -                    "gps",
        -                    "gs",
        -                    "CUSTOM_IMPORT",
        -                    "CUSTOM_DATA",
        -                    "CALCULATION",
        -                    "GOALS",
        -                    "str",
        -                    "wistia",
        -                    "ca-mon",
        -                    "convertkit",
        -                    "woocommerce",
        -                    "xero",
        -                    "matomo",
        -                    "go-high-level",
        -                    "wcs",
        -                    "bing-webmaster-tools",
        -                    "pipedrive",
        -                    "salesforce",
        -                    "tiktok",
        -                    "tiktok-ads",
        -                    "twr",
        -                    "twr-ads",
        -                    "spf",
        -                    "ytbe",
        -                    "google-local-services-ads",
        -                    "klaviyo",
        -                    "gsh",
        -                    "ga4",
        -                    "lkdin-ads",
        -                    "lkdin-pg",
        -                    "mlchmp",
        -                    "inst-ads",
        -                    "inst",
        -                    "fb-ads",
        -                    "fb-pg",
        -                    "gmb",
        -                    "serpstat",
        -                    "hubspot",
        -                    "gadw",
        -                    "sem-rush",
        -                    "se-ranking",
        -                    "microsoft-ads",
        -                    "plausible",
        -                    "snapchat-ads",
        -                    "amazon-advertising",
        -                    "microsoft-clarity",
        -                    "serp-watch",
        -                    "vbout",
        -                    "moz",
        -                    "chatgpt-ads",
        -                    "omnisend",
        -                    "airtable",
        -                    "nozzle",
        -                    "surnex",
        -                    "clickup",
        -                    "make",
        -                    "freshdesk",
        -                    "demo"
        -                  ],
        -                  "type": "string"
        -                },
        -                "dimensions": {
        -                  "description": "Breakdown dimensions, e.g. [{ value: \"DATE\" }]",
        -                  "items": {
        -                    "additionalProperties": true,
        -                    "properties": {
        -                      "custom": {
        -                        "description": "A dynamic dimension absent from the static catalog",
        -                        "type": "boolean"
        -                      },
        -                      "data_view": {
        -                        "description": "Data view the dimension belongs to; filled from the catalog when omitted",
        -                        "type": "string"
        -                      },
        -                      "label": {
        -                        "description": "Display name — renames the dimension on the widget",
        -                        "type": "string"
        -                      },
        -                      "selector": {
        -                        "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true",
        -                        "type": "string"
        -                      },
        -                      "value": {
        -                        "description": "Dimension id (from describe_datasource)",
        -                        "type": "string"
        -                      }
        -                    },
        -                    "required": [
        -                      "value"
        -                    ],
        -                    "type": "object"
        -                  },
        -                  "type": "array"
        -                },
        -                "filters": {
        -                  "description": "Row filters",
        -                  "items": {
        -                    "additionalProperties": true,
        -                    "properties": {
        -                      "field": {
        -                        "description": "Metric or dimension id to filter on",
        -                        "type": "string"
        -                      },
        -                      "logicalOperator": {
        -                        "anyOf": [
        -                          {
        -                            "enum": [
        -                              "and",
        -                              "or"
        -                            ],
        -                            "type": "string"
        -                          },
        -                          {
        -                            "type": "null"
        -                          }
        -                        ],
        -                        "description": "How this row joins the previous one — 'and' (default) or 'or'"
        -                      },
        -                      "operator": {
        -                        "description": "Operator id — the valid list per datasource comes from describe_datasource",
        -                        "type": "string"
        -                      },
        -                      "value": {
        -                        "anyOf": [
        -                          {
        -                            "type": "string"
        -                          },
        -                          {
        -                            "type": "number"
        -                          },
        -                          {
        -                            "type": "boolean"
        -                          },
        -                          {
        -                            "items": {},
        -                            "type": "array"
        -                          }
        -                        ],
        -                        "description": "Value to compare against"
        -                      }
        -                    },
        -                    "required": [
        -                      "field",
        -                      "operator",
        -                      "value"
        -                    ],
        -                    "type": "object"
        -                  },
        -                  "type": "array"
        -                },
        -                "metrics": {
        -                  "description": "Metrics to compute over — must belong to the data view",
        -                  "items": {
        -                    "additionalProperties": true,
        -                    "properties": {
        -                      "action_type": {
        -                        "description": "Meta/Instagram action-based metrics only (actions, conversions, cost_per_action_type…) — the action key the value is read under. Filled from the catalog — only send it with custom: true",
        -                        "type": "string"
        -                      },
        -                      "custom": {
        -                        "description": "A dynamic per-account metric absent from the static catalog (e.g. a Meta custom conversion)",
        -                        "type": "boolean"
        -                      },
        -                      "data_view": {
        -                        "description": "Data view the metric belongs to; resolved from the catalog when omitted",
        -                        "type": "string"
        -                      },
        -                      "invert_comparison": {
        -                        "description": "Colour a rise as negative — for lower-is-better metrics (cost, CPC, bounce rate)",
        -                        "type": "boolean"
        -                      },
        -                      "label": {
        -                        "description": "Display name — renames the metric on the widget",
        -                        "type": "string"
        -                      },
        -                      "request_metrics": {
        -                        "description": "The upstream vendor field(s) this metric is built from. Filled from the catalog — only send it with custom: true",
        -                        "items": {
        -                          "type": "string"
        -                        },
        -                        "type": "array"
        -                      },
        -                      "selector": {
        -                        "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true, copying what describe_datasource reports",
        -                        "type": "string"
        -                      },
        -                      "summary": {
        -                        "description": "Aggregation for the total: 'SUM', 'AVG', 'MAX', or 'MIN'",
        -                        "enum": [
        -                          "SUM",
        -                          "AVG",
        -                          "MAX",
        -                          "MIN"
        -                        ],
        -                        "type": "string"
        -                      },
        -                      "symbol": {
        -                        "description": "Number format. Numeric: 'number' (plain), 'decimal', 'percent' (or '%'), 'currency' (or '$'). Duration: 's', 'ms', 'time', 'seconds', 'minutes', 'milliseconds'. Passed through unformatted: 'text', 'link', 'date'",
        -                        "enum": [
        -                          "number",
        -                          "decimal",
        -                          "percent",
        -                          "%",
        -                          "currency",
        -                          "$",
        -                          "text",
        -                          "link",
        -                          "date",
        -                          "s",
        -                          "ms",
        -                          "time",
        -                          "seconds",
        -                          "minutes",
        -                          "milliseconds"
        -                        ],
        -                        "type": "string"
        -                      },
        -                      "value": {
        -                        "description": "Metric id (from describe_datasource)",
        -                        "type": "string"
        -                      }
        -                    },
        -                    "required": [
        -                      "value"
        -                    ],
        -                    "type": "object"
        -                  },
        -                  "type": "array"
        -                }
        -              },
        -              "type": "object"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Required when type is METRIC — the query whose value this token contributes"
        -        },
        -        "type": {
        -          "description": "'METRIC' (a query), 'NUMBER' (a literal), or 'OPERATOR' (an arithmetic symbol)",
        -          "enum": [
        -            "METRIC",
        -            "NUMBER",
        -            "OPERATOR"
        -          ],
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "id": {
        +          "description": "Unique token id within the formula, e.g. \"t1\"",
        +          "type": "string"
        +        },
        +        "number": {
        +          "description": "Required when type is NUMBER",
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "operator": {
        +          "anyOf": [
        +            {
        +              "enum": [
        +                "+",
        +                "-",
        +                "*",
        +                "/",
        +                "×",
        +                "÷",
        +                "(",
        +                ")"
        +              ],
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Required when type is OPERATOR. Use × and ÷ for multiply/divide (what the UI writes); the ASCII * and / are also accepted since migrated formulas use them. Grouping: ( and )"
        +        },
        +        "query": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "description": "A builder query: which datasource, view, metrics, dimensions and filters to compute",
        +              "properties": {
        +                "advanced": {
        +                  "additionalProperties": {},
        +                  "description": "Datasource-specific settings — describe_datasource lists required keys per view",
        +                  "type": "object"
        +                },
        +                "data_view": {
        +                  "description": "Data view (from describe_datasource), e.g. ACCOUNT",
        +                  "type": "string"
        +                },
        +                "datasource_id": {
        +                  "description": "Datasource alias, e.g. gadw (from datasources)",
        +                  "enum": [
        +                    "advanced-web-ranking",
        +                    "ac",
        +                    "adroll",
        +                    "ahrefs",
        +                    "basecamp",
        +                    "brightlocal",
        +                    "call-rail",
        +                    "drip",
        +                    "keywords",
        +                    "sendin-blue",
        +                    "sendgrid",
        +                    "moosend",
        +                    "mailer-lite",
        +                    "pingdom",
        +                    "uptime-robot",
        +                    "piwik-pro",
        +                    "wordpress",
        +                    "pabbly-connect",
        +                    "ment",
        +                    "twilio",
        +                    "switchy",
        +                    "vimeo",
        +                    "pinterest",
        +                    "pinterest-ads",
        +                    "gtres",
        +                    "paypal",
        +                    "gps",
        +                    "gs",
        +                    "CUSTOM_IMPORT",
        +                    "CUSTOM_DATA",
        +                    "CALCULATION",
        +                    "GOALS",
        +                    "str",
        +                    "wistia",
        +                    "ca-mon",
        +                    "convertkit",
        +                    "woocommerce",
        +                    "xero",
        +                    "matomo",
        +                    "go-high-level",
        +                    "wcs",
        +                    "bing-webmaster-tools",
        +                    "pipedrive",
        +                    "salesforce",
        +                    "tiktok",
        +                    "tiktok-ads",
        +                    "twr",
        +                    "twr-ads",
        +                    "spf",
        +                    "ytbe",
        +                    "google-local-services-ads",
        +                    "klaviyo",
        +                    "gsh",
        +                    "ga4",
        +                    "lkdin-ads",
        +                    "lkdin-pg",
        +                    "mlchmp",
        +                    "inst-ads",
        +                    "inst",
        +                    "fb-ads",
        +                    "fb-pg",
        +                    "gmb",
        +                    "serpstat",
        +                    "hubspot",
        +                    "gadw",
        +                    "sem-rush",
        +                    "se-ranking",
        +                    "microsoft-ads",
        +                    "plausible",
        +                    "snapchat-ads",
        +                    "amazon-advertising",
        +                    "microsoft-clarity",
        +                    "serp-watch",
        +                    "vbout",
        +                    "moz",
        +                    "chatgpt-ads",
        +                    "omnisend",
        +                    "airtable",
        +                    "nozzle",
        +                    "surnex",
        +                    "clickup",
        +                    "make",
        +                    "freshdesk",
        +                    "chart-mogul",
        +                    "amplitude",
        +                    "demo"
        +                  ],
        +                  "type": "string"
        +                },
        +                "dimensions": {
        +                  "description": "Breakdown dimensions, e.g. [{ value: \"DATE\" }]",
        +                  "items": {
        +                    "additionalProperties": true,
        +                    "properties": {
        +                      "custom": {
        +                        "description": "A dynamic dimension absent from the static catalog",
        +                        "type": "boolean"
        +                      },
        +                      "data_view": {
        +                        "description": "Data view the dimension belongs to; filled from the catalog when omitted",
        +                        "type": "string"
        +                      },
        +                      "label": {
        +                        "description": "Display name — renames the dimension on the widget",
        +                        "type": "string"
        +                      },
        +                      "selector": {
        +                        "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true",
        +                        "type": "string"
        +                      },
        +                      "value": {
        +                        "description": "Dimension id (from describe_datasource)",
        +                        "type": "string"
        +                      }
        +                    },
        +                    "required": [
        +                      "value"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "type": "array"
        +                },
        +                "filters": {
        +                  "description": "Row filters",
        +                  "items": {
        +                    "additionalProperties": true,
        +                    "properties": {
        +                      "field": {
        +                        "description": "Metric or dimension id to filter on",
        +                        "type": "string"
        +                      },
        +                      "logicalOperator": {
        +                        "anyOf": [
        +                          {
        +                            "enum": [
        +                              "and",
        +                              "or"
        +                            ],
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "description": "How this row joins the previous one — 'and' (default) or 'or'"
        +                      },
        +                      "operator": {
        +                        "description": "Operator id — the valid list per datasource comes from describe_datasource",
        +                        "type": "string"
        +                      },
        +                      "value": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "number"
        +                          },
        +                          {
        +                            "type": "boolean"
        +                          },
        +                          {
        +                            "items": {},
        +                            "type": "array"
        +                          }
        +                        ],
        +                        "description": "Value to compare against"
        +                      }
        +                    },
        +                    "required": [
        +                      "field",
        +                      "operator",
        +                      "value"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "type": "array"
        +                },
        +                "metrics": {
        +                  "description": "Metrics to compute over — must belong to the data view",
        +                  "items": {
        +                    "additionalProperties": true,
        +                    "properties": {
        +                      "action_type": {
        +                        "description": "Meta/Instagram action-based metrics only (actions, conversions, cost_per_action_type…) — the action key the value is read under. Filled from the catalog — only send it with custom: true",
        +                        "type": "string"
        +                      },
        +                      "custom": {
        +                        "description": "A dynamic per-account metric absent from the static catalog (e.g. a Meta custom conversion)",
        +                        "type": "boolean"
        +                      },
        +                      "data_view": {
        +                        "description": "Data view the metric belongs to; resolved from the catalog when omitted",
        +                        "type": "string"
        +                      },
        +                      "invert_comparison": {
        +                        "description": "Colour a rise as negative — for lower-is-better metrics (cost, CPC, bounce rate)",
        +                        "type": "boolean"
        +                      },
        +                      "label": {
        +                        "description": "Display name — renames the metric on the widget",
        +                        "type": "string"
        +                      },
        +                      "request_metrics": {
        +                        "description": "The upstream vendor field(s) this metric is built from. Filled from the catalog — only send it with custom: true",
        +                        "items": {
        +                          "type": "string"
        +                        },
        +                        "type": "array"
        +                      },
        +                      "selector": {
        +                        "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true, copying what describe_datasource reports",
        +                        "type": "string"
        +                      },
        +                      "summary": {
        +                        "description": "Aggregation for the total: 'SUM', 'AVG', 'MAX', or 'MIN'",
        +                        "enum": [
        +                          "SUM",
        +                          "AVG",
        +                          "MAX",
        +                          "MIN"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      "symbol": {
        +                        "description": "Number format. Numeric: 'number' (plain), 'decimal', 'percent' (or '%'), 'currency' (or '$'). Duration: 's', 'ms', 'time', 'seconds', 'minutes', 'milliseconds'. Passed through unformatted: 'text', 'link', 'date'",
        +                        "enum": [
        +                          "number",
        +                          "decimal",
        +                          "percent",
        +                          "%",
        +                          "currency",
        +                          "$",
        +                          "text",
        +                          "link",
        +                          "date",
        +                          "s",
        +                          "ms",
        +                          "time",
        +                          "seconds",
        +                          "minutes",
        +                          "milliseconds"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      "value": {
        +                        "description": "Metric id (from describe_datasource)",
        +                        "type": "string"
        +                      }
        +                    },
        +                    "required": [
        +                      "value"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "type": "array"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Required when type is METRIC — the query whose value this token contributes"
        +        },
        +        "type": {
        +          "description": "'METRIC' (a query), 'NUMBER' (a literal), or 'OPERATOR' (an arithmetic symbol)",
        +          "enum": [
        +            "METRIC",
        +            "NUMBER",
        +            "OPERATOR"
        +          ],
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "id",
        +        "type"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
    • Changedcreate_connection1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude"
        +]
    • Changedcreate_goal1 field changed
      • changedInput schema / properties / query / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk",
        -  "demo"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude",
        +  "demo"
        +]
    • Changeddatasource_resources1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude"
        +]
    • Changeddescribe_datasource1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude"
        +]
    • Changedlink_datasource1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude"
        +]
    • Changedlist_assets1 field changed
      • changedInput schema / properties / datasources / items / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude"
        +]
    • Changedlist_templates1 field changed
      • changedInput schema / properties / datasources / items / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude"
        +]
    • Changedquery_data1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude"
        +]
    • Changedrefresh_report1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude"
        +]
    • Changedtest_connection1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude"
        +]
    • Changedunlink_datasource1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude"
        +]
    • Changedupdate_calculated_metric1 field changed
      • changedInput schema / properties / formula / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": true,
        -      "properties": {
        -        "id": {
        -          "description": "Unique token id within the formula, e.g. \"t1\"",
        -          "type": "string"
        -        },
        -        "number": {
        -          "description": "Required when type is NUMBER",
        -          "type": [
        -            "number",
        -            "null"
        -          ]
        -        },
        -        "operator": {
        -          "anyOf": [
        -            {
        -              "enum": [
        -                "+",
        -                "-",
        -                "*",
        -                "/",
        -                "×",
        -                "÷",
        -                "(",
        -                ")"
        -              ],
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Required when type is OPERATOR. Use × and ÷ for multiply/divide (what the UI writes); the ASCII * and / are also accepted since migrated formulas use them. Grouping: ( and )"
        -        },
        -        "query": {
        -          "anyOf": [
        -            {
        -              "additionalProperties": true,
        -              "description": "A builder query: which datasource, view, metrics, dimensions and filters to compute",
        -              "properties": {
        -                "advanced": {
        -                  "additionalProperties": {},
        -                  "description": "Datasource-specific settings — describe_datasource lists required keys per view",
        -                  "type": "object"
        -                },
        -                "data_view": {
        -                  "description": "Data view (from describe_datasource), e.g. ACCOUNT",
        -                  "type": "string"
        -                },
        -                "datasource_id": {
        -                  "description": "Datasource alias, e.g. gadw (from datasources)",
        -                  "enum": [
        -                    "advanced-web-ranking",
        -                    "ac",
        -                    "adroll",
        -                    "ahrefs",
        -                    "basecamp",
        -                    "brightlocal",
        -                    "call-rail",
        -                    "drip",
        -                    "keywords",
        -                    "sendin-blue",
        -                    "sendgrid",
        -                    "moosend",
        -                    "mailer-lite",
        -                    "pingdom",
        -                    "uptime-robot",
        -                    "piwik-pro",
        -                    "wordpress",
        -                    "pabbly-connect",
        -                    "ment",
        -                    "twilio",
        -                    "switchy",
        -                    "vimeo",
        -                    "pinterest",
        -                    "pinterest-ads",
        -                    "gtres",
        -                    "paypal",
        -                    "gps",
        -                    "gs",
        -                    "CUSTOM_IMPORT",
        -                    "CUSTOM_DATA",
        -                    "CALCULATION",
        -                    "GOALS",
        -                    "str",
        -                    "wistia",
        -                    "ca-mon",
        -                    "convertkit",
        -                    "woocommerce",
        -                    "xero",
        -                    "matomo",
        -                    "go-high-level",
        -                    "wcs",
        -                    "bing-webmaster-tools",
        -                    "pipedrive",
        -                    "salesforce",
        -                    "tiktok",
        -                    "tiktok-ads",
        -                    "twr",
        -                    "twr-ads",
        -                    "spf",
        -                    "ytbe",
        -                    "google-local-services-ads",
        -                    "klaviyo",
        -                    "gsh",
        -                    "ga4",
        -                    "lkdin-ads",
        -                    "lkdin-pg",
        -                    "mlchmp",
        -                    "inst-ads",
        -                    "inst",
        -                    "fb-ads",
        -                    "fb-pg",
        -                    "gmb",
        -                    "serpstat",
        -                    "hubspot",
        -                    "gadw",
        -                    "sem-rush",
        -                    "se-ranking",
        -                    "microsoft-ads",
        -                    "plausible",
        -                    "snapchat-ads",
        -                    "amazon-advertising",
        -                    "microsoft-clarity",
        -                    "serp-watch",
        -                    "vbout",
        -                    "moz",
        -                    "chatgpt-ads",
        -                    "omnisend",
        -                    "airtable",
        -                    "nozzle",
        -                    "surnex",
        -                    "clickup",
        -                    "make",
        -                    "freshdesk",
        -                    "demo"
        -                  ],
        -                  "type": "string"
        -                },
        -                "dimensions": {
        -                  "description": "Breakdown dimensions, e.g. [{ value: \"DATE\" }]",
        -                  "items": {
        -                    "additionalProperties": true,
        -                    "properties": {
        -                      "custom": {
        -                        "description": "A dynamic dimension absent from the static catalog",
        -                        "type": "boolean"
        -                      },
        -                      "data_view": {
        -                        "description": "Data view the dimension belongs to; filled from the catalog when omitted",
        -                        "type": "string"
        -                      },
        -                      "label": {
        -                        "description": "Display name — renames the dimension on the widget",
        -                        "type": "string"
        -                      },
        -                      "selector": {
        -                        "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true",
        -                        "type": "string"
        -                      },
        -                      "value": {
        -                        "description": "Dimension id (from describe_datasource)",
        -                        "type": "string"
        -                      }
        -                    },
        -                    "required": [
        -                      "value"
        -                    ],
        -                    "type": "object"
        -                  },
        -                  "type": "array"
        -                },
        -                "filters": {
        -                  "description": "Row filters",
        -                  "items": {
        -                    "additionalProperties": true,
        -                    "properties": {
        -                      "field": {
        -                        "description": "Metric or dimension id to filter on",
        -                        "type": "string"
        -                      },
        -                      "logicalOperator": {
        -                        "anyOf": [
        -                          {
        -                            "enum": [
        -                              "and",
        -                              "or"
        -                            ],
        -                            "type": "string"
        -                          },
        -                          {
        -                            "type": "null"
        -                          }
        -                        ],
        -                        "description": "How this row joins the previous one — 'and' (default) or 'or'"
        -                      },
        -                      "operator": {
        -                        "description": "Operator id — the valid list per datasource comes from describe_datasource",
        -                        "type": "string"
        -                      },
        -                      "value": {
        -                        "anyOf": [
        -                          {
        -                            "type": "string"
        -                          },
        -                          {
        -                            "type": "number"
        -                          },
        -                          {
        -                            "type": "boolean"
        -                          },
        -                          {
        -                            "items": {},
        -                            "type": "array"
        -                          }
        -                        ],
        -                        "description": "Value to compare against"
        -                      }
        -                    },
        -                    "required": [
        -                      "field",
        -                      "operator",
        -                      "value"
        -                    ],
        -                    "type": "object"
        -                  },
        -                  "type": "array"
        -                },
        -                "metrics": {
        -                  "description": "Metrics to compute over — must belong to the data view",
        -                  "items": {
        -                    "additionalProperties": true,
        -                    "properties": {
        -                      "action_type": {
        -                        "description": "Meta/Instagram action-based metrics only (actions, conversions, cost_per_action_type…) — the action key the value is read under. Filled from the catalog — only send it with custom: true",
        -                        "type": "string"
        -                      },
        -                      "custom": {
        -                        "description": "A dynamic per-account metric absent from the static catalog (e.g. a Meta custom conversion)",
        -                        "type": "boolean"
        -                      },
        -                      "data_view": {
        -                        "description": "Data view the metric belongs to; resolved from the catalog when omitted",
        -                        "type": "string"
        -                      },
        -                      "invert_comparison": {
        -                        "description": "Colour a rise as negative — for lower-is-better metrics (cost, CPC, bounce rate)",
        -                        "type": "boolean"
        -                      },
        -                      "label": {
        -                        "description": "Display name — renames the metric on the widget",
        -                        "type": "string"
        -                      },
        -                      "request_metrics": {
        -                        "description": "The upstream vendor field(s) this metric is built from. Filled from the catalog — only send it with custom: true",
        -                        "items": {
        -                          "type": "string"
        -                        },
        -                        "type": "array"
        -                      },
        -                      "selector": {
        -                        "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true, copying what describe_datasource reports",
        -                        "type": "string"
        -                      },
        -                      "summary": {
        -                        "description": "Aggregation for the total: 'SUM', 'AVG', 'MAX', or 'MIN'",
        -                        "enum": [
        -                          "SUM",
        -                          "AVG",
        -                          "MAX",
        -                          "MIN"
        -                        ],
        -                        "type": "string"
        -                      },
        -                      "symbol": {
        -                        "description": "Number format. Numeric: 'number' (plain), 'decimal', 'percent' (or '%'), 'currency' (or '$'). Duration: 's', 'ms', 'time', 'seconds', 'minutes', 'milliseconds'. Passed through unformatted: 'text', 'link', 'date'",
        -                        "enum": [
        -                          "number",
        -                          "decimal",
        -                          "percent",
        -                          "%",
        -                          "currency",
        -                          "$",
        -                          "text",
        -                          "link",
        -                          "date",
        -                          "s",
        -                          "ms",
        -                          "time",
        -                          "seconds",
        -                          "minutes",
        -                          "milliseconds"
        -                        ],
        -                        "type": "string"
        -                      },
        -                      "value": {
        -                        "description": "Metric id (from describe_datasource)",
        -                        "type": "string"
        -                      }
        -                    },
        -                    "required": [
        -                      "value"
        -                    ],
        -                    "type": "object"
        -                  },
        -                  "type": "array"
        -                }
        -              },
        -              "type": "object"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Required when type is METRIC — the query whose value this token contributes"
        -        },
        -        "type": {
        -          "description": "'METRIC' (a query), 'NUMBER' (a literal), or 'OPERATOR' (an arithmetic symbol)",
        -          "enum": [
        -            "METRIC",
        -            "NUMBER",
        -            "OPERATOR"
        -          ],
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "id": {
        +          "description": "Unique token id within the formula, e.g. \"t1\"",
        +          "type": "string"
        +        },
        +        "number": {
        +          "description": "Required when type is NUMBER",
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "operator": {
        +          "anyOf": [
        +            {
        +              "enum": [
        +                "+",
        +                "-",
        +                "*",
        +                "/",
        +                "×",
        +                "÷",
        +                "(",
        +                ")"
        +              ],
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Required when type is OPERATOR. Use × and ÷ for multiply/divide (what the UI writes); the ASCII * and / are also accepted since migrated formulas use them. Grouping: ( and )"
        +        },
        +        "query": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "description": "A builder query: which datasource, view, metrics, dimensions and filters to compute",
        +              "properties": {
        +                "advanced": {
        +                  "additionalProperties": {},
        +                  "description": "Datasource-specific settings — describe_datasource lists required keys per view",
        +                  "type": "object"
        +                },
        +                "data_view": {
        +                  "description": "Data view (from describe_datasource), e.g. ACCOUNT",
        +                  "type": "string"
        +                },
        +                "datasource_id": {
        +                  "description": "Datasource alias, e.g. gadw (from datasources)",
        +                  "enum": [
        +                    "advanced-web-ranking",
        +                    "ac",
        +                    "adroll",
        +                    "ahrefs",
        +                    "basecamp",
        +                    "brightlocal",
        +                    "call-rail",
        +                    "drip",
        +                    "keywords",
        +                    "sendin-blue",
        +                    "sendgrid",
        +                    "moosend",
        +                    "mailer-lite",
        +                    "pingdom",
        +                    "uptime-robot",
        +                    "piwik-pro",
        +                    "wordpress",
        +                    "pabbly-connect",
        +                    "ment",
        +                    "twilio",
        +                    "switchy",
        +                    "vimeo",
        +                    "pinterest",
        +                    "pinterest-ads",
        +                    "gtres",
        +                    "paypal",
        +                    "gps",
        +                    "gs",
        +                    "CUSTOM_IMPORT",
        +                    "CUSTOM_DATA",
        +                    "CALCULATION",
        +                    "GOALS",
        +                    "str",
        +                    "wistia",
        +                    "ca-mon",
        +                    "convertkit",
        +                    "woocommerce",
        +                    "xero",
        +                    "matomo",
        +                    "go-high-level",
        +                    "wcs",
        +                    "bing-webmaster-tools",
        +                    "pipedrive",
        +                    "salesforce",
        +                    "tiktok",
        +                    "tiktok-ads",
        +                    "twr",
        +                    "twr-ads",
        +                    "spf",
        +                    "ytbe",
        +                    "google-local-services-ads",
        +                    "klaviyo",
        +                    "gsh",
        +                    "ga4",
        +                    "lkdin-ads",
        +                    "lkdin-pg",
        +                    "mlchmp",
        +                    "inst-ads",
        +                    "inst",
        +                    "fb-ads",
        +                    "fb-pg",
        +                    "gmb",
        +                    "serpstat",
        +                    "hubspot",
        +                    "gadw",
        +                    "sem-rush",
        +                    "se-ranking",
        +                    "microsoft-ads",
        +                    "plausible",
        +                    "snapchat-ads",
        +                    "amazon-advertising",
        +                    "microsoft-clarity",
        +                    "serp-watch",
        +                    "vbout",
        +                    "moz",
        +                    "chatgpt-ads",
        +                    "omnisend",
        +                    "airtable",
        +                    "nozzle",
        +                    "surnex",
        +                    "clickup",
        +                    "make",
        +                    "freshdesk",
        +                    "chart-mogul",
        +                    "amplitude",
        +                    "demo"
        +                  ],
        +                  "type": "string"
        +                },
        +                "dimensions": {
        +                  "description": "Breakdown dimensions, e.g. [{ value: \"DATE\" }]",
        +                  "items": {
        +                    "additionalProperties": true,
        +                    "properties": {
        +                      "custom": {
        +                        "description": "A dynamic dimension absent from the static catalog",
        +                        "type": "boolean"
        +                      },
        +                      "data_view": {
        +                        "description": "Data view the dimension belongs to; filled from the catalog when omitted",
        +                        "type": "string"
        +                      },
        +                      "label": {
        +                        "description": "Display name — renames the dimension on the widget",
        +                        "type": "string"
        +                      },
        +                      "selector": {
        +                        "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true",
        +                        "type": "string"
        +                      },
        +                      "value": {
        +                        "description": "Dimension id (from describe_datasource)",
        +                        "type": "string"
        +                      }
        +                    },
        +                    "required": [
        +                      "value"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "type": "array"
        +                },
        +                "filters": {
        +                  "description": "Row filters",
        +                  "items": {
        +                    "additionalProperties": true,
        +                    "properties": {
        +                      "field": {
        +                        "description": "Metric or dimension id to filter on",
        +                        "type": "string"
        +                      },
        +                      "logicalOperator": {
        +                        "anyOf": [
        +                          {
        +                            "enum": [
        +                              "and",
        +                              "or"
        +                            ],
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "description": "How this row joins the previous one — 'and' (default) or 'or'"
        +                      },
        +                      "operator": {
        +                        "description": "Operator id — the valid list per datasource comes from describe_datasource",
        +                        "type": "string"
        +                      },
        +                      "value": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "number"
        +                          },
        +                          {
        +                            "type": "boolean"
        +                          },
        +                          {
        +                            "items": {},
        +                            "type": "array"
        +                          }
        +                        ],
        +                        "description": "Value to compare against"
        +                      }
        +                    },
        +                    "required": [
        +                      "field",
        +                      "operator",
        +                      "value"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "type": "array"
        +                },
        +                "metrics": {
        +                  "description": "Metrics to compute over — must belong to the data view",
        +                  "items": {
        +                    "additionalProperties": true,
        +                    "properties": {
        +                      "action_type": {
        +                        "description": "Meta/Instagram action-based metrics only (actions, conversions, cost_per_action_type…) — the action key the value is read under. Filled from the catalog — only send it with custom: true",
        +                        "type": "string"
        +                      },
        +                      "custom": {
        +                        "description": "A dynamic per-account metric absent from the static catalog (e.g. a Meta custom conversion)",
        +                        "type": "boolean"
        +                      },
        +                      "data_view": {
        +                        "description": "Data view the metric belongs to; resolved from the catalog when omitted",
        +                        "type": "string"
        +                      },
        +                      "invert_comparison": {
        +                        "description": "Colour a rise as negative — for lower-is-better metrics (cost, CPC, bounce rate)",
        +                        "type": "boolean"
        +                      },
        +                      "label": {
        +                        "description": "Display name — renames the metric on the widget",
        +                        "type": "string"
        +                      },
        +                      "request_metrics": {
        +                        "description": "The upstream vendor field(s) this metric is built from. Filled from the catalog — only send it with custom: true",
        +                        "items": {
        +                          "type": "string"
        +                        },
        +                        "type": "array"
        +                      },
        +                      "selector": {
        +                        "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true, copying what describe_datasource reports",
        +                        "type": "string"
        +                      },
        +                      "summary": {
        +                        "description": "Aggregation for the total: 'SUM', 'AVG', 'MAX', or 'MIN'",
        +                        "enum": [
        +                          "SUM",
        +                          "AVG",
        +                          "MAX",
        +                          "MIN"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      "symbol": {
        +                        "description": "Number format. Numeric: 'number' (plain), 'decimal', 'percent' (or '%'), 'currency' (or '$'). Duration: 's', 'ms', 'time', 'seconds', 'minutes', 'milliseconds'. Passed through unformatted: 'text', 'link', 'date'",
        +                        "enum": [
        +                          "number",
        +                          "decimal",
        +                          "percent",
        +                          "%",
        +                          "currency",
        +                          "$",
        +                          "text",
        +                          "link",
        +                          "date",
        +                          "s",
        +                          "ms",
        +                          "time",
        +                          "seconds",
        +                          "minutes",
        +                          "milliseconds"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      "value": {
        +                        "description": "Metric id (from describe_datasource)",
        +                        "type": "string"
        +                      }
        +                    },
        +                    "required": [
        +                      "value"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "type": "array"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Required when type is METRIC — the query whose value this token contributes"
        +        },
        +        "type": {
        +          "description": "'METRIC' (a query), 'NUMBER' (a literal), or 'OPERATOR' (an arithmetic symbol)",
        +          "enum": [
        +            "METRIC",
        +            "NUMBER",
        +            "OPERATOR"
        +          ],
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "id",
        +        "type"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
    • Changedupdate_data_widget1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude"
        +]
    • Changedupdate_goal1 field changed
      • changedInput schema / properties / query / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "clickup",
        -  "make",
        -  "freshdesk",
        -  "demo"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "chart-mogul",
        +  "amplitude",
        +  "demo"
        +]
  5. 16 tool updates
    • Changedadd_data_widget1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk"
        +]
    • Changedcreate_calculated_metric1 field changed
      • changedInput schema / properties / formula / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": true,
        -      "properties": {
        -        "id": {
        -          "description": "Unique token id within the formula, e.g. \"t1\"",
        -          "type": "string"
        -        },
        -        "number": {
        -          "description": "Required when type is NUMBER",
        -          "type": [
        -            "number",
        -            "null"
        -          ]
        -        },
        -        "operator": {
        -          "anyOf": [
        -            {
        -              "enum": [
        -                "+",
        -                "-",
        -                "*",
        -                "/",
        -                "×",
        -                "÷",
        -                "(",
        -                ")"
        -              ],
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Required when type is OPERATOR. Use × and ÷ for multiply/divide (what the UI writes); the ASCII * and / are also accepted since migrated formulas use them. Grouping: ( and )"
        -        },
        -        "query": {
        -          "anyOf": [
        -            {
        -              "additionalProperties": true,
        -              "description": "A builder query: which datasource, view, metrics, dimensions and filters to compute",
        -              "properties": {
        -                "advanced": {
        -                  "additionalProperties": {},
        -                  "description": "Datasource-specific settings — describe_datasource lists required keys per view",
        -                  "type": "object"
        -                },
        -                "data_view": {
        -                  "description": "Data view (from describe_datasource), e.g. ACCOUNT",
        -                  "type": "string"
        -                },
        -                "datasource_id": {
        -                  "description": "Datasource alias, e.g. gadw (from datasources)",
        -                  "enum": [
        -                    "advanced-web-ranking",
        -                    "ac",
        -                    "adroll",
        -                    "ahrefs",
        -                    "basecamp",
        -                    "brightlocal",
        -                    "call-rail",
        -                    "drip",
        -                    "keywords",
        -                    "sendin-blue",
        -                    "sendgrid",
        -                    "moosend",
        -                    "mailer-lite",
        -                    "pingdom",
        -                    "uptime-robot",
        -                    "piwik-pro",
        -                    "wordpress",
        -                    "pabbly-connect",
        -                    "ment",
        -                    "twilio",
        -                    "switchy",
        -                    "vimeo",
        -                    "pinterest",
        -                    "pinterest-ads",
        -                    "gtres",
        -                    "paypal",
        -                    "gps",
        -                    "gs",
        -                    "CUSTOM_IMPORT",
        -                    "CUSTOM_DATA",
        -                    "CALCULATION",
        -                    "GOALS",
        -                    "str",
        -                    "wistia",
        -                    "ca-mon",
        -                    "convertkit",
        -                    "woocommerce",
        -                    "xero",
        -                    "matomo",
        -                    "go-high-level",
        -                    "wcs",
        -                    "bing-webmaster-tools",
        -                    "pipedrive",
        -                    "salesforce",
        -                    "tiktok",
        -                    "tiktok-ads",
        -                    "twr",
        -                    "twr-ads",
        -                    "spf",
        -                    "ytbe",
        -                    "google-local-services-ads",
        -                    "klaviyo",
        -                    "gsh",
        -                    "ga4",
        -                    "lkdin-ads",
        -                    "lkdin-pg",
        -                    "mlchmp",
        -                    "inst-ads",
        -                    "inst",
        -                    "fb-ads",
        -                    "fb-pg",
        -                    "gmb",
        -                    "serpstat",
        -                    "hubspot",
        -                    "gadw",
        -                    "sem-rush",
        -                    "se-ranking",
        -                    "microsoft-ads",
        -                    "plausible",
        -                    "snapchat-ads",
        -                    "amazon-advertising",
        -                    "microsoft-clarity",
        -                    "serp-watch",
        -                    "vbout",
        -                    "moz",
        -                    "chatgpt-ads",
        -                    "omnisend",
        -                    "airtable",
        -                    "nozzle",
        -                    "surnex",
        -                    "demo"
        -                  ],
        -                  "type": "string"
        -                },
        -                "dimensions": {
        -                  "description": "Breakdown dimensions, e.g. [{ value: \"DATE\" }]",
        -                  "items": {
        -                    "additionalProperties": true,
        -                    "properties": {
        -                      "custom": {
        -                        "description": "A dynamic dimension absent from the static catalog",
        -                        "type": "boolean"
        -                      },
        -                      "data_view": {
        -                        "description": "Data view the dimension belongs to; filled from the catalog when omitted",
        -                        "type": "string"
        -                      },
        -                      "label": {
        -                        "description": "Display name — renames the dimension on the widget",
        -                        "type": "string"
        -                      },
        -                      "selector": {
        -                        "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true",
        -                        "type": "string"
        -                      },
        -                      "value": {
        -                        "description": "Dimension id (from describe_datasource)",
        -                        "type": "string"
        -                      }
        -                    },
        -                    "required": [
        -                      "value"
        -                    ],
        -                    "type": "object"
        -                  },
        -                  "type": "array"
        -                },
        -                "filters": {
        -                  "description": "Row filters",
        -                  "items": {
        -                    "additionalProperties": true,
        -                    "properties": {
        -                      "field": {
        -                        "description": "Metric or dimension id to filter on",
        -                        "type": "string"
        -                      },
        -                      "logicalOperator": {
        -                        "anyOf": [
        -                          {
        -                            "enum": [
        -                              "and",
        -                              "or"
        -                            ],
        -                            "type": "string"
        -                          },
        -                          {
        -                            "type": "null"
        -                          }
        -                        ],
        -                        "description": "How this row joins the previous one — 'and' (default) or 'or'"
        -                      },
        -                      "operator": {
        -                        "description": "Operator id — the valid list per datasource comes from describe_datasource",
        -                        "type": "string"
        -                      },
        -                      "value": {
        -                        "anyOf": [
        -                          {
        -                            "type": "string"
        -                          },
        -                          {
        -                            "type": "number"
        -                          },
        -                          {
        -                            "type": "boolean"
        -                          },
        -                          {
        -                            "items": {},
        -                            "type": "array"
        -                          }
        -                        ],
        -                        "description": "Value to compare against"
        -                      }
        -                    },
        -                    "required": [
        -                      "field",
        -                      "operator",
        -                      "value"
        -                    ],
        -                    "type": "object"
        -                  },
        -                  "type": "array"
        -                },
        -                "metrics": {
        -                  "description": "Metrics to compute over — must belong to the data view",
        -                  "items": {
        -                    "additionalProperties": true,
        -                    "properties": {
        -                      "action_type": {
        -                        "description": "Meta/Instagram action-based metrics only (actions, conversions, cost_per_action_type…) — the action key the value is read under. Filled from the catalog — only send it with custom: true",
        -                        "type": "string"
        -                      },
        -                      "custom": {
        -                        "description": "A dynamic per-account metric absent from the static catalog (e.g. a Meta custom conversion)",
        -                        "type": "boolean"
        -                      },
        -                      "data_view": {
        -                        "description": "Data view the metric belongs to; resolved from the catalog when omitted",
        -                        "type": "string"
        -                      },
        -                      "invert_comparison": {
        -                        "description": "Colour a rise as negative — for lower-is-better metrics (cost, CPC, bounce rate)",
        -                        "type": "boolean"
        -                      },
        -                      "label": {
        -                        "description": "Display name — renames the metric on the widget",
        -                        "type": "string"
        -                      },
        -                      "request_metrics": {
        -                        "description": "The upstream vendor field(s) this metric is built from. Filled from the catalog — only send it with custom: true",
        -                        "items": {
        -                          "type": "string"
        -                        },
        -                        "type": "array"
        -                      },
        -                      "selector": {
        -                        "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true, copying what describe_datasource reports",
        -                        "type": "string"
        -                      },
        -                      "summary": {
        -                        "description": "Aggregation for the total: 'SUM', 'AVG', 'MAX', or 'MIN'",
        -                        "enum": [
        -                          "SUM",
        -                          "AVG",
        -                          "MAX",
        -                          "MIN"
        -                        ],
        -                        "type": "string"
        -                      },
        -                      "symbol": {
        -                        "description": "Number format. Numeric: 'number' (plain), 'decimal', 'percent' (or '%'), 'currency' (or '$'). Duration: 's', 'ms', 'time', 'seconds', 'minutes', 'milliseconds'. Passed through unformatted: 'text', 'link', 'date'",
        -                        "enum": [
        -                          "number",
        -                          "decimal",
        -                          "percent",
        -                          "%",
        -                          "currency",
        -                          "$",
        -                          "text",
        -                          "link",
        -                          "date",
        -                          "s",
        -                          "ms",
        -                          "time",
        -                          "seconds",
        -                          "minutes",
        -                          "milliseconds"
        -                        ],
        -                        "type": "string"
        -                      },
        -                      "value": {
        -                        "description": "Metric id (from describe_datasource)",
        -                        "type": "string"
        -                      }
        -                    },
        -                    "required": [
        -                      "value"
        -                    ],
        -                    "type": "object"
        -                  },
        -                  "type": "array"
        -                }
        -              },
        -              "type": "object"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Required when type is METRIC — the query whose value this token contributes"
        -        },
        -        "type": {
        -          "description": "'METRIC' (a query), 'NUMBER' (a literal), or 'OPERATOR' (an arithmetic symbol)",
        -          "enum": [
        -            "METRIC",
        -            "NUMBER",
        -            "OPERATOR"
        -          ],
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "id": {
        +          "description": "Unique token id within the formula, e.g. \"t1\"",
        +          "type": "string"
        +        },
        +        "number": {
        +          "description": "Required when type is NUMBER",
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "operator": {
        +          "anyOf": [
        +            {
        +              "enum": [
        +                "+",
        +                "-",
        +                "*",
        +                "/",
        +                "×",
        +                "÷",
        +                "(",
        +                ")"
        +              ],
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Required when type is OPERATOR. Use × and ÷ for multiply/divide (what the UI writes); the ASCII * and / are also accepted since migrated formulas use them. Grouping: ( and )"
        +        },
        +        "query": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "description": "A builder query: which datasource, view, metrics, dimensions and filters to compute",
        +              "properties": {
        +                "advanced": {
        +                  "additionalProperties": {},
        +                  "description": "Datasource-specific settings — describe_datasource lists required keys per view",
        +                  "type": "object"
        +                },
        +                "data_view": {
        +                  "description": "Data view (from describe_datasource), e.g. ACCOUNT",
        +                  "type": "string"
        +                },
        +                "datasource_id": {
        +                  "description": "Datasource alias, e.g. gadw (from datasources)",
        +                  "enum": [
        +                    "advanced-web-ranking",
        +                    "ac",
        +                    "adroll",
        +                    "ahrefs",
        +                    "basecamp",
        +                    "brightlocal",
        +                    "call-rail",
        +                    "drip",
        +                    "keywords",
        +                    "sendin-blue",
        +                    "sendgrid",
        +                    "moosend",
        +                    "mailer-lite",
        +                    "pingdom",
        +                    "uptime-robot",
        +                    "piwik-pro",
        +                    "wordpress",
        +                    "pabbly-connect",
        +                    "ment",
        +                    "twilio",
        +                    "switchy",
        +                    "vimeo",
        +                    "pinterest",
        +                    "pinterest-ads",
        +                    "gtres",
        +                    "paypal",
        +                    "gps",
        +                    "gs",
        +                    "CUSTOM_IMPORT",
        +                    "CUSTOM_DATA",
        +                    "CALCULATION",
        +                    "GOALS",
        +                    "str",
        +                    "wistia",
        +                    "ca-mon",
        +                    "convertkit",
        +                    "woocommerce",
        +                    "xero",
        +                    "matomo",
        +                    "go-high-level",
        +                    "wcs",
        +                    "bing-webmaster-tools",
        +                    "pipedrive",
        +                    "salesforce",
        +                    "tiktok",
        +                    "tiktok-ads",
        +                    "twr",
        +                    "twr-ads",
        +                    "spf",
        +                    "ytbe",
        +                    "google-local-services-ads",
        +                    "klaviyo",
        +                    "gsh",
        +                    "ga4",
        +                    "lkdin-ads",
        +                    "lkdin-pg",
        +                    "mlchmp",
        +                    "inst-ads",
        +                    "inst",
        +                    "fb-ads",
        +                    "fb-pg",
        +                    "gmb",
        +                    "serpstat",
        +                    "hubspot",
        +                    "gadw",
        +                    "sem-rush",
        +                    "se-ranking",
        +                    "microsoft-ads",
        +                    "plausible",
        +                    "snapchat-ads",
        +                    "amazon-advertising",
        +                    "microsoft-clarity",
        +                    "serp-watch",
        +                    "vbout",
        +                    "moz",
        +                    "chatgpt-ads",
        +                    "omnisend",
        +                    "airtable",
        +                    "nozzle",
        +                    "surnex",
        +                    "clickup",
        +                    "make",
        +                    "freshdesk",
        +                    "demo"
        +                  ],
        +                  "type": "string"
        +                },
        +                "dimensions": {
        +                  "description": "Breakdown dimensions, e.g. [{ value: \"DATE\" }]",
        +                  "items": {
        +                    "additionalProperties": true,
        +                    "properties": {
        +                      "custom": {
        +                        "description": "A dynamic dimension absent from the static catalog",
        +                        "type": "boolean"
        +                      },
        +                      "data_view": {
        +                        "description": "Data view the dimension belongs to; filled from the catalog when omitted",
        +                        "type": "string"
        +                      },
        +                      "label": {
        +                        "description": "Display name — renames the dimension on the widget",
        +                        "type": "string"
        +                      },
        +                      "selector": {
        +                        "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true",
        +                        "type": "string"
        +                      },
        +                      "value": {
        +                        "description": "Dimension id (from describe_datasource)",
        +                        "type": "string"
        +                      }
        +                    },
        +                    "required": [
        +                      "value"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "type": "array"
        +                },
        +                "filters": {
        +                  "description": "Row filters",
        +                  "items": {
        +                    "additionalProperties": true,
        +                    "properties": {
        +                      "field": {
        +                        "description": "Metric or dimension id to filter on",
        +                        "type": "string"
        +                      },
        +                      "logicalOperator": {
        +                        "anyOf": [
        +                          {
        +                            "enum": [
        +                              "and",
        +                              "or"
        +                            ],
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "description": "How this row joins the previous one — 'and' (default) or 'or'"
        +                      },
        +                      "operator": {
        +                        "description": "Operator id — the valid list per datasource comes from describe_datasource",
        +                        "type": "string"
        +                      },
        +                      "value": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "number"
        +                          },
        +                          {
        +                            "type": "boolean"
        +                          },
        +                          {
        +                            "items": {},
        +                            "type": "array"
        +                          }
        +                        ],
        +                        "description": "Value to compare against"
        +                      }
        +                    },
        +                    "required": [
        +                      "field",
        +                      "operator",
        +                      "value"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "type": "array"
        +                },
        +                "metrics": {
        +                  "description": "Metrics to compute over — must belong to the data view",
        +                  "items": {
        +                    "additionalProperties": true,
        +                    "properties": {
        +                      "action_type": {
        +                        "description": "Meta/Instagram action-based metrics only (actions, conversions, cost_per_action_type…) — the action key the value is read under. Filled from the catalog — only send it with custom: true",
        +                        "type": "string"
        +                      },
        +                      "custom": {
        +                        "description": "A dynamic per-account metric absent from the static catalog (e.g. a Meta custom conversion)",
        +                        "type": "boolean"
        +                      },
        +                      "data_view": {
        +                        "description": "Data view the metric belongs to; resolved from the catalog when omitted",
        +                        "type": "string"
        +                      },
        +                      "invert_comparison": {
        +                        "description": "Colour a rise as negative — for lower-is-better metrics (cost, CPC, bounce rate)",
        +                        "type": "boolean"
        +                      },
        +                      "label": {
        +                        "description": "Display name — renames the metric on the widget",
        +                        "type": "string"
        +                      },
        +                      "request_metrics": {
        +                        "description": "The upstream vendor field(s) this metric is built from. Filled from the catalog — only send it with custom: true",
        +                        "items": {
        +                          "type": "string"
        +                        },
        +                        "type": "array"
        +                      },
        +                      "selector": {
        +                        "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true, copying what describe_datasource reports",
        +                        "type": "string"
        +                      },
        +                      "summary": {
        +                        "description": "Aggregation for the total: 'SUM', 'AVG', 'MAX', or 'MIN'",
        +                        "enum": [
        +                          "SUM",
        +                          "AVG",
        +                          "MAX",
        +                          "MIN"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      "symbol": {
        +                        "description": "Number format. Numeric: 'number' (plain), 'decimal', 'percent' (or '%'), 'currency' (or '$'). Duration: 's', 'ms', 'time', 'seconds', 'minutes', 'milliseconds'. Passed through unformatted: 'text', 'link', 'date'",
        +                        "enum": [
        +                          "number",
        +                          "decimal",
        +                          "percent",
        +                          "%",
        +                          "currency",
        +                          "$",
        +                          "text",
        +                          "link",
        +                          "date",
        +                          "s",
        +                          "ms",
        +                          "time",
        +                          "seconds",
        +                          "minutes",
        +                          "milliseconds"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      "value": {
        +                        "description": "Metric id (from describe_datasource)",
        +                        "type": "string"
        +                      }
        +                    },
        +                    "required": [
        +                      "value"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "type": "array"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Required when type is METRIC — the query whose value this token contributes"
        +        },
        +        "type": {
        +          "description": "'METRIC' (a query), 'NUMBER' (a literal), or 'OPERATOR' (an arithmetic symbol)",
        +          "enum": [
        +            "METRIC",
        +            "NUMBER",
        +            "OPERATOR"
        +          ],
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "id",
        +        "type"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
    • Changedcreate_connection1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk"
        +]
    • Changedcreate_goal1 field changed
      • changedInput schema / properties / query / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "demo"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "demo"
        +]
    • Changeddatasource_resources1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk"
        +]
    • Changeddescribe_datasource1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk"
        +]
    • Changedlink_datasource1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk"
        +]
    • Changedlist_assets1 field changed
      • changedInput schema / properties / datasources / items / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk"
        +]
    • Changedlist_templates1 field changed
      • changedInput schema / properties / datasources / items / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk"
        +]
    • Changedquery_data1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk"
        +]
    • Changedrefresh_report1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk"
        +]
    • Changedtest_connection1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk"
        +]
    • Changedunlink_datasource1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk"
        +]
    • Changedupdate_calculated_metric1 field changed
      • changedInput schema / properties / formula / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": true,
        -      "properties": {
        -        "id": {
        -          "description": "Unique token id within the formula, e.g. \"t1\"",
        -          "type": "string"
        -        },
        -        "number": {
        -          "description": "Required when type is NUMBER",
        -          "type": [
        -            "number",
        -            "null"
        -          ]
        -        },
        -        "operator": {
        -          "anyOf": [
        -            {
        -              "enum": [
        -                "+",
        -                "-",
        -                "*",
        -                "/",
        -                "×",
        -                "÷",
        -                "(",
        -                ")"
        -              ],
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Required when type is OPERATOR. Use × and ÷ for multiply/divide (what the UI writes); the ASCII * and / are also accepted since migrated formulas use them. Grouping: ( and )"
        -        },
        -        "query": {
        -          "anyOf": [
        -            {
        -              "additionalProperties": true,
        -              "description": "A builder query: which datasource, view, metrics, dimensions and filters to compute",
        -              "properties": {
        -                "advanced": {
        -                  "additionalProperties": {},
        -                  "description": "Datasource-specific settings — describe_datasource lists required keys per view",
        -                  "type": "object"
        -                },
        -                "data_view": {
        -                  "description": "Data view (from describe_datasource), e.g. ACCOUNT",
        -                  "type": "string"
        -                },
        -                "datasource_id": {
        -                  "description": "Datasource alias, e.g. gadw (from datasources)",
        -                  "enum": [
        -                    "advanced-web-ranking",
        -                    "ac",
        -                    "adroll",
        -                    "ahrefs",
        -                    "basecamp",
        -                    "brightlocal",
        -                    "call-rail",
        -                    "drip",
        -                    "keywords",
        -                    "sendin-blue",
        -                    "sendgrid",
        -                    "moosend",
        -                    "mailer-lite",
        -                    "pingdom",
        -                    "uptime-robot",
        -                    "piwik-pro",
        -                    "wordpress",
        -                    "pabbly-connect",
        -                    "ment",
        -                    "twilio",
        -                    "switchy",
        -                    "vimeo",
        -                    "pinterest",
        -                    "pinterest-ads",
        -                    "gtres",
        -                    "paypal",
        -                    "gps",
        -                    "gs",
        -                    "CUSTOM_IMPORT",
        -                    "CUSTOM_DATA",
        -                    "CALCULATION",
        -                    "GOALS",
        -                    "str",
        -                    "wistia",
        -                    "ca-mon",
        -                    "convertkit",
        -                    "woocommerce",
        -                    "xero",
        -                    "matomo",
        -                    "go-high-level",
        -                    "wcs",
        -                    "bing-webmaster-tools",
        -                    "pipedrive",
        -                    "salesforce",
        -                    "tiktok",
        -                    "tiktok-ads",
        -                    "twr",
        -                    "twr-ads",
        -                    "spf",
        -                    "ytbe",
        -                    "google-local-services-ads",
        -                    "klaviyo",
        -                    "gsh",
        -                    "ga4",
        -                    "lkdin-ads",
        -                    "lkdin-pg",
        -                    "mlchmp",
        -                    "inst-ads",
        -                    "inst",
        -                    "fb-ads",
        -                    "fb-pg",
        -                    "gmb",
        -                    "serpstat",
        -                    "hubspot",
        -                    "gadw",
        -                    "sem-rush",
        -                    "se-ranking",
        -                    "microsoft-ads",
        -                    "plausible",
        -                    "snapchat-ads",
        -                    "amazon-advertising",
        -                    "microsoft-clarity",
        -                    "serp-watch",
        -                    "vbout",
        -                    "moz",
        -                    "chatgpt-ads",
        -                    "omnisend",
        -                    "airtable",
        -                    "nozzle",
        -                    "surnex",
        -                    "demo"
        -                  ],
        -                  "type": "string"
        -                },
        -                "dimensions": {
        -                  "description": "Breakdown dimensions, e.g. [{ value: \"DATE\" }]",
        -                  "items": {
        -                    "additionalProperties": true,
        -                    "properties": {
        -                      "custom": {
        -                        "description": "A dynamic dimension absent from the static catalog",
        -                        "type": "boolean"
        -                      },
        -                      "data_view": {
        -                        "description": "Data view the dimension belongs to; filled from the catalog when omitted",
        -                        "type": "string"
        -                      },
        -                      "label": {
        -                        "description": "Display name — renames the dimension on the widget",
        -                        "type": "string"
        -                      },
        -                      "selector": {
        -                        "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true",
        -                        "type": "string"
        -                      },
        -                      "value": {
        -                        "description": "Dimension id (from describe_datasource)",
        -                        "type": "string"
        -                      }
        -                    },
        -                    "required": [
        -                      "value"
        -                    ],
        -                    "type": "object"
        -                  },
        -                  "type": "array"
        -                },
        -                "filters": {
        -                  "description": "Row filters",
        -                  "items": {
        -                    "additionalProperties": true,
        -                    "properties": {
        -                      "field": {
        -                        "description": "Metric or dimension id to filter on",
        -                        "type": "string"
        -                      },
        -                      "logicalOperator": {
        -                        "anyOf": [
        -                          {
        -                            "enum": [
        -                              "and",
        -                              "or"
        -                            ],
        -                            "type": "string"
        -                          },
        -                          {
        -                            "type": "null"
        -                          }
        -                        ],
        -                        "description": "How this row joins the previous one — 'and' (default) or 'or'"
        -                      },
        -                      "operator": {
        -                        "description": "Operator id — the valid list per datasource comes from describe_datasource",
        -                        "type": "string"
        -                      },
        -                      "value": {
        -                        "anyOf": [
        -                          {
        -                            "type": "string"
        -                          },
        -                          {
        -                            "type": "number"
        -                          },
        -                          {
        -                            "type": "boolean"
        -                          },
        -                          {
        -                            "items": {},
        -                            "type": "array"
        -                          }
        -                        ],
        -                        "description": "Value to compare against"
        -                      }
        -                    },
        -                    "required": [
        -                      "field",
        -                      "operator",
        -                      "value"
        -                    ],
        -                    "type": "object"
        -                  },
        -                  "type": "array"
        -                },
        -                "metrics": {
        -                  "description": "Metrics to compute over — must belong to the data view",
        -                  "items": {
        -                    "additionalProperties": true,
        -                    "properties": {
        -                      "action_type": {
        -                        "description": "Meta/Instagram action-based metrics only (actions, conversions, cost_per_action_type…) — the action key the value is read under. Filled from the catalog — only send it with custom: true",
        -                        "type": "string"
        -                      },
        -                      "custom": {
        -                        "description": "A dynamic per-account metric absent from the static catalog (e.g. a Meta custom conversion)",
        -                        "type": "boolean"
        -                      },
        -                      "data_view": {
        -                        "description": "Data view the metric belongs to; resolved from the catalog when omitted",
        -                        "type": "string"
        -                      },
        -                      "invert_comparison": {
        -                        "description": "Colour a rise as negative — for lower-is-better metrics (cost, CPC, bounce rate)",
        -                        "type": "boolean"
        -                      },
        -                      "label": {
        -                        "description": "Display name — renames the metric on the widget",
        -                        "type": "string"
        -                      },
        -                      "request_metrics": {
        -                        "description": "The upstream vendor field(s) this metric is built from. Filled from the catalog — only send it with custom: true",
        -                        "items": {
        -                          "type": "string"
        -                        },
        -                        "type": "array"
        -                      },
        -                      "selector": {
        -                        "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true, copying what describe_datasource reports",
        -                        "type": "string"
        -                      },
        -                      "summary": {
        -                        "description": "Aggregation for the total: 'SUM', 'AVG', 'MAX', or 'MIN'",
        -                        "enum": [
        -                          "SUM",
        -                          "AVG",
        -                          "MAX",
        -                          "MIN"
        -                        ],
        -                        "type": "string"
        -                      },
        -                      "symbol": {
        -                        "description": "Number format. Numeric: 'number' (plain), 'decimal', 'percent' (or '%'), 'currency' (or '$'). Duration: 's', 'ms', 'time', 'seconds', 'minutes', 'milliseconds'. Passed through unformatted: 'text', 'link', 'date'",
        -                        "enum": [
        -                          "number",
        -                          "decimal",
        -                          "percent",
        -                          "%",
        -                          "currency",
        -                          "$",
        -                          "text",
        -                          "link",
        -                          "date",
        -                          "s",
        -                          "ms",
        -                          "time",
        -                          "seconds",
        -                          "minutes",
        -                          "milliseconds"
        -                        ],
        -                        "type": "string"
        -                      },
        -                      "value": {
        -                        "description": "Metric id (from describe_datasource)",
        -                        "type": "string"
        -                      }
        -                    },
        -                    "required": [
        -                      "value"
        -                    ],
        -                    "type": "object"
        -                  },
        -                  "type": "array"
        -                }
        -              },
        -              "type": "object"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Required when type is METRIC — the query whose value this token contributes"
        -        },
        -        "type": {
        -          "description": "'METRIC' (a query), 'NUMBER' (a literal), or 'OPERATOR' (an arithmetic symbol)",
        -          "enum": [
        -            "METRIC",
        -            "NUMBER",
        -            "OPERATOR"
        -          ],
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "id": {
        +          "description": "Unique token id within the formula, e.g. \"t1\"",
        +          "type": "string"
        +        },
        +        "number": {
        +          "description": "Required when type is NUMBER",
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "operator": {
        +          "anyOf": [
        +            {
        +              "enum": [
        +                "+",
        +                "-",
        +                "*",
        +                "/",
        +                "×",
        +                "÷",
        +                "(",
        +                ")"
        +              ],
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Required when type is OPERATOR. Use × and ÷ for multiply/divide (what the UI writes); the ASCII * and / are also accepted since migrated formulas use them. Grouping: ( and )"
        +        },
        +        "query": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "description": "A builder query: which datasource, view, metrics, dimensions and filters to compute",
        +              "properties": {
        +                "advanced": {
        +                  "additionalProperties": {},
        +                  "description": "Datasource-specific settings — describe_datasource lists required keys per view",
        +                  "type": "object"
        +                },
        +                "data_view": {
        +                  "description": "Data view (from describe_datasource), e.g. ACCOUNT",
        +                  "type": "string"
        +                },
        +                "datasource_id": {
        +                  "description": "Datasource alias, e.g. gadw (from datasources)",
        +                  "enum": [
        +                    "advanced-web-ranking",
        +                    "ac",
        +                    "adroll",
        +                    "ahrefs",
        +                    "basecamp",
        +                    "brightlocal",
        +                    "call-rail",
        +                    "drip",
        +                    "keywords",
        +                    "sendin-blue",
        +                    "sendgrid",
        +                    "moosend",
        +                    "mailer-lite",
        +                    "pingdom",
        +                    "uptime-robot",
        +                    "piwik-pro",
        +                    "wordpress",
        +                    "pabbly-connect",
        +                    "ment",
        +                    "twilio",
        +                    "switchy",
        +                    "vimeo",
        +                    "pinterest",
        +                    "pinterest-ads",
        +                    "gtres",
        +                    "paypal",
        +                    "gps",
        +                    "gs",
        +                    "CUSTOM_IMPORT",
        +                    "CUSTOM_DATA",
        +                    "CALCULATION",
        +                    "GOALS",
        +                    "str",
        +                    "wistia",
        +                    "ca-mon",
        +                    "convertkit",
        +                    "woocommerce",
        +                    "xero",
        +                    "matomo",
        +                    "go-high-level",
        +                    "wcs",
        +                    "bing-webmaster-tools",
        +                    "pipedrive",
        +                    "salesforce",
        +                    "tiktok",
        +                    "tiktok-ads",
        +                    "twr",
        +                    "twr-ads",
        +                    "spf",
        +                    "ytbe",
        +                    "google-local-services-ads",
        +                    "klaviyo",
        +                    "gsh",
        +                    "ga4",
        +                    "lkdin-ads",
        +                    "lkdin-pg",
        +                    "mlchmp",
        +                    "inst-ads",
        +                    "inst",
        +                    "fb-ads",
        +                    "fb-pg",
        +                    "gmb",
        +                    "serpstat",
        +                    "hubspot",
        +                    "gadw",
        +                    "sem-rush",
        +                    "se-ranking",
        +                    "microsoft-ads",
        +                    "plausible",
        +                    "snapchat-ads",
        +                    "amazon-advertising",
        +                    "microsoft-clarity",
        +                    "serp-watch",
        +                    "vbout",
        +                    "moz",
        +                    "chatgpt-ads",
        +                    "omnisend",
        +                    "airtable",
        +                    "nozzle",
        +                    "surnex",
        +                    "clickup",
        +                    "make",
        +                    "freshdesk",
        +                    "demo"
        +                  ],
        +                  "type": "string"
        +                },
        +                "dimensions": {
        +                  "description": "Breakdown dimensions, e.g. [{ value: \"DATE\" }]",
        +                  "items": {
        +                    "additionalProperties": true,
        +                    "properties": {
        +                      "custom": {
        +                        "description": "A dynamic dimension absent from the static catalog",
        +                        "type": "boolean"
        +                      },
        +                      "data_view": {
        +                        "description": "Data view the dimension belongs to; filled from the catalog when omitted",
        +                        "type": "string"
        +                      },
        +                      "label": {
        +                        "description": "Display name — renames the dimension on the widget",
        +                        "type": "string"
        +                      },
        +                      "selector": {
        +                        "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true",
        +                        "type": "string"
        +                      },
        +                      "value": {
        +                        "description": "Dimension id (from describe_datasource)",
        +                        "type": "string"
        +                      }
        +                    },
        +                    "required": [
        +                      "value"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "type": "array"
        +                },
        +                "filters": {
        +                  "description": "Row filters",
        +                  "items": {
        +                    "additionalProperties": true,
        +                    "properties": {
        +                      "field": {
        +                        "description": "Metric or dimension id to filter on",
        +                        "type": "string"
        +                      },
        +                      "logicalOperator": {
        +                        "anyOf": [
        +                          {
        +                            "enum": [
        +                              "and",
        +                              "or"
        +                            ],
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "description": "How this row joins the previous one — 'and' (default) or 'or'"
        +                      },
        +                      "operator": {
        +                        "description": "Operator id — the valid list per datasource comes from describe_datasource",
        +                        "type": "string"
        +                      },
        +                      "value": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "number"
        +                          },
        +                          {
        +                            "type": "boolean"
        +                          },
        +                          {
        +                            "items": {},
        +                            "type": "array"
        +                          }
        +                        ],
        +                        "description": "Value to compare against"
        +                      }
        +                    },
        +                    "required": [
        +                      "field",
        +                      "operator",
        +                      "value"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "type": "array"
        +                },
        +                "metrics": {
        +                  "description": "Metrics to compute over — must belong to the data view",
        +                  "items": {
        +                    "additionalProperties": true,
        +                    "properties": {
        +                      "action_type": {
        +                        "description": "Meta/Instagram action-based metrics only (actions, conversions, cost_per_action_type…) — the action key the value is read under. Filled from the catalog — only send it with custom: true",
        +                        "type": "string"
        +                      },
        +                      "custom": {
        +                        "description": "A dynamic per-account metric absent from the static catalog (e.g. a Meta custom conversion)",
        +                        "type": "boolean"
        +                      },
        +                      "data_view": {
        +                        "description": "Data view the metric belongs to; resolved from the catalog when omitted",
        +                        "type": "string"
        +                      },
        +                      "invert_comparison": {
        +                        "description": "Colour a rise as negative — for lower-is-better metrics (cost, CPC, bounce rate)",
        +                        "type": "boolean"
        +                      },
        +                      "label": {
        +                        "description": "Display name — renames the metric on the widget",
        +                        "type": "string"
        +                      },
        +                      "request_metrics": {
        +                        "description": "The upstream vendor field(s) this metric is built from. Filled from the catalog — only send it with custom: true",
        +                        "items": {
        +                          "type": "string"
        +                        },
        +                        "type": "array"
        +                      },
        +                      "selector": {
        +                        "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true, copying what describe_datasource reports",
        +                        "type": "string"
        +                      },
        +                      "summary": {
        +                        "description": "Aggregation for the total: 'SUM', 'AVG', 'MAX', or 'MIN'",
        +                        "enum": [
        +                          "SUM",
        +                          "AVG",
        +                          "MAX",
        +                          "MIN"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      "symbol": {
        +                        "description": "Number format. Numeric: 'number' (plain), 'decimal', 'percent' (or '%'), 'currency' (or '$'). Duration: 's', 'ms', 'time', 'seconds', 'minutes', 'milliseconds'. Passed through unformatted: 'text', 'link', 'date'",
        +                        "enum": [
        +                          "number",
        +                          "decimal",
        +                          "percent",
        +                          "%",
        +                          "currency",
        +                          "$",
        +                          "text",
        +                          "link",
        +                          "date",
        +                          "s",
        +                          "ms",
        +                          "time",
        +                          "seconds",
        +                          "minutes",
        +                          "milliseconds"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      "value": {
        +                        "description": "Metric id (from describe_datasource)",
        +                        "type": "string"
        +                      }
        +                    },
        +                    "required": [
        +                      "value"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "type": "array"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Required when type is METRIC — the query whose value this token contributes"
        +        },
        +        "type": {
        +          "description": "'METRIC' (a query), 'NUMBER' (a literal), or 'OPERATOR' (an arithmetic symbol)",
        +          "enum": [
        +            "METRIC",
        +            "NUMBER",
        +            "OPERATOR"
        +          ],
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "id",
        +        "type"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
    • Changedupdate_data_widget1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk"
        +]
    • Changedupdate_goal1 field changed
      • changedInput schema / properties / query / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "surnex",
        -  "demo"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "clickup",
        +  "make",
        +  "freshdesk",
        +  "demo"
        +]
  6. 1 tool update
    • Changedgenerate_pdf1 field changed
      • changedInput schema / properties / report_id / description
        Previous value: -"Multi-page report to render (from list_reports, type REPORT). A dashboard is rejected."New value: +"Report or dashboard to render (from list_reports)"
  7. 16 tool updates
    • Changedadd_data_widget1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex"
        +]
    • Changedcreate_calculated_metric1 field changed
      • changedInput schema / properties / formula / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": true,
        -      "properties": {
        -        "id": {
        -          "description": "Unique token id within the formula, e.g. \"t1\"",
        -          "type": "string"
        -        },
        -        "number": {
        -          "description": "Required when type is NUMBER",
        -          "type": [
        -            "number",
        -            "null"
        -          ]
        -        },
        -        "operator": {
        -          "anyOf": [
        -            {
        -              "enum": [
        -                "+",
        -                "-",
        -                "*",
        -                "/",
        -                "×",
        -                "÷",
        -                "(",
        -                ")"
        -              ],
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Required when type is OPERATOR. Use × and ÷ for multiply/divide (what the UI writes); the ASCII * and / are also accepted since migrated formulas use them. Grouping: ( and )"
        -        },
        -        "query": {
        -          "anyOf": [
        -            {
        -              "additionalProperties": true,
        -              "description": "A builder query: which datasource, view, metrics, dimensions and filters to compute",
        -              "properties": {
        -                "advanced": {
        -                  "additionalProperties": {},
        -                  "description": "Datasource-specific settings — describe_datasource lists required keys per view",
        -                  "type": "object"
        -                },
        -                "data_view": {
        -                  "description": "Data view (from describe_datasource), e.g. ACCOUNT",
        -                  "type": "string"
        -                },
        -                "datasource_id": {
        -                  "description": "Datasource alias, e.g. gadw (from datasources)",
        -                  "enum": [
        -                    "advanced-web-ranking",
        -                    "ac",
        -                    "adroll",
        -                    "ahrefs",
        -                    "basecamp",
        -                    "brightlocal",
        -                    "call-rail",
        -                    "drip",
        -                    "keywords",
        -                    "sendin-blue",
        -                    "sendgrid",
        -                    "moosend",
        -                    "mailer-lite",
        -                    "pingdom",
        -                    "uptime-robot",
        -                    "piwik-pro",
        -                    "wordpress",
        -                    "pabbly-connect",
        -                    "ment",
        -                    "twilio",
        -                    "switchy",
        -                    "vimeo",
        -                    "pinterest",
        -                    "pinterest-ads",
        -                    "gtres",
        -                    "paypal",
        -                    "gps",
        -                    "gs",
        -                    "CUSTOM_IMPORT",
        -                    "CUSTOM_DATA",
        -                    "CALCULATION",
        -                    "GOALS",
        -                    "str",
        -                    "wistia",
        -                    "ca-mon",
        -                    "convertkit",
        -                    "woocommerce",
        -                    "xero",
        -                    "matomo",
        -                    "go-high-level",
        -                    "wcs",
        -                    "bing-webmaster-tools",
        -                    "pipedrive",
        -                    "salesforce",
        -                    "tiktok",
        -                    "tiktok-ads",
        -                    "twr",
        -                    "twr-ads",
        -                    "spf",
        -                    "ytbe",
        -                    "google-local-services-ads",
        -                    "klaviyo",
        -                    "gsh",
        -                    "ga4",
        -                    "lkdin-ads",
        -                    "lkdin-pg",
        -                    "mlchmp",
        -                    "inst-ads",
        -                    "inst",
        -                    "fb-ads",
        -                    "fb-pg",
        -                    "gmb",
        -                    "serpstat",
        -                    "hubspot",
        -                    "gadw",
        -                    "sem-rush",
        -                    "se-ranking",
        -                    "microsoft-ads",
        -                    "plausible",
        -                    "snapchat-ads",
        -                    "amazon-advertising",
        -                    "microsoft-clarity",
        -                    "serp-watch",
        -                    "vbout",
        -                    "moz",
        -                    "chatgpt-ads",
        -                    "omnisend",
        -                    "airtable",
        -                    "nozzle",
        -                    "demo"
        -                  ],
        -                  "type": "string"
        -                },
        -                "dimensions": {
        -                  "description": "Breakdown dimensions, e.g. [{ value: \"DATE\" }]",
        -                  "items": {
        -                    "additionalProperties": true,
        -                    "properties": {
        -                      "custom": {
        -                        "description": "A dynamic dimension absent from the static catalog",
        -                        "type": "boolean"
        -                      },
        -                      "data_view": {
        -                        "description": "Data view the dimension belongs to; filled from the catalog when omitted",
        -                        "type": "string"
        -                      },
        -                      "label": {
        -                        "description": "Display name — renames the dimension on the widget",
        -                        "type": "string"
        -                      },
        -                      "selector": {
        -                        "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true",
        -                        "type": "string"
        -                      },
        -                      "value": {
        -                        "description": "Dimension id (from describe_datasource)",
        -                        "type": "string"
        -                      }
        -                    },
        -                    "required": [
        -                      "value"
        -                    ],
        -                    "type": "object"
        -                  },
        -                  "type": "array"
        -                },
        -                "filters": {
        -                  "description": "Row filters",
        -                  "items": {
        -                    "additionalProperties": true,
        -                    "properties": {
        -                      "field": {
        -                        "description": "Metric or dimension id to filter on",
        -                        "type": "string"
        -                      },
        -                      "logicalOperator": {
        -                        "anyOf": [
        -                          {
        -                            "enum": [
        -                              "and",
        -                              "or"
        -                            ],
        -                            "type": "string"
        -                          },
        -                          {
        -                            "type": "null"
        -                          }
        -                        ],
        -                        "description": "How this row joins the previous one — 'and' (default) or 'or'"
        -                      },
        -                      "operator": {
        -                        "description": "Operator id — the valid list per datasource comes from describe_datasource",
        -                        "type": "string"
        -                      },
        -                      "value": {
        -                        "anyOf": [
        -                          {
        -                            "type": "string"
        -                          },
        -                          {
        -                            "type": "number"
        -                          },
        -                          {
        -                            "type": "boolean"
        -                          },
        -                          {
        -                            "items": {},
        -                            "type": "array"
        -                          }
        -                        ],
        -                        "description": "Value to compare against"
        -                      }
        -                    },
        -                    "required": [
        -                      "field",
        -                      "operator",
        -                      "value"
        -                    ],
        -                    "type": "object"
        -                  },
        -                  "type": "array"
        -                },
        -                "metrics": {
        -                  "description": "Metrics to compute over — must belong to the data view",
        -                  "items": {
        -                    "additionalProperties": true,
        -                    "properties": {
        -                      "action_type": {
        -                        "description": "Meta/Instagram action-based metrics only (actions, conversions, cost_per_action_type…) — the action key the value is read under. Filled from the catalog — only send it with custom: true",
        -                        "type": "string"
        -                      },
        -                      "custom": {
        -                        "description": "A dynamic per-account metric absent from the static catalog (e.g. a Meta custom conversion)",
        -                        "type": "boolean"
        -                      },
        -                      "data_view": {
        -                        "description": "Data view the metric belongs to; resolved from the catalog when omitted",
        -                        "type": "string"
        -                      },
        -                      "invert_comparison": {
        -                        "description": "Colour a rise as negative — for lower-is-better metrics (cost, CPC, bounce rate)",
        -                        "type": "boolean"
        -                      },
        -                      "label": {
        -                        "description": "Display name — renames the metric on the widget",
        -                        "type": "string"
        -                      },
        -                      "request_metrics": {
        -                        "description": "The upstream vendor field(s) this metric is built from. Filled from the catalog — only send it with custom: true",
        -                        "items": {
        -                          "type": "string"
        -                        },
        -                        "type": "array"
        -                      },
        -                      "selector": {
        -                        "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true, copying what describe_datasource reports",
        -                        "type": "string"
        -                      },
        -                      "summary": {
        -                        "description": "Aggregation for the total: 'SUM', 'AVG', 'MAX', or 'MIN'",
        -                        "enum": [
        -                          "SUM",
        -                          "AVG",
        -                          "MAX",
        -                          "MIN"
        -                        ],
        -                        "type": "string"
        -                      },
        -                      "symbol": {
        -                        "description": "Number format. Numeric: 'number' (plain), 'decimal', 'percent' (or '%'), 'currency' (or '$'). Duration: 's', 'ms', 'time', 'seconds', 'minutes', 'milliseconds'. Passed through unformatted: 'text', 'link', 'date'",
        -                        "enum": [
        -                          "number",
        -                          "decimal",
        -                          "percent",
        -                          "%",
        -                          "currency",
        -                          "$",
        -                          "text",
        -                          "link",
        -                          "date",
        -                          "s",
        -                          "ms",
        -                          "time",
        -                          "seconds",
        -                          "minutes",
        -                          "milliseconds"
        -                        ],
        -                        "type": "string"
        -                      },
        -                      "value": {
        -                        "description": "Metric id (from describe_datasource)",
        -                        "type": "string"
        -                      }
        -                    },
        -                    "required": [
        -                      "value"
        -                    ],
        -                    "type": "object"
        -                  },
        -                  "type": "array"
        -                }
        -              },
        -              "type": "object"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Required when type is METRIC — the query whose value this token contributes"
        -        },
        -        "type": {
        -          "description": "'METRIC' (a query), 'NUMBER' (a literal), or 'OPERATOR' (an arithmetic symbol)",
        -          "enum": [
        -            "METRIC",
        -            "NUMBER",
        -            "OPERATOR"
        -          ],
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "id": {
        +          "description": "Unique token id within the formula, e.g. \"t1\"",
        +          "type": "string"
        +        },
        +        "number": {
        +          "description": "Required when type is NUMBER",
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "operator": {
        +          "anyOf": [
        +            {
        +              "enum": [
        +                "+",
        +                "-",
        +                "*",
        +                "/",
        +                "×",
        +                "÷",
        +                "(",
        +                ")"
        +              ],
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Required when type is OPERATOR. Use × and ÷ for multiply/divide (what the UI writes); the ASCII * and / are also accepted since migrated formulas use them. Grouping: ( and )"
        +        },
        +        "query": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "description": "A builder query: which datasource, view, metrics, dimensions and filters to compute",
        +              "properties": {
        +                "advanced": {
        +                  "additionalProperties": {},
        +                  "description": "Datasource-specific settings — describe_datasource lists required keys per view",
        +                  "type": "object"
        +                },
        +                "data_view": {
        +                  "description": "Data view (from describe_datasource), e.g. ACCOUNT",
        +                  "type": "string"
        +                },
        +                "datasource_id": {
        +                  "description": "Datasource alias, e.g. gadw (from datasources)",
        +                  "enum": [
        +                    "advanced-web-ranking",
        +                    "ac",
        +                    "adroll",
        +                    "ahrefs",
        +                    "basecamp",
        +                    "brightlocal",
        +                    "call-rail",
        +                    "drip",
        +                    "keywords",
        +                    "sendin-blue",
        +                    "sendgrid",
        +                    "moosend",
        +                    "mailer-lite",
        +                    "pingdom",
        +                    "uptime-robot",
        +                    "piwik-pro",
        +                    "wordpress",
        +                    "pabbly-connect",
        +                    "ment",
        +                    "twilio",
        +                    "switchy",
        +                    "vimeo",
        +                    "pinterest",
        +                    "pinterest-ads",
        +                    "gtres",
        +                    "paypal",
        +                    "gps",
        +                    "gs",
        +                    "CUSTOM_IMPORT",
        +                    "CUSTOM_DATA",
        +                    "CALCULATION",
        +                    "GOALS",
        +                    "str",
        +                    "wistia",
        +                    "ca-mon",
        +                    "convertkit",
        +                    "woocommerce",
        +                    "xero",
        +                    "matomo",
        +                    "go-high-level",
        +                    "wcs",
        +                    "bing-webmaster-tools",
        +                    "pipedrive",
        +                    "salesforce",
        +                    "tiktok",
        +                    "tiktok-ads",
        +                    "twr",
        +                    "twr-ads",
        +                    "spf",
        +                    "ytbe",
        +                    "google-local-services-ads",
        +                    "klaviyo",
        +                    "gsh",
        +                    "ga4",
        +                    "lkdin-ads",
        +                    "lkdin-pg",
        +                    "mlchmp",
        +                    "inst-ads",
        +                    "inst",
        +                    "fb-ads",
        +                    "fb-pg",
        +                    "gmb",
        +                    "serpstat",
        +                    "hubspot",
        +                    "gadw",
        +                    "sem-rush",
        +                    "se-ranking",
        +                    "microsoft-ads",
        +                    "plausible",
        +                    "snapchat-ads",
        +                    "amazon-advertising",
        +                    "microsoft-clarity",
        +                    "serp-watch",
        +                    "vbout",
        +                    "moz",
        +                    "chatgpt-ads",
        +                    "omnisend",
        +                    "airtable",
        +                    "nozzle",
        +                    "surnex",
        +                    "demo"
        +                  ],
        +                  "type": "string"
        +                },
        +                "dimensions": {
        +                  "description": "Breakdown dimensions, e.g. [{ value: \"DATE\" }]",
        +                  "items": {
        +                    "additionalProperties": true,
        +                    "properties": {
        +                      "custom": {
        +                        "description": "A dynamic dimension absent from the static catalog",
        +                        "type": "boolean"
        +                      },
        +                      "data_view": {
        +                        "description": "Data view the dimension belongs to; filled from the catalog when omitted",
        +                        "type": "string"
        +                      },
        +                      "label": {
        +                        "description": "Display name — renames the dimension on the widget",
        +                        "type": "string"
        +                      },
        +                      "selector": {
        +                        "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true",
        +                        "type": "string"
        +                      },
        +                      "value": {
        +                        "description": "Dimension id (from describe_datasource)",
        +                        "type": "string"
        +                      }
        +                    },
        +                    "required": [
        +                      "value"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "type": "array"
        +                },
        +                "filters": {
        +                  "description": "Row filters",
        +                  "items": {
        +                    "additionalProperties": true,
        +                    "properties": {
        +                      "field": {
        +                        "description": "Metric or dimension id to filter on",
        +                        "type": "string"
        +                      },
        +                      "logicalOperator": {
        +                        "anyOf": [
        +                          {
        +                            "enum": [
        +                              "and",
        +                              "or"
        +                            ],
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "description": "How this row joins the previous one — 'and' (default) or 'or'"
        +                      },
        +                      "operator": {
        +                        "description": "Operator id — the valid list per datasource comes from describe_datasource",
        +                        "type": "string"
        +                      },
        +                      "value": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "number"
        +                          },
        +                          {
        +                            "type": "boolean"
        +                          },
        +                          {
        +                            "items": {},
        +                            "type": "array"
        +                          }
        +                        ],
        +                        "description": "Value to compare against"
        +                      }
        +                    },
        +                    "required": [
        +                      "field",
        +                      "operator",
        +                      "value"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "type": "array"
        +                },
        +                "metrics": {
        +                  "description": "Metrics to compute over — must belong to the data view",
        +                  "items": {
        +                    "additionalProperties": true,
        +                    "properties": {
        +                      "action_type": {
        +                        "description": "Meta/Instagram action-based metrics only (actions, conversions, cost_per_action_type…) — the action key the value is read under. Filled from the catalog — only send it with custom: true",
        +                        "type": "string"
        +                      },
        +                      "custom": {
        +                        "description": "A dynamic per-account metric absent from the static catalog (e.g. a Meta custom conversion)",
        +                        "type": "boolean"
        +                      },
        +                      "data_view": {
        +                        "description": "Data view the metric belongs to; resolved from the catalog when omitted",
        +                        "type": "string"
        +                      },
        +                      "invert_comparison": {
        +                        "description": "Colour a rise as negative — for lower-is-better metrics (cost, CPC, bounce rate)",
        +                        "type": "boolean"
        +                      },
        +                      "label": {
        +                        "description": "Display name — renames the metric on the widget",
        +                        "type": "string"
        +                      },
        +                      "request_metrics": {
        +                        "description": "The upstream vendor field(s) this metric is built from. Filled from the catalog — only send it with custom: true",
        +                        "items": {
        +                          "type": "string"
        +                        },
        +                        "type": "array"
        +                      },
        +                      "selector": {
        +                        "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true, copying what describe_datasource reports",
        +                        "type": "string"
        +                      },
        +                      "summary": {
        +                        "description": "Aggregation for the total: 'SUM', 'AVG', 'MAX', or 'MIN'",
        +                        "enum": [
        +                          "SUM",
        +                          "AVG",
        +                          "MAX",
        +                          "MIN"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      "symbol": {
        +                        "description": "Number format. Numeric: 'number' (plain), 'decimal', 'percent' (or '%'), 'currency' (or '$'). Duration: 's', 'ms', 'time', 'seconds', 'minutes', 'milliseconds'. Passed through unformatted: 'text', 'link', 'date'",
        +                        "enum": [
        +                          "number",
        +                          "decimal",
        +                          "percent",
        +                          "%",
        +                          "currency",
        +                          "$",
        +                          "text",
        +                          "link",
        +                          "date",
        +                          "s",
        +                          "ms",
        +                          "time",
        +                          "seconds",
        +                          "minutes",
        +                          "milliseconds"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      "value": {
        +                        "description": "Metric id (from describe_datasource)",
        +                        "type": "string"
        +                      }
        +                    },
        +                    "required": [
        +                      "value"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "type": "array"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Required when type is METRIC — the query whose value this token contributes"
        +        },
        +        "type": {
        +          "description": "'METRIC' (a query), 'NUMBER' (a literal), or 'OPERATOR' (an arithmetic symbol)",
        +          "enum": [
        +            "METRIC",
        +            "NUMBER",
        +            "OPERATOR"
        +          ],
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "id",
        +        "type"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
    • Changedcreate_connection1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex"
        +]
    • Changedcreate_goal1 field changed
      • changedInput schema / properties / query / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "demo"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "demo"
        +]
    • Changeddatasource_resources1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex"
        +]
    • Changeddescribe_datasource1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex"
        +]
    • Changedlink_datasource1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex"
        +]
    • Changedlist_assets1 field changed
      • changedInput schema / properties / datasources / items / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex"
        +]
    • Changedlist_templates1 field changed
      • changedInput schema / properties / datasources / items / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex"
        +]
    • Changedquery_data1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex"
        +]
    • Changedrefresh_report1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex"
        +]
    • Changedtest_connection1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex"
        +]
    • Changedunlink_datasource1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex"
        +]
    • Changedupdate_calculated_metric1 field changed
      • changedInput schema / properties / formula / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": true,
        -      "properties": {
        -        "id": {
        -          "description": "Unique token id within the formula, e.g. \"t1\"",
        -          "type": "string"
        -        },
        -        "number": {
        -          "description": "Required when type is NUMBER",
        -          "type": [
        -            "number",
        -            "null"
        -          ]
        -        },
        -        "operator": {
        -          "anyOf": [
        -            {
        -              "enum": [
        -                "+",
        -                "-",
        -                "*",
        -                "/",
        -                "×",
        -                "÷",
        -                "(",
        -                ")"
        -              ],
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Required when type is OPERATOR. Use × and ÷ for multiply/divide (what the UI writes); the ASCII * and / are also accepted since migrated formulas use them. Grouping: ( and )"
        -        },
        -        "query": {
        -          "anyOf": [
        -            {
        -              "additionalProperties": true,
        -              "description": "A builder query: which datasource, view, metrics, dimensions and filters to compute",
        -              "properties": {
        -                "advanced": {
        -                  "additionalProperties": {},
        -                  "description": "Datasource-specific settings — describe_datasource lists required keys per view",
        -                  "type": "object"
        -                },
        -                "data_view": {
        -                  "description": "Data view (from describe_datasource), e.g. ACCOUNT",
        -                  "type": "string"
        -                },
        -                "datasource_id": {
        -                  "description": "Datasource alias, e.g. gadw (from datasources)",
        -                  "enum": [
        -                    "advanced-web-ranking",
        -                    "ac",
        -                    "adroll",
        -                    "ahrefs",
        -                    "basecamp",
        -                    "brightlocal",
        -                    "call-rail",
        -                    "drip",
        -                    "keywords",
        -                    "sendin-blue",
        -                    "sendgrid",
        -                    "moosend",
        -                    "mailer-lite",
        -                    "pingdom",
        -                    "uptime-robot",
        -                    "piwik-pro",
        -                    "wordpress",
        -                    "pabbly-connect",
        -                    "ment",
        -                    "twilio",
        -                    "switchy",
        -                    "vimeo",
        -                    "pinterest",
        -                    "pinterest-ads",
        -                    "gtres",
        -                    "paypal",
        -                    "gps",
        -                    "gs",
        -                    "CUSTOM_IMPORT",
        -                    "CUSTOM_DATA",
        -                    "CALCULATION",
        -                    "GOALS",
        -                    "str",
        -                    "wistia",
        -                    "ca-mon",
        -                    "convertkit",
        -                    "woocommerce",
        -                    "xero",
        -                    "matomo",
        -                    "go-high-level",
        -                    "wcs",
        -                    "bing-webmaster-tools",
        -                    "pipedrive",
        -                    "salesforce",
        -                    "tiktok",
        -                    "tiktok-ads",
        -                    "twr",
        -                    "twr-ads",
        -                    "spf",
        -                    "ytbe",
        -                    "google-local-services-ads",
        -                    "klaviyo",
        -                    "gsh",
        -                    "ga4",
        -                    "lkdin-ads",
        -                    "lkdin-pg",
        -                    "mlchmp",
        -                    "inst-ads",
        -                    "inst",
        -                    "fb-ads",
        -                    "fb-pg",
        -                    "gmb",
        -                    "serpstat",
        -                    "hubspot",
        -                    "gadw",
        -                    "sem-rush",
        -                    "se-ranking",
        -                    "microsoft-ads",
        -                    "plausible",
        -                    "snapchat-ads",
        -                    "amazon-advertising",
        -                    "microsoft-clarity",
        -                    "serp-watch",
        -                    "vbout",
        -                    "moz",
        -                    "chatgpt-ads",
        -                    "omnisend",
        -                    "airtable",
        -                    "nozzle",
        -                    "demo"
        -                  ],
        -                  "type": "string"
        -                },
        -                "dimensions": {
        -                  "description": "Breakdown dimensions, e.g. [{ value: \"DATE\" }]",
        -                  "items": {
        -                    "additionalProperties": true,
        -                    "properties": {
        -                      "custom": {
        -                        "description": "A dynamic dimension absent from the static catalog",
        -                        "type": "boolean"
        -                      },
        -                      "data_view": {
        -                        "description": "Data view the dimension belongs to; filled from the catalog when omitted",
        -                        "type": "string"
        -                      },
        -                      "label": {
        -                        "description": "Display name — renames the dimension on the widget",
        -                        "type": "string"
        -                      },
        -                      "selector": {
        -                        "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true",
        -                        "type": "string"
        -                      },
        -                      "value": {
        -                        "description": "Dimension id (from describe_datasource)",
        -                        "type": "string"
        -                      }
        -                    },
        -                    "required": [
        -                      "value"
        -                    ],
        -                    "type": "object"
        -                  },
        -                  "type": "array"
        -                },
        -                "filters": {
        -                  "description": "Row filters",
        -                  "items": {
        -                    "additionalProperties": true,
        -                    "properties": {
        -                      "field": {
        -                        "description": "Metric or dimension id to filter on",
        -                        "type": "string"
        -                      },
        -                      "logicalOperator": {
        -                        "anyOf": [
        -                          {
        -                            "enum": [
        -                              "and",
        -                              "or"
        -                            ],
        -                            "type": "string"
        -                          },
        -                          {
        -                            "type": "null"
        -                          }
        -                        ],
        -                        "description": "How this row joins the previous one — 'and' (default) or 'or'"
        -                      },
        -                      "operator": {
        -                        "description": "Operator id — the valid list per datasource comes from describe_datasource",
        -                        "type": "string"
        -                      },
        -                      "value": {
        -                        "anyOf": [
        -                          {
        -                            "type": "string"
        -                          },
        -                          {
        -                            "type": "number"
        -                          },
        -                          {
        -                            "type": "boolean"
        -                          },
        -                          {
        -                            "items": {},
        -                            "type": "array"
        -                          }
        -                        ],
        -                        "description": "Value to compare against"
        -                      }
        -                    },
        -                    "required": [
        -                      "field",
        -                      "operator",
        -                      "value"
        -                    ],
        -                    "type": "object"
        -                  },
        -                  "type": "array"
        -                },
        -                "metrics": {
        -                  "description": "Metrics to compute over — must belong to the data view",
        -                  "items": {
        -                    "additionalProperties": true,
        -                    "properties": {
        -                      "action_type": {
        -                        "description": "Meta/Instagram action-based metrics only (actions, conversions, cost_per_action_type…) — the action key the value is read under. Filled from the catalog — only send it with custom: true",
        -                        "type": "string"
        -                      },
        -                      "custom": {
        -                        "description": "A dynamic per-account metric absent from the static catalog (e.g. a Meta custom conversion)",
        -                        "type": "boolean"
        -                      },
        -                      "data_view": {
        -                        "description": "Data view the metric belongs to; resolved from the catalog when omitted",
        -                        "type": "string"
        -                      },
        -                      "invert_comparison": {
        -                        "description": "Colour a rise as negative — for lower-is-better metrics (cost, CPC, bounce rate)",
        -                        "type": "boolean"
        -                      },
        -                      "label": {
        -                        "description": "Display name — renames the metric on the widget",
        -                        "type": "string"
        -                      },
        -                      "request_metrics": {
        -                        "description": "The upstream vendor field(s) this metric is built from. Filled from the catalog — only send it with custom: true",
        -                        "items": {
        -                          "type": "string"
        -                        },
        -                        "type": "array"
        -                      },
        -                      "selector": {
        -                        "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true, copying what describe_datasource reports",
        -                        "type": "string"
        -                      },
        -                      "summary": {
        -                        "description": "Aggregation for the total: 'SUM', 'AVG', 'MAX', or 'MIN'",
        -                        "enum": [
        -                          "SUM",
        -                          "AVG",
        -                          "MAX",
        -                          "MIN"
        -                        ],
        -                        "type": "string"
        -                      },
        -                      "symbol": {
        -                        "description": "Number format. Numeric: 'number' (plain), 'decimal', 'percent' (or '%'), 'currency' (or '$'). Duration: 's', 'ms', 'time', 'seconds', 'minutes', 'milliseconds'. Passed through unformatted: 'text', 'link', 'date'",
        -                        "enum": [
        -                          "number",
        -                          "decimal",
        -                          "percent",
        -                          "%",
        -                          "currency",
        -                          "$",
        -                          "text",
        -                          "link",
        -                          "date",
        -                          "s",
        -                          "ms",
        -                          "time",
        -                          "seconds",
        -                          "minutes",
        -                          "milliseconds"
        -                        ],
        -                        "type": "string"
        -                      },
        -                      "value": {
        -                        "description": "Metric id (from describe_datasource)",
        -                        "type": "string"
        -                      }
        -                    },
        -                    "required": [
        -                      "value"
        -                    ],
        -                    "type": "object"
        -                  },
        -                  "type": "array"
        -                }
        -              },
        -              "type": "object"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Required when type is METRIC — the query whose value this token contributes"
        -        },
        -        "type": {
        -          "description": "'METRIC' (a query), 'NUMBER' (a literal), or 'OPERATOR' (an arithmetic symbol)",
        -          "enum": [
        -            "METRIC",
        -            "NUMBER",
        -            "OPERATOR"
        -          ],
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "id": {
        +          "description": "Unique token id within the formula, e.g. \"t1\"",
        +          "type": "string"
        +        },
        +        "number": {
        +          "description": "Required when type is NUMBER",
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "operator": {
        +          "anyOf": [
        +            {
        +              "enum": [
        +                "+",
        +                "-",
        +                "*",
        +                "/",
        +                "×",
        +                "÷",
        +                "(",
        +                ")"
        +              ],
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Required when type is OPERATOR. Use × and ÷ for multiply/divide (what the UI writes); the ASCII * and / are also accepted since migrated formulas use them. Grouping: ( and )"
        +        },
        +        "query": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "description": "A builder query: which datasource, view, metrics, dimensions and filters to compute",
        +              "properties": {
        +                "advanced": {
        +                  "additionalProperties": {},
        +                  "description": "Datasource-specific settings — describe_datasource lists required keys per view",
        +                  "type": "object"
        +                },
        +                "data_view": {
        +                  "description": "Data view (from describe_datasource), e.g. ACCOUNT",
        +                  "type": "string"
        +                },
        +                "datasource_id": {
        +                  "description": "Datasource alias, e.g. gadw (from datasources)",
        +                  "enum": [
        +                    "advanced-web-ranking",
        +                    "ac",
        +                    "adroll",
        +                    "ahrefs",
        +                    "basecamp",
        +                    "brightlocal",
        +                    "call-rail",
        +                    "drip",
        +                    "keywords",
        +                    "sendin-blue",
        +                    "sendgrid",
        +                    "moosend",
        +                    "mailer-lite",
        +                    "pingdom",
        +                    "uptime-robot",
        +                    "piwik-pro",
        +                    "wordpress",
        +                    "pabbly-connect",
        +                    "ment",
        +                    "twilio",
        +                    "switchy",
        +                    "vimeo",
        +                    "pinterest",
        +                    "pinterest-ads",
        +                    "gtres",
        +                    "paypal",
        +                    "gps",
        +                    "gs",
        +                    "CUSTOM_IMPORT",
        +                    "CUSTOM_DATA",
        +                    "CALCULATION",
        +                    "GOALS",
        +                    "str",
        +                    "wistia",
        +                    "ca-mon",
        +                    "convertkit",
        +                    "woocommerce",
        +                    "xero",
        +                    "matomo",
        +                    "go-high-level",
        +                    "wcs",
        +                    "bing-webmaster-tools",
        +                    "pipedrive",
        +                    "salesforce",
        +                    "tiktok",
        +                    "tiktok-ads",
        +                    "twr",
        +                    "twr-ads",
        +                    "spf",
        +                    "ytbe",
        +                    "google-local-services-ads",
        +                    "klaviyo",
        +                    "gsh",
        +                    "ga4",
        +                    "lkdin-ads",
        +                    "lkdin-pg",
        +                    "mlchmp",
        +                    "inst-ads",
        +                    "inst",
        +                    "fb-ads",
        +                    "fb-pg",
        +                    "gmb",
        +                    "serpstat",
        +                    "hubspot",
        +                    "gadw",
        +                    "sem-rush",
        +                    "se-ranking",
        +                    "microsoft-ads",
        +                    "plausible",
        +                    "snapchat-ads",
        +                    "amazon-advertising",
        +                    "microsoft-clarity",
        +                    "serp-watch",
        +                    "vbout",
        +                    "moz",
        +                    "chatgpt-ads",
        +                    "omnisend",
        +                    "airtable",
        +                    "nozzle",
        +                    "surnex",
        +                    "demo"
        +                  ],
        +                  "type": "string"
        +                },
        +                "dimensions": {
        +                  "description": "Breakdown dimensions, e.g. [{ value: \"DATE\" }]",
        +                  "items": {
        +                    "additionalProperties": true,
        +                    "properties": {
        +                      "custom": {
        +                        "description": "A dynamic dimension absent from the static catalog",
        +                        "type": "boolean"
        +                      },
        +                      "data_view": {
        +                        "description": "Data view the dimension belongs to; filled from the catalog when omitted",
        +                        "type": "string"
        +                      },
        +                      "label": {
        +                        "description": "Display name — renames the dimension on the widget",
        +                        "type": "string"
        +                      },
        +                      "selector": {
        +                        "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true",
        +                        "type": "string"
        +                      },
        +                      "value": {
        +                        "description": "Dimension id (from describe_datasource)",
        +                        "type": "string"
        +                      }
        +                    },
        +                    "required": [
        +                      "value"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "type": "array"
        +                },
        +                "filters": {
        +                  "description": "Row filters",
        +                  "items": {
        +                    "additionalProperties": true,
        +                    "properties": {
        +                      "field": {
        +                        "description": "Metric or dimension id to filter on",
        +                        "type": "string"
        +                      },
        +                      "logicalOperator": {
        +                        "anyOf": [
        +                          {
        +                            "enum": [
        +                              "and",
        +                              "or"
        +                            ],
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "description": "How this row joins the previous one — 'and' (default) or 'or'"
        +                      },
        +                      "operator": {
        +                        "description": "Operator id — the valid list per datasource comes from describe_datasource",
        +                        "type": "string"
        +                      },
        +                      "value": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "number"
        +                          },
        +                          {
        +                            "type": "boolean"
        +                          },
        +                          {
        +                            "items": {},
        +                            "type": "array"
        +                          }
        +                        ],
        +                        "description": "Value to compare against"
        +                      }
        +                    },
        +                    "required": [
        +                      "field",
        +                      "operator",
        +                      "value"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "type": "array"
        +                },
        +                "metrics": {
        +                  "description": "Metrics to compute over — must belong to the data view",
        +                  "items": {
        +                    "additionalProperties": true,
        +                    "properties": {
        +                      "action_type": {
        +                        "description": "Meta/Instagram action-based metrics only (actions, conversions, cost_per_action_type…) — the action key the value is read under. Filled from the catalog — only send it with custom: true",
        +                        "type": "string"
        +                      },
        +                      "custom": {
        +                        "description": "A dynamic per-account metric absent from the static catalog (e.g. a Meta custom conversion)",
        +                        "type": "boolean"
        +                      },
        +                      "data_view": {
        +                        "description": "Data view the metric belongs to; resolved from the catalog when omitted",
        +                        "type": "string"
        +                      },
        +                      "invert_comparison": {
        +                        "description": "Colour a rise as negative — for lower-is-better metrics (cost, CPC, bounce rate)",
        +                        "type": "boolean"
        +                      },
        +                      "label": {
        +                        "description": "Display name — renames the metric on the widget",
        +                        "type": "string"
        +                      },
        +                      "request_metrics": {
        +                        "description": "The upstream vendor field(s) this metric is built from. Filled from the catalog — only send it with custom: true",
        +                        "items": {
        +                          "type": "string"
        +                        },
        +                        "type": "array"
        +                      },
        +                      "selector": {
        +                        "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true, copying what describe_datasource reports",
        +                        "type": "string"
        +                      },
        +                      "summary": {
        +                        "description": "Aggregation for the total: 'SUM', 'AVG', 'MAX', or 'MIN'",
        +                        "enum": [
        +                          "SUM",
        +                          "AVG",
        +                          "MAX",
        +                          "MIN"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      "symbol": {
        +                        "description": "Number format. Numeric: 'number' (plain), 'decimal', 'percent' (or '%'), 'currency' (or '$'). Duration: 's', 'ms', 'time', 'seconds', 'minutes', 'milliseconds'. Passed through unformatted: 'text', 'link', 'date'",
        +                        "enum": [
        +                          "number",
        +                          "decimal",
        +                          "percent",
        +                          "%",
        +                          "currency",
        +                          "$",
        +                          "text",
        +                          "link",
        +                          "date",
        +                          "s",
        +                          "ms",
        +                          "time",
        +                          "seconds",
        +                          "minutes",
        +                          "milliseconds"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      "value": {
        +                        "description": "Metric id (from describe_datasource)",
        +                        "type": "string"
        +                      }
        +                    },
        +                    "required": [
        +                      "value"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "type": "array"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Required when type is METRIC — the query whose value this token contributes"
        +        },
        +        "type": {
        +          "description": "'METRIC' (a query), 'NUMBER' (a literal), or 'OPERATOR' (an arithmetic symbol)",
        +          "enum": [
        +            "METRIC",
        +            "NUMBER",
        +            "OPERATOR"
        +          ],
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "id",
        +        "type"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
    • Changedupdate_data_widget1 field changed
      • changedInput schema / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex"
        +]
    • Changedupdate_goal1 field changed
      • changedInput schema / properties / query / properties / datasource_id / enum
        Previous value: -[
        -  "advanced-web-ranking",
        -  "ac",
        -  "adroll",
        -  "ahrefs",
        -  "basecamp",
        -  "brightlocal",
        -  "call-rail",
        -  "drip",
        -  "keywords",
        -  "sendin-blue",
        -  "sendgrid",
        -  "moosend",
        -  "mailer-lite",
        -  "pingdom",
        -  "uptime-robot",
        -  "piwik-pro",
        -  "wordpress",
        -  "pabbly-connect",
        -  "ment",
        -  "twilio",
        -  "switchy",
        -  "vimeo",
        -  "pinterest",
        -  "pinterest-ads",
        -  "gtres",
        -  "paypal",
        -  "gps",
        -  "gs",
        -  "CUSTOM_IMPORT",
        -  "CUSTOM_DATA",
        -  "CALCULATION",
        -  "GOALS",
        -  "str",
        -  "wistia",
        -  "ca-mon",
        -  "convertkit",
        -  "woocommerce",
        -  "xero",
        -  "matomo",
        -  "go-high-level",
        -  "wcs",
        -  "bing-webmaster-tools",
        -  "pipedrive",
        -  "salesforce",
        -  "tiktok",
        -  "tiktok-ads",
        -  "twr",
        -  "twr-ads",
        -  "spf",
        -  "ytbe",
        -  "google-local-services-ads",
        -  "klaviyo",
        -  "gsh",
        -  "ga4",
        -  "lkdin-ads",
        -  "lkdin-pg",
        -  "mlchmp",
        -  "inst-ads",
        -  "inst",
        -  "fb-ads",
        -  "fb-pg",
        -  "gmb",
        -  "serpstat",
        -  "hubspot",
        -  "gadw",
        -  "sem-rush",
        -  "se-ranking",
        -  "microsoft-ads",
        -  "plausible",
        -  "snapchat-ads",
        -  "amazon-advertising",
        -  "microsoft-clarity",
        -  "serp-watch",
        -  "vbout",
        -  "moz",
        -  "chatgpt-ads",
        -  "omnisend",
        -  "airtable",
        -  "nozzle",
        -  "demo"
        -]New value: +[
        +  "advanced-web-ranking",
        +  "ac",
        +  "adroll",
        +  "ahrefs",
        +  "basecamp",
        +  "brightlocal",
        +  "call-rail",
        +  "drip",
        +  "keywords",
        +  "sendin-blue",
        +  "sendgrid",
        +  "moosend",
        +  "mailer-lite",
        +  "pingdom",
        +  "uptime-robot",
        +  "piwik-pro",
        +  "wordpress",
        +  "pabbly-connect",
        +  "ment",
        +  "twilio",
        +  "switchy",
        +  "vimeo",
        +  "pinterest",
        +  "pinterest-ads",
        +  "gtres",
        +  "paypal",
        +  "gps",
        +  "gs",
        +  "CUSTOM_IMPORT",
        +  "CUSTOM_DATA",
        +  "CALCULATION",
        +  "GOALS",
        +  "str",
        +  "wistia",
        +  "ca-mon",
        +  "convertkit",
        +  "woocommerce",
        +  "xero",
        +  "matomo",
        +  "go-high-level",
        +  "wcs",
        +  "bing-webmaster-tools",
        +  "pipedrive",
        +  "salesforce",
        +  "tiktok",
        +  "tiktok-ads",
        +  "twr",
        +  "twr-ads",
        +  "spf",
        +  "ytbe",
        +  "google-local-services-ads",
        +  "klaviyo",
        +  "gsh",
        +  "ga4",
        +  "lkdin-ads",
        +  "lkdin-pg",
        +  "mlchmp",
        +  "inst-ads",
        +  "inst",
        +  "fb-ads",
        +  "fb-pg",
        +  "gmb",
        +  "serpstat",
        +  "hubspot",
        +  "gadw",
        +  "sem-rush",
        +  "se-ranking",
        +  "microsoft-ads",
        +  "plausible",
        +  "snapchat-ads",
        +  "amazon-advertising",
        +  "microsoft-clarity",
        +  "serp-watch",
        +  "vbout",
        +  "moz",
        +  "chatgpt-ads",
        +  "omnisend",
        +  "airtable",
        +  "nozzle",
        +  "surnex",
        +  "demo"
        +]
  8. 192 tool updates
    • Changedadd_asset_to_page3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedadd_button_widget3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedadd_calculated_metric_widget3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedadd_custom_data_widget3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedadd_data_widget7 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / properties / dimensions / items / properties / selector / description
        Added value: +"Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true"
      • addedInput schema / properties / metrics / items / properties / action_type / description
        Added value: +"Meta/Instagram action-based metrics only (actions, conversions, cost_per_action_type…) — the action key the value is read under. Filled from the catalog — only send it with custom: true"
      • addedInput schema / properties / metrics / items / properties / request_metrics / description
        Added value: +"The upstream vendor field(s) this metric is built from. Filled from the catalog — only send it with custom: true"
      • addedInput schema / properties / metrics / items / properties / selector / description
        Added value: +"Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true, copying what describe_datasource reports"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedadd_domain3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Removedadd_email_domain
    • Changedadd_embed_widget3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedadd_goal_widget3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedadd_image_widget3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Removedadd_report_section
    • Changedadd_static_value_widget3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedadd_text_widget4 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedInput schema / properties / text / description
        Previous value: -"Plain-text content. Defaults to empty."New value: +"Body text. Markdown is rendered: # / ## / ### headings, - and 1. lists, **bold**, *italic*, ~~strike~~, `code`, > quotes, ``` fences and [links](url). Plain prose works too — it becomes paragraphs. Defaults to empty."
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedadd_title_widget3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedarchive_asset3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedarchive_automation3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedarchive_calculated_metric3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedarchive_client3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedarchive_clients3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedarchive_custom_data3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedarchive_export3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedarchive_goal3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedarchive_media_file3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedarchive_media_files3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Removedarchive_notification
    • Removedarchive_notifications
    • Changedarchive_report6 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / id
        Removed value: -{
        -  "description": "Report ID to archive (from list_reports)",
        -  "type": "string"
        -}
      • addedInput schema / properties / report_id
        Added value: +{
        +  "description": "Report ID to archive (from list_reports)",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "id"
        -]New value: +[
        +  "report_id"
        +]
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedarchive_reports6 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / ids
        Removed value: -{
        -  "description": "Array of report IDs to archive (from list_reports)",
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • addedInput schema / properties / report_ids
        Added value: +{
        +  "description": "Report IDs to archive (from list_reports)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "ids"
        -]New value: +[
        +  "report_ids"
        +]
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedarchive_template3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedarchive_theme3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedaudit_report_health6 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / id
        Removed value: -{
        -  "description": "Report ID to audit (from list_reports)",
        -  "type": "string"
        -}
      • addedInput schema / properties / report_id
        Added value: +{
        +  "description": "Report ID to audit (from list_reports)",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "id"
        -]New value: +[
        +  "report_id"
        +]
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Removedchange_my_email
    • Changedchange_report_date_range6 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / id
        Removed value: -{
        -  "description": "Report ID (from list_reports)",
        -  "type": "string"
        -}
      • addedInput schema / properties / report_id
        Added value: +{
        +  "description": "Report ID (from list_reports)",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "id",
        -  "date_range"
        -]New value: +[
        +  "report_id",
        +  "date_range"
        +]
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Removedclear_read_notifications
    • Changedconnected_datasources7 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / meta / description
        Previous value: -"Pagination for the list — page, limit and the total row count."New value: +"Page, limit and total row count."
      • changedOutput schema / properties / meta / properties / limit / description
        Previous value: -"Maximum rows per page."New value: +"Max rows per page."
      • changedOutput schema / properties / meta / properties / page / description
        Previous value: -"Zero-based index of the page returned."New value: +"Page index, zero-based."
      • changedOutput schema / properties / meta / properties / total / description
        Previous value: -"Total rows matching the query across all pages."New value: +"Total rows matching the query."
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedcount_clients3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Removedcount_unread_notifications
    • Changedcreate_asset3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedcreate_automation7 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / properties / custom / properties / button_text / description
        Added value: +"CTA button label; omit for no button"
      • addedInput schema / properties / custom / properties / button_top / description
        Added value: +"Place the button above the message instead of below it"
      • changedInput schema / properties / sender_id / description
        Previous value: -"Saved email sender id"New value: +"Saved email sender id (from list_email_senders)"
      • changedInput schema / properties / template_id / description
        Previous value: -"Saved email template id, or the literal \"custom\" to save a new template from the `custom` payload"New value: +"Saved email template id (from list_email_templates), or the literal \"custom\" to save a new template from the `custom` payload"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedcreate_calculated_metric4 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedInput schema / properties / formula / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": true,
        -      "properties": {
        -        "id": {
        -          "description": "Unique token id within the formula, e.g. \"t1\"",
        -          "type": "string"
        -        },
        -        "number": {
        -          "description": "Required when type is NUMBER",
        -          "type": [
        -            "number",
        -            "null"
        -          ]
        -        },
        -        "operator": {
        -          "anyOf": [
        -            {
        -              "enum": [
        -                "+",
        -                "-",
        -                "*",
        -                "/",
        -                "×",
        -                "÷",
        -                "(",
        -                ")"
        -              ],
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Required when type is OPERATOR. Use × and ÷ for multiply/divide (what the UI writes); the ASCII * and / are also accepted since migrated formulas use them. Grouping: ( and )"
        -        },
        -        "query": {
        -          "anyOf": [
        -            {
        -              "additionalProperties": true,
        -              "description": "A builder query: which datasource, view, metrics, dimensions and filters to compute",
        -              "properties": {
        -                "advanced": {
        -                  "additionalProperties": {},
        -                  "description": "Datasource-specific settings — describe_datasource lists required keys per view",
        -                  "type": "object"
        -                },
        -                "data_view": {
        -                  "description": "Data view (from describe_datasource), e.g. ACCOUNT",
        -                  "type": "string"
        -                },
        -                "datasource_id": {
        -                  "description": "Datasource alias, e.g. gadw (from datasources)",
        -                  "enum": [
        -                    "advanced-web-ranking",
        -                    "ac",
        -                    "adroll",
        -                    "ahrefs",
        -                    "basecamp",
        -                    "brightlocal",
        -                    "call-rail",
        -                    "drip",
        -                    "keywords",
        -                    "sendin-blue",
        -                    "sendgrid",
        -                    "moosend",
        -                    "mailer-lite",
        -                    "pingdom",
        -                    "uptime-robot",
        -                    "piwik-pro",
        -                    "wordpress",
        -                    "pabbly-connect",
        -                    "ment",
        -                    "twilio",
        -                    "switchy",
        -                    "vimeo",
        -                    "pinterest",
        -                    "pinterest-ads",
        -                    "gtres",
        -                    "paypal",
        -                    "gps",
        -                    "gs",
        -                    "CUSTOM_IMPORT",
        -                    "CUSTOM_DATA",
        -                    "CALCULATION",
        -                    "GOALS",
        -                    "str",
        -                    "wistia",
        -                    "ca-mon",
        -                    "convertkit",
        -                    "woocommerce",
        -                    "xero",
        -                    "matomo",
        -                    "go-high-level",
        -                    "wcs",
        -                    "bing-webmaster-tools",
        -                    "pipedrive",
        -                    "salesforce",
        -                    "tiktok",
        -                    "tiktok-ads",
        -                    "twr",
        -                    "twr-ads",
        -                    "spf",
        -                    "ytbe",
        -                    "google-local-services-ads",
        -                    "klaviyo",
        -                    "gsh",
        -                    "ga4",
        -                    "lkdin-ads",
        -                    "lkdin-pg",
        -                    "mlchmp",
        -                    "inst-ads",
        -                    "inst",
        -                    "fb-ads",
        -                    "fb-pg",
        -                    "gmb",
        -                    "serpstat",
        -                    "hubspot",
        -                    "gadw",
        -                    "sem-rush",
        -                    "se-ranking",
        -                    "microsoft-ads",
        -                    "plausible",
        -                    "snapchat-ads",
        -                    "amazon-advertising",
        -                    "microsoft-clarity",
        -                    "serp-watch",
        -                    "vbout",
        -                    "moz",
        -                    "chatgpt-ads",
        -                    "omnisend",
        -                    "airtable",
        -                    "nozzle",
        -                    "demo"
        -                  ],
        -                  "type": "string"
        -                },
        -                "dimensions": {
        -                  "description": "Breakdown dimensions, e.g. [{ value: \"DATE\" }]",
        -                  "items": {
        -                    "additionalProperties": true,
        -                    "properties": {
        -                      "custom": {
        -                        "description": "A dynamic dimension absent from the static catalog",
        -                        "type": "boolean"
        -                      },
        -                      "data_view": {
        -                        "description": "Data view the dimension belongs to; filled from the catalog when omitted",
        -                        "type": "string"
        -                      },
        -                      "label": {
        -                        "description": "Display name — renames the dimension on the widget",
        -                        "type": "string"
        -                      },
        -                      "selector": {
        -                        "type": "string"
        -                      },
        -                      "value": {
        -                        "description": "Dimension id (from describe_datasource)",
        -                        "type": "string"
        -                      }
        -                    },
        -                    "required": [
        -                      "value"
        -                    ],
        -                    "type": "object"
        -                  },
        -                  "type": "array"
        -                },
        -                "filters": {
        -                  "description": "Row filters",
        -                  "items": {
        -                    "additionalProperties": true,
        -                    "properties": {
        -                      "field": {
        -                        "description": "Metric or dimension id to filter on",
        -                        "type": "string"
        -                      },
        -                      "logicalOperator": {
        -                        "anyOf": [
        -                          {
        -                            "enum": [
        -                              "and",
        -                              "or"
        -                            ],
        -                            "type": "string"
        -                          },
        -                          {
        -                            "type": "null"
        -                          }
        -                        ],
        -                        "description": "How this row joins the previous one — 'and' (default) or 'or'"
        -                      },
        -                      "operator": {
        -                        "description": "Operator id — the valid list per datasource comes from describe_datasource",
        -                        "type": "string"
        -                      },
        -                      "value": {
        -                        "anyOf": [
        -                          {
        -                            "type": "string"
        -                          },
        -                          {
        -                            "type": "number"
        -                          },
        -                          {
        -                            "type": "boolean"
        -                          },
        -                          {
        -                            "items": {},
        -                            "type": "array"
        -                          }
        -                        ],
        -                        "description": "Value to compare against"
        -                      }
        -                    },
        -                    "required": [
        -                      "field",
        -                      "operator",
        -                      "value"
        -                    ],
        -                    "type": "object"
        -                  },
        -                  "type": "array"
        -                },
        -                "metrics": {
        -                  "description": "Metrics to compute over — must belong to the data view",
        -                  "items": {
        -                    "additionalProperties": true,
        -                    "properties": {
        -                      "action_type": {
        -                        "type": "string"
        -                      },
        -                      "custom": {
        -                        "description": "A dynamic per-account metric absent from the static catalog (e.g. a Meta custom conversion)",
        -                        "type": "boolean"
        -                      },
        -                      "data_view": {
        -                        "description": "Data view the metric belongs to; resolved from the catalog when omitted",
        -                        "type": "string"
        -                      },
        -                      "invert_comparison": {
        -                        "description": "Colour a rise as negative — for lower-is-better metrics (cost, CPC, bounce rate)",
        -                        "type": "boolean"
        -                      },
        -                      "label": {
        -                        "description": "Display name — renames the metric on the widget",
        -                        "type": "string"
        -                      },
        -                      "request_metrics": {
        -                        "items": {
        -                          "type": "string"
        -                        },
        -                        "type": "array"
        -                      },
        -                      "selector": {
        -                        "type": "string"
        -                      },
        -                      "summary": {
        -                        "description": "Aggregation for the total: 'SUM', 'AVG', 'MAX', or 'MIN'",
        -                        "enum": [
        -                          "SUM",
        -                          "AVG",
        -                          "MAX",
        -                          "MIN"
        -                        ],
        -                        "type": "string"
        -                      },
        -                      "symbol": {
        -                        "description": "Number format. Numeric: 'number' (plain), 'decimal', 'percent' (or '%'), 'currency' (or '$'). Duration: 's', 'ms', 'time', 'seconds', 'minutes', 'milliseconds'. Passed through unformatted: 'text', 'link', 'date'",
        -                        "enum": [
        -                          "number",
        -                          "decimal",
        -                          "percent",
        -                          "%",
        -                          "currency",
        -                          "$",
        -                          "text",
        -                          "link",
        -                          "date",
        -                          "s",
        -                          "ms",
        -                          "time",
        -                          "seconds",
        -                          "minutes",
        -                          "milliseconds"
        -                        ],
        -                        "type": "string"
        -                      },
        -                      "value": {
        -                        "description": "Metric id (from describe_datasource)",
        -                        "type": "string"
        -                      }
        -                    },
        -                    "required": [
        -                      "value"
        -                    ],
        -                    "type": "object"
        -                  },
        -                  "type": "array"
        -                }
        -              },
        -              "type": "object"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Required when type is METRIC — the query whose value this token contributes"
        -        },
        -        "type": {
        -          "description": "'METRIC' (a query), 'NUMBER' (a literal), or 'OPERATOR' (an arithmetic symbol)",
        -          "enum": [
        -            "METRIC",
        -            "NUMBER",
        -            "OPERATOR"
        -          ],
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "id": {
        +          "description": "Unique token id within the formula, e.g. \"t1\"",
        +          "type": "string"
        +        },
        +        "number": {
        +          "description": "Required when type is NUMBER",
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "operator": {
        +          "anyOf": [
        +            {
        +              "enum": [
        +                "+",
        +                "-",
        +                "*",
        +                "/",
        +                "×",
        +                "÷",
        +                "(",
        +                ")"
        +              ],
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Required when type is OPERATOR. Use × and ÷ for multiply/divide (what the UI writes); the ASCII * and / are also accepted since migrated formulas use them. Grouping: ( and )"
        +        },
        +        "query": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "description": "A builder query: which datasource, view, metrics, dimensions and filters to compute",
        +              "properties": {
        +                "advanced": {
        +                  "additionalProperties": {},
        +                  "description": "Datasource-specific settings — describe_datasource lists required keys per view",
        +                  "type": "object"
        +                },
        +                "data_view": {
        +                  "description": "Data view (from describe_datasource), e.g. ACCOUNT",
        +                  "type": "string"
        +                },
        +                "datasource_id": {
        +                  "description": "Datasource alias, e.g. gadw (from datasources)",
        +                  "enum": [
        +                    "advanced-web-ranking",
        +                    "ac",
        +                    "adroll",
        +                    "ahrefs",
        +                    "basecamp",
        +                    "brightlocal",
        +                    "call-rail",
        +                    "drip",
        +                    "keywords",
        +                    "sendin-blue",
        +                    "sendgrid",
        +                    "moosend",
        +                    "mailer-lite",
        +                    "pingdom",
        +                    "uptime-robot",
        +                    "piwik-pro",
        +                    "wordpress",
        +                    "pabbly-connect",
        +                    "ment",
        +                    "twilio",
        +                    "switchy",
        +                    "vimeo",
        +                    "pinterest",
        +                    "pinterest-ads",
        +                    "gtres",
        +                    "paypal",
        +                    "gps",
        +                    "gs",
        +                    "CUSTOM_IMPORT",
        +                    "CUSTOM_DATA",
        +                    "CALCULATION",
        +                    "GOALS",
        +                    "str",
        +                    "wistia",
        +                    "ca-mon",
        +                    "convertkit",
        +                    "woocommerce",
        +                    "xero",
        +                    "matomo",
        +                    "go-high-level",
        +                    "wcs",
        +                    "bing-webmaster-tools",
        +                    "pipedrive",
        +                    "salesforce",
        +                    "tiktok",
        +                    "tiktok-ads",
        +                    "twr",
        +                    "twr-ads",
        +                    "spf",
        +                    "ytbe",
        +                    "google-local-services-ads",
        +                    "klaviyo",
        +                    "gsh",
        +                    "ga4",
        +                    "lkdin-ads",
        +                    "lkdin-pg",
        +                    "mlchmp",
        +                    "inst-ads",
        +                    "inst",
        +                    "fb-ads",
        +                    "fb-pg",
        +                    "gmb",
        +                    "serpstat",
        +                    "hubspot",
        +                    "gadw",
        +                    "sem-rush",
        +                    "se-ranking",
        +                    "microsoft-ads",
        +                    "plausible",
        +                    "snapchat-ads",
        +                    "amazon-advertising",
        +                    "microsoft-clarity",
        +                    "serp-watch",
        +                    "vbout",
        +                    "moz",
        +                    "chatgpt-ads",
        +                    "omnisend",
        +                    "airtable",
        +                    "nozzle",
        +                    "demo"
        +                  ],
        +                  "type": "string"
        +                },
        +                "dimensions": {
        +                  "description": "Breakdown dimensions, e.g. [{ value: \"DATE\" }]",
        +                  "items": {
        +                    "additionalProperties": true,
        +                    "properties": {
        +                      "custom": {
        +                        "description": "A dynamic dimension absent from the static catalog",
        +                        "type": "boolean"
        +                      },
        +                      "data_view": {
        +                        "description": "Data view the dimension belongs to; filled from the catalog when omitted",
        +                        "type": "string"
        +                      },
        +                      "label": {
        +                        "description": "Display name — renames the dimension on the widget",
        +                        "type": "string"
        +                      },
        +                      "selector": {
        +                        "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true",
        +                        "type": "string"
        +                      },
        +                      "value": {
        +                        "description": "Dimension id (from describe_datasource)",
        +                        "type": "string"
        +                      }
        +                    },
        +                    "required": [
        +                      "value"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "type": "array"
        +                },
        +                "filters": {
        +                  "description": "Row filters",
        +                  "items": {
        +                    "additionalProperties": true,
        +                    "properties": {
        +                      "field": {
        +                        "description": "Metric or dimension id to filter on",
        +                        "type": "string"
        +                      },
        +                      "logicalOperator": {
        +                        "anyOf": [
        +                          {
        +                            "enum": [
        +                              "and",
        +                              "or"
        +                            ],
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "description": "How this row joins the previous one — 'and' (default) or 'or'"
        +                      },
        +                      "operator": {
        +                        "description": "Operator id — the valid list per datasource comes from describe_datasource",
        +                        "type": "string"
        +                      },
        +                      "value": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "number"
        +                          },
        +                          {
        +                            "type": "boolean"
        +                          },
        +                          {
        +                            "items": {},
        +                            "type": "array"
        +                          }
        +                        ],
        +                        "description": "Value to compare against"
        +                      }
        +                    },
        +                    "required": [
        +                      "field",
        +                      "operator",
        +                      "value"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "type": "array"
        +                },
        +                "metrics": {
        +                  "description": "Metrics to compute over — must belong to the data view",
        +                  "items": {
        +                    "additionalProperties": true,
        +                    "properties": {
        +                      "action_type": {
        +                        "description": "Meta/Instagram action-based metrics only (actions, conversions, cost_per_action_type…) — the action key the value is read under. Filled from the catalog — only send it with custom: true",
        +                        "type": "string"
        +                      },
        +                      "custom": {
        +                        "description": "A dynamic per-account metric absent from the static catalog (e.g. a Meta custom conversion)",
        +                        "type": "boolean"
        +                      },
        +                      "data_view": {
        +                        "description": "Data view the metric belongs to; resolved from the catalog when omitted",
        +                        "type": "string"
        +                      },
        +                      "invert_comparison": {
        +                        "description": "Colour a rise as negative — for lower-is-better metrics (cost, CPC, bounce rate)",
        +                        "type": "boolean"
        +                      },
        +                      "label": {
        +                        "description": "Display name — renames the metric on the widget",
        +                        "type": "string"
        +                      },
        +                      "request_metrics": {
        +                        "description": "The upstream vendor field(s) this metric is built from. Filled from the catalog — only send it with custom: true",
        +                        "items": {
        +                          "type": "string"
        +                        },
        +                        "type": "array"
        +                      },
        +                      "selector": {
        +                        "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true, copying what describe_datasource reports",
        +                        "type": "string"
        +                      },
        +                      "summary": {
        +                        "description": "Aggregation for the total: 'SUM', 'AVG', 'MAX', or 'MIN'",
        +                        "enum": [
        +                          "SUM",
        +                          "AVG",
        +                          "MAX",
        +                          "MIN"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      "symbol": {
        +                        "description": "Number format. Numeric: 'number' (plain), 'decimal', 'percent' (or '%'), 'currency' (or '$'). Duration: 's', 'ms', 'time', 'seconds', 'minutes', 'milliseconds'. Passed through unformatted: 'text', 'link', 'date'",
        +                        "enum": [
        +                          "number",
        +                          "decimal",
        +                          "percent",
        +                          "%",
        +                          "currency",
        +                          "$",
        +                          "text",
        +                          "link",
        +                          "date",
        +                          "s",
        +                          "ms",
        +                          "time",
        +                          "seconds",
        +                          "minutes",
        +                          "milliseconds"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      "value": {
        +                        "description": "Metric id (from describe_datasource)",
        +                        "type": "string"
        +                      }
        +                    },
        +                    "required": [
        +                      "value"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "type": "array"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Required when type is METRIC — the query whose value this token contributes"
        +        },
        +        "type": {
        +          "description": "'METRIC' (a query), 'NUMBER' (a literal), or 'OPERATOR' (an arithmetic symbol)",
        +          "enum": [
        +            "METRIC",
        +            "NUMBER",
        +            "OPERATOR"
        +          ],
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "id",
        +        "type"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedcreate_client3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedcreate_client_with_report3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedcreate_connection3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedcreate_custom_data3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Removedcreate_email_sender
    • Removedcreate_email_template
    • Changedcreate_folder3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedcreate_goal7 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / properties / query / properties / dimensions / items / properties / selector / description
        Added value: +"Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true"
      • addedInput schema / properties / query / properties / metrics / items / properties / action_type / description
        Added value: +"Meta/Instagram action-based metrics only (actions, conversions, cost_per_action_type…) — the action key the value is read under. Filled from the catalog — only send it with custom: true"
      • addedInput schema / properties / query / properties / metrics / items / properties / request_metrics / description
        Added value: +"The upstream vendor field(s) this metric is built from. Filled from the catalog — only send it with custom: true"
      • addedInput schema / properties / query / properties / metrics / items / properties / selector / description
        Added value: +"Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true, copying what describe_datasource reports"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Removedcreate_media_folder
    • Changedcreate_page4 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedInput schema / properties / position / description
        Previous value: -"Position (1-indexed); omit to append at the end"New value: +"Insert at this position, 0-based; pages at or after it shift down. Omit to append at the end"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedcreate_report3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedcreate_report_from_template3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedcreate_template3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedcreate_theme5 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / cover_page / properties / widgets
        Removed value: -{
        -  "items": {},
        -  "type": "array"
        -}
      • removedInput schema / properties / thank_you_page / properties / widgets
        Removed value: -{
        -  "items": {},
        -  "type": "array"
        -}
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changeddatasource_resources3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changeddatasources3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Removeddelete_api_key
    • Changeddelete_connection6 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / properties / connection_id
        Added value: +{
        +  "description": "Connection ID to delete (from connected_datasources)",
        +  "type": "string"
        +}
      • removedInput schema / properties / id
        Removed value: -{
        -  "description": "Datasource connection ID to delete (from connected_datasources)",
        -  "type": "string"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "id"
        -]New value: +[
        +  "connection_id"
        +]
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Removeddelete_email_sender
    • Removeddelete_email_template
    • Changeddelete_folder3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Removeddelete_media_folder
    • Removeddelete_notification_channel
    • Changeddelete_page3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changeddelete_widget6 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / id
        Removed value: -{
        -  "description": "Widget ID to delete (from list_widgets).",
        -  "type": "string"
        -}
      • addedInput schema / properties / widget_id
        Added value: +{
        +  "description": "Widget ID to delete (from list_widgets).",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "id"
        -]New value: +[
        +  "widget_id"
        +]
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changeddelete_widgets6 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / ids
        Removed value: -{
        -  "description": "Array of widget IDs to delete (from list_widgets).",
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • addedInput schema / properties / widget_ids
        Added value: +{
        +  "description": "Widget IDs to delete (from list_widgets).",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "ids"
        -]New value: +[
        +  "widget_ids"
        +]
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changeddescribe_datasource3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedduplicate_asset3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedduplicate_calculated_metric3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedduplicate_custom_data3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedduplicate_goal3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedduplicate_report6 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / id
        Removed value: -{
        -  "description": "Source report ID (from list_reports)",
        -  "type": "string"
        -}
      • addedInput schema / properties / report_id
        Added value: +{
        +  "description": "Source report ID (from list_reports)",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "id",
        -  "name"
        -]New value: +[
        +  "report_id",
        +  "name"
        +]
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedgenerate_company_palette3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedgenerate_pdf3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedget_account3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedget_account_usage3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Removedget_archive_counts
    • Changedget_asset3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedget_automation_history7 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / meta / description
        Previous value: -"Pagination for the list — page, limit and the total row count."New value: +"Page, limit and total row count."
      • changedOutput schema / properties / meta / properties / limit / description
        Previous value: -"Maximum rows per page."New value: +"Max rows per page."
      • changedOutput schema / properties / meta / properties / page / description
        Previous value: -"Zero-based index of the page returned."New value: +"Page index, zero-based."
      • changedOutput schema / properties / meta / properties / total / description
        Previous value: -"Total rows matching the query across all pages."New value: +"Total rows matching the query."
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Removedget_billing
    • Changedget_branding3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedget_client3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedget_company3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedget_current_user3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedget_custom_data3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Removedget_email_provider
    • Removedget_email_template
    • Removedget_notification_preferences
    • Changedget_pdf_status4 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / data / description
        Previous value: -"The job — status (pending, processing, complete or failed), the download url once it is complete, and the error when it failed."New value: +"The job — status (processing, complete or failed) and the download url once it is complete."
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedget_report6 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / id
        Removed value: -{
        -  "description": "Report ID (from list_reports)",
        -  "type": "string"
        -}
      • addedInput schema / properties / report_id
        Added value: +{
        +  "description": "Report ID (from list_reports)",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "id"
        -]New value: +[
        +  "report_id"
        +]
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedget_template3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedget_theme3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedget_widget6 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / id
        Removed value: -{
        -  "description": "Widget ID (from list_widgets).",
        -  "type": "string"
        -}
      • addedInput schema / properties / widget_id
        Added value: +{
        +  "description": "Widget ID (from list_widgets).",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "id"
        -]New value: +[
        +  "widget_id"
        +]
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedget_widget_data3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedinvite_user3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedlink_datasource3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Removedlist_activity
    • Removedlist_api_keys
    • Changedlist_archive7 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / meta / description
        Previous value: -"Pagination for the list — page, limit and the total row count."New value: +"Page, limit and total row count."
      • changedOutput schema / properties / meta / properties / limit / description
        Previous value: -"Maximum rows per page."New value: +"Max rows per page."
      • changedOutput schema / properties / meta / properties / page / description
        Previous value: -"Zero-based index of the page returned."New value: +"Page index, zero-based."
      • changedOutput schema / properties / meta / properties / total / description
        Previous value: -"Total rows matching the query across all pages."New value: +"Total rows matching the query."
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Removedlist_asset_tags
    • Changedlist_asset_widgets7 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / meta / description
        Previous value: -"Pagination for the list — page, limit and the total row count."New value: +"Page, limit and total row count."
      • changedOutput schema / properties / meta / properties / limit / description
        Previous value: -"Maximum rows per page."New value: +"Max rows per page."
      • changedOutput schema / properties / meta / properties / page / description
        Previous value: -"Zero-based index of the page returned."New value: +"Page index, zero-based."
      • changedOutput schema / properties / meta / properties / total / description
        Previous value: -"Total rows matching the query across all pages."New value: +"Total rows matching the query."
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedlist_assets7 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / meta / description
        Previous value: -"Pagination for the list — page, limit and the total row count."New value: +"Page, limit and total row count."
      • changedOutput schema / properties / meta / properties / limit / description
        Previous value: -"Maximum rows per page."New value: +"Max rows per page."
      • changedOutput schema / properties / meta / properties / page / description
        Previous value: -"Zero-based index of the page returned."New value: +"Page index, zero-based."
      • changedOutput schema / properties / meta / properties / total / description
        Previous value: -"Total rows matching the query across all pages."New value: +"Total rows matching the query."
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedlist_automations7 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / meta / description
        Previous value: -"Pagination for the list — page, limit and the total row count."New value: +"Page, limit and total row count."
      • changedOutput schema / properties / meta / properties / limit / description
        Previous value: -"Maximum rows per page."New value: +"Max rows per page."
      • changedOutput schema / properties / meta / properties / page / description
        Previous value: -"Zero-based index of the page returned."New value: +"Page index, zero-based."
      • changedOutput schema / properties / meta / properties / total / description
        Previous value: -"Total rows matching the query across all pages."New value: +"Total rows matching the query."
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedlist_calculated_metrics7 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / meta / description
        Previous value: -"Pagination for the list — page, limit and the total row count."New value: +"Page, limit and total row count."
      • changedOutput schema / properties / meta / properties / limit / description
        Previous value: -"Maximum rows per page."New value: +"Max rows per page."
      • changedOutput schema / properties / meta / properties / page / description
        Previous value: -"Zero-based index of the page returned."New value: +"Page index, zero-based."
      • changedOutput schema / properties / meta / properties / total / description
        Previous value: -"Total rows matching the query across all pages."New value: +"Total rows matching the query."
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedlist_clients7 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / meta / description
        Previous value: -"Pagination for the list — page, limit and the total row count."New value: +"Page, limit and total row count."
      • changedOutput schema / properties / meta / properties / limit / description
        Previous value: -"Maximum rows per page."New value: +"Max rows per page."
      • changedOutput schema / properties / meta / properties / page / description
        Previous value: -"Zero-based index of the page returned."New value: +"Page index, zero-based."
      • changedOutput schema / properties / meta / properties / total / description
        Previous value: -"Total rows matching the query across all pages."New value: +"Total rows matching the query."
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedlist_custom_data7 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / meta / description
        Previous value: -"Pagination for the list — page, limit and the total row count."New value: +"Page, limit and total row count."
      • changedOutput schema / properties / meta / properties / limit / description
        Previous value: -"Maximum rows per page."New value: +"Max rows per page."
      • changedOutput schema / properties / meta / properties / page / description
        Previous value: -"Zero-based index of the page returned."New value: +"Page index, zero-based."
      • changedOutput schema / properties / meta / properties / total / description
        Previous value: -"Total rows matching the query across all pages."New value: +"Total rows matching the query."
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedlist_domains7 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / meta / description
        Previous value: -"Pagination for the list — page, limit and the total row count."New value: +"Page, limit and total row count."
      • changedOutput schema / properties / meta / properties / limit / description
        Previous value: -"Maximum rows per page."New value: +"Max rows per page."
      • changedOutput schema / properties / meta / properties / page / description
        Previous value: -"Zero-based index of the page returned."New value: +"Page index, zero-based."
      • changedOutput schema / properties / meta / properties / total / description
        Previous value: -"Total rows matching the query across all pages."New value: +"Total rows matching the query."
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Removedlist_email_domains
    • Removedlist_email_logs
    • Changedlist_email_senders3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedlist_email_templates7 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / meta / description
        Previous value: -"Pagination for the list — page, limit and the total row count."New value: +"Page, limit and total row count."
      • changedOutput schema / properties / meta / properties / limit / description
        Previous value: -"Maximum rows per page."New value: +"Max rows per page."
      • changedOutput schema / properties / meta / properties / page / description
        Previous value: -"Zero-based index of the page returned."New value: +"Page index, zero-based."
      • changedOutput schema / properties / meta / properties / total / description
        Previous value: -"Total rows matching the query across all pages."New value: +"Total rows matching the query."
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedlist_exports7 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / meta / description
        Previous value: -"Pagination for the list — page, limit and the total row count."New value: +"Page, limit and total row count."
      • changedOutput schema / properties / meta / properties / limit / description
        Previous value: -"Maximum rows per page."New value: +"Max rows per page."
      • changedOutput schema / properties / meta / properties / page / description
        Previous value: -"Zero-based index of the page returned."New value: +"Page index, zero-based."
      • changedOutput schema / properties / meta / properties / total / description
        Previous value: -"Total rows matching the query across all pages."New value: +"Total rows matching the query."
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedlist_folders7 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / meta / description
        Previous value: -"Pagination for the list — page, limit and the total row count."New value: +"Page, limit and total row count."
      • changedOutput schema / properties / meta / properties / limit / description
        Previous value: -"Maximum rows per page."New value: +"Max rows per page."
      • changedOutput schema / properties / meta / properties / page / description
        Previous value: -"Zero-based index of the page returned."New value: +"Page index, zero-based."
      • changedOutput schema / properties / meta / properties / total / description
        Previous value: -"Total rows matching the query across all pages."New value: +"Total rows matching the query."
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedlist_goals7 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / meta / description
        Previous value: -"Pagination for the list — page, limit and the total row count."New value: +"Page, limit and total row count."
      • changedOutput schema / properties / meta / properties / limit / description
        Previous value: -"Maximum rows per page."New value: +"Max rows per page."
      • changedOutput schema / properties / meta / properties / page / description
        Previous value: -"Zero-based index of the page returned."New value: +"Page index, zero-based."
      • changedOutput schema / properties / meta / properties / total / description
        Previous value: -"Total rows matching the query across all pages."New value: +"Total rows matching the query."
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Removedlist_invoices
    • Changedlist_media8 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedInput schema / properties / folder_id / description
        Previous value: -"Filter by folder ID (from list_media / folders)"New value: +"Filter by folder ID — read one off the folder a row reports in an unfiltered list. Media folders are created and managed in the app."
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / meta / description
        Previous value: -"Pagination for the list — page, limit and the total row count."New value: +"Page, limit and total row count."
      • changedOutput schema / properties / meta / properties / limit / description
        Previous value: -"Maximum rows per page."New value: +"Max rows per page."
      • changedOutput schema / properties / meta / properties / page / description
        Previous value: -"Zero-based index of the page returned."New value: +"Page index, zero-based."
      • changedOutput schema / properties / meta / properties / total / description
        Previous value: -"Total rows matching the query across all pages."New value: +"Total rows matching the query."
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Removedlist_media_folders
    • Removedlist_notification_channels
    • Removedlist_notifications
    • Changedlist_pages11 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / properties / report_id
        Added value: +{
        +  "description": "Report or dashboard ID (from list_reports)",
        +  "type": "string"
        +}
      • removedInput schema / properties / source_id
        Removed value: -{
        -  "description": "Report or template ID (from list_reports or list_templates)",
        -  "type": "string"
        -}
      • removedInput schema / properties / source_type
        Removed value: -{
        -  "description": "Source type (defaults to \"project\")",
        -  "enum": [
        -    "project",
        -    "template"
        -  ],
        -  "type": "string"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "source_id"
        -]New value: +[
        +  "report_id"
        +]
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / meta / description
        Previous value: -"Pagination for the list — page, limit and the total row count."New value: +"Page, limit and total row count."
      • changedOutput schema / properties / meta / properties / limit / description
        Previous value: -"Maximum rows per page."New value: +"Max rows per page."
      • changedOutput schema / properties / meta / properties / page / description
        Previous value: -"Zero-based index of the page returned."New value: +"Page index, zero-based."
      • changedOutput schema / properties / meta / properties / total / description
        Previous value: -"Total rows matching the query across all pages."New value: +"Total rows matching the query."
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedlist_reports7 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / meta / description
        Previous value: -"Pagination for the list — page, limit and the total row count."New value: +"Page, limit and total row count."
      • changedOutput schema / properties / meta / properties / limit / description
        Previous value: -"Maximum rows per page."New value: +"Max rows per page."
      • changedOutput schema / properties / meta / properties / page / description
        Previous value: -"Zero-based index of the page returned."New value: +"Page index, zero-based."
      • changedOutput schema / properties / meta / properties / total / description
        Previous value: -"Total rows matching the query across all pages."New value: +"Total rows matching the query."
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Addedlist_template_pages
    • Changedlist_template_widgets8 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedInput schema / properties / page_id / description
        Previous value: -"Filter to widgets on a single page, id from list_pages."New value: +"Filter to widgets on a single page, id from list_template_pages."
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / meta / description
        Previous value: -"Pagination for the list — page, limit and the total row count."New value: +"Page, limit and total row count."
      • changedOutput schema / properties / meta / properties / limit / description
        Previous value: -"Maximum rows per page."New value: +"Max rows per page."
      • changedOutput schema / properties / meta / properties / page / description
        Previous value: -"Zero-based index of the page returned."New value: +"Page index, zero-based."
      • changedOutput schema / properties / meta / properties / total / description
        Previous value: -"Total rows matching the query across all pages."New value: +"Total rows matching the query."
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedlist_templates7 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / meta / description
        Previous value: -"Pagination for the list — page, limit and the total row count."New value: +"Page, limit and total row count."
      • changedOutput schema / properties / meta / properties / limit / description
        Previous value: -"Maximum rows per page."New value: +"Max rows per page."
      • changedOutput schema / properties / meta / properties / page / description
        Previous value: -"Zero-based index of the page returned."New value: +"Page index, zero-based."
      • changedOutput schema / properties / meta / properties / total / description
        Previous value: -"Total rows matching the query across all pages."New value: +"Total rows matching the query."
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedlist_themes7 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / meta / description
        Previous value: -"Pagination for the list — page, limit and the total row count."New value: +"Page, limit and total row count."
      • changedOutput schema / properties / meta / properties / limit / description
        Previous value: -"Maximum rows per page."New value: +"Max rows per page."
      • changedOutput schema / properties / meta / properties / page / description
        Previous value: -"Zero-based index of the page returned."New value: +"Page index, zero-based."
      • changedOutput schema / properties / meta / properties / total / description
        Previous value: -"Total rows matching the query across all pages."New value: +"Total rows matching the query."
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedlist_users7 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / meta / description
        Previous value: -"Pagination for the list — page, limit and the total row count."New value: +"Page, limit and total row count."
      • changedOutput schema / properties / meta / properties / limit / description
        Previous value: -"Maximum rows per page."New value: +"Max rows per page."
      • changedOutput schema / properties / meta / properties / page / description
        Previous value: -"Zero-based index of the page returned."New value: +"Page index, zero-based."
      • changedOutput schema / properties / meta / properties / total / description
        Previous value: -"Total rows matching the query across all pages."New value: +"Total rows matching the query."
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedlist_widgets11 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / properties / report_id
        Added value: +{
        +  "description": "Report or dashboard ID (from list_reports).",
        +  "type": "string"
        +}
      • removedInput schema / properties / source_id
        Removed value: -{
        -  "description": "Source ID — report (from list_reports) or template (from list_templates) ID.",
        -  "type": "string"
        -}
      • removedInput schema / properties / source_type
        Removed value: -{
        -  "description": "'project' or 'template'",
        -  "enum": [
        -    "project",
        -    "template"
        -  ],
        -  "type": "string"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "source_id"
        -]New value: +[
        +  "report_id"
        +]
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / meta / description
        Previous value: -"Pagination for the list — page, limit and the total row count."New value: +"Page, limit and total row count."
      • changedOutput schema / properties / meta / properties / limit / description
        Previous value: -"Maximum rows per page."New value: +"Max rows per page."
      • changedOutput schema / properties / meta / properties / page / description
        Previous value: -"Zero-based index of the page returned."New value: +"Page index, zero-based."
      • changedOutput schema / properties / meta / properties / total / description
        Previous value: -"Total rows matching the query across all pages."New value: +"Total rows matching the query."
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Removedmark_notifications_read
    • Changedmove_client_to_folder3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Removedmove_media_to_folder
    • Changedmove_widget6 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / id
        Removed value: -{
        -  "description": "Widget ID (from list_widgets).",
        -  "type": "string"
        -}
      • addedInput schema / properties / widget_id
        Added value: +{
        +  "description": "Widget ID (from list_widgets).",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "id"
        -]New value: +[
        +  "widget_id"
        +]
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedpause_automation3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Addedpreview_report
    • Addedquery_data
    • Changedrefresh_account_favicon3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedrefresh_client_favicon3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedrefresh_client_screenshot3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedrefresh_report6 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / id
        Removed value: -{
        -  "description": "Report ID (from list_reports)",
        -  "type": "string"
        -}
      • addedInput schema / properties / report_id
        Added value: +{
        +  "description": "Report ID (from list_reports)",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "id"
        -]New value: +[
        +  "report_id"
        +]
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedrefresh_widgets6 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedInput schema / properties / client_id / description
        Previous value: -"Client id the widgets belong to (from list_clients)"New value: +"Client the widgets belong to (from list_clients). Read from the widgets when omitted."
      • changedInput schema / properties / date_range / description
        Previous value: -"The date range to fetch against"New value: +"Explicit range to fetch against. Defaults to each widget's own range, or its report's."
      • changedInput schema / required
        Previous value: -[
        -  "widget_ids",
        -  "client_id",
        -  "date_range"
        -]New value: +[
        +  "widget_ids"
        +]
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedremove_account_favicon3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedremove_account_logo3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedremove_client_favicon3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedremove_client_logo3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedremove_domain3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Removedremove_email_domain
    • Changedremove_user3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedrename_connection6 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / properties / connection_id
        Added value: +{
        +  "description": "Connection ID (from connected_datasources)",
        +  "type": "string"
        +}
      • removedInput schema / properties / id
        Removed value: -{
        -  "description": "Datasource connection ID (from connected_datasources)",
        -  "type": "string"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "id",
        -  "name"
        -]New value: +[
        +  "connection_id",
        +  "name"
        +]
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedrename_media_file3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedrestore_from_archive3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Removedrevoke_api_key
    • Changedsearch3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Removedsend_email
    • Changedset_default_email_sender3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedset_default_email_template3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Removedset_email_provider
    • Removedset_notification_channel
    • Changedtest_automation3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedtest_connection6 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / auth_id
        Removed value: -{
        -  "description": "Connection id — the `id` of a row from connected_datasources",
        -  "type": "string"
        -}
      • addedInput schema / properties / connection_id
        Added value: +{
        +  "description": "Connection ID (from connected_datasources)",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "auth_id",
        -  "datasource_id"
        -]New value: +[
        +  "connection_id",
        +  "datasource_id"
        +]
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedunlink_datasource3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedunpause_automation3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedupdate_asset3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedupdate_automation10 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / properties / custom / properties / button_text / description
        Added value: +"CTA button label; omit for no button"
      • addedInput schema / properties / custom / properties / button_top / description
        Added value: +"Place the button above the message instead of below it"
      • addedInput schema / properties / custom / properties / message / description
        Added value: +"Email message body"
      • addedInput schema / properties / custom / properties / name / description
        Added value: +"Name for the new saved template"
      • addedInput schema / properties / custom / properties / subject / description
        Added value: +"Email subject"
      • changedInput schema / properties / sender_id / description
        Previous value: -"Saved email sender id"New value: +"Saved email sender id (from list_email_senders)"
      • changedInput schema / properties / template_id / description
        Previous value: -"Saved email template id, or \"custom\" with a `custom` payload"New value: +"Saved email template id (from list_email_templates), or \"custom\" with a `custom` payload"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedupdate_branding3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedupdate_button_widget6 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / id
        Removed value: -{
        -  "description": "Widget ID (from list_widgets).",
        -  "type": "string"
        -}
      • addedInput schema / properties / widget_id
        Added value: +{
        +  "description": "Widget ID (from list_widgets).",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "id"
        -]New value: +[
        +  "widget_id"
        +]
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedupdate_calculated_metric4 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedInput schema / properties / formula / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": true,
        -      "properties": {
        -        "id": {
        -          "description": "Unique token id within the formula, e.g. \"t1\"",
        -          "type": "string"
        -        },
        -        "number": {
        -          "description": "Required when type is NUMBER",
        -          "type": [
        -            "number",
        -            "null"
        -          ]
        -        },
        -        "operator": {
        -          "anyOf": [
        -            {
        -              "enum": [
        -                "+",
        -                "-",
        -                "*",
        -                "/",
        -                "×",
        -                "÷",
        -                "(",
        -                ")"
        -              ],
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Required when type is OPERATOR. Use × and ÷ for multiply/divide (what the UI writes); the ASCII * and / are also accepted since migrated formulas use them. Grouping: ( and )"
        -        },
        -        "query": {
        -          "anyOf": [
        -            {
        -              "additionalProperties": true,
        -              "description": "A builder query: which datasource, view, metrics, dimensions and filters to compute",
        -              "properties": {
        -                "advanced": {
        -                  "additionalProperties": {},
        -                  "description": "Datasource-specific settings — describe_datasource lists required keys per view",
        -                  "type": "object"
        -                },
        -                "data_view": {
        -                  "description": "Data view (from describe_datasource), e.g. ACCOUNT",
        -                  "type": "string"
        -                },
        -                "datasource_id": {
        -                  "description": "Datasource alias, e.g. gadw (from datasources)",
        -                  "enum": [
        -                    "advanced-web-ranking",
        -                    "ac",
        -                    "adroll",
        -                    "ahrefs",
        -                    "basecamp",
        -                    "brightlocal",
        -                    "call-rail",
        -                    "drip",
        -                    "keywords",
        -                    "sendin-blue",
        -                    "sendgrid",
        -                    "moosend",
        -                    "mailer-lite",
        -                    "pingdom",
        -                    "uptime-robot",
        -                    "piwik-pro",
        -                    "wordpress",
        -                    "pabbly-connect",
        -                    "ment",
        -                    "twilio",
        -                    "switchy",
        -                    "vimeo",
        -                    "pinterest",
        -                    "pinterest-ads",
        -                    "gtres",
        -                    "paypal",
        -                    "gps",
        -                    "gs",
        -                    "CUSTOM_IMPORT",
        -                    "CUSTOM_DATA",
        -                    "CALCULATION",
        -                    "GOALS",
        -                    "str",
        -                    "wistia",
        -                    "ca-mon",
        -                    "convertkit",
        -                    "woocommerce",
        -                    "xero",
        -                    "matomo",
        -                    "go-high-level",
        -                    "wcs",
        -                    "bing-webmaster-tools",
        -                    "pipedrive",
        -                    "salesforce",
        -                    "tiktok",
        -                    "tiktok-ads",
        -                    "twr",
        -                    "twr-ads",
        -                    "spf",
        -                    "ytbe",
        -                    "google-local-services-ads",
        -                    "klaviyo",
        -                    "gsh",
        -                    "ga4",
        -                    "lkdin-ads",
        -                    "lkdin-pg",
        -                    "mlchmp",
        -                    "inst-ads",
        -                    "inst",
        -                    "fb-ads",
        -                    "fb-pg",
        -                    "gmb",
        -                    "serpstat",
        -                    "hubspot",
        -                    "gadw",
        -                    "sem-rush",
        -                    "se-ranking",
        -                    "microsoft-ads",
        -                    "plausible",
        -                    "snapchat-ads",
        -                    "amazon-advertising",
        -                    "microsoft-clarity",
        -                    "serp-watch",
        -                    "vbout",
        -                    "moz",
        -                    "chatgpt-ads",
        -                    "omnisend",
        -                    "airtable",
        -                    "nozzle",
        -                    "demo"
        -                  ],
        -                  "type": "string"
        -                },
        -                "dimensions": {
        -                  "description": "Breakdown dimensions, e.g. [{ value: \"DATE\" }]",
        -                  "items": {
        -                    "additionalProperties": true,
        -                    "properties": {
        -                      "custom": {
        -                        "description": "A dynamic dimension absent from the static catalog",
        -                        "type": "boolean"
        -                      },
        -                      "data_view": {
        -                        "description": "Data view the dimension belongs to; filled from the catalog when omitted",
        -                        "type": "string"
        -                      },
        -                      "label": {
        -                        "description": "Display name — renames the dimension on the widget",
        -                        "type": "string"
        -                      },
        -                      "selector": {
        -                        "type": "string"
        -                      },
        -                      "value": {
        -                        "description": "Dimension id (from describe_datasource)",
        -                        "type": "string"
        -                      }
        -                    },
        -                    "required": [
        -                      "value"
        -                    ],
        -                    "type": "object"
        -                  },
        -                  "type": "array"
        -                },
        -                "filters": {
        -                  "description": "Row filters",
        -                  "items": {
        -                    "additionalProperties": true,
        -                    "properties": {
        -                      "field": {
        -                        "description": "Metric or dimension id to filter on",
        -                        "type": "string"
        -                      },
        -                      "logicalOperator": {
        -                        "anyOf": [
        -                          {
        -                            "enum": [
        -                              "and",
        -                              "or"
        -                            ],
        -                            "type": "string"
        -                          },
        -                          {
        -                            "type": "null"
        -                          }
        -                        ],
        -                        "description": "How this row joins the previous one — 'and' (default) or 'or'"
        -                      },
        -                      "operator": {
        -                        "description": "Operator id — the valid list per datasource comes from describe_datasource",
        -                        "type": "string"
        -                      },
        -                      "value": {
        -                        "anyOf": [
        -                          {
        -                            "type": "string"
        -                          },
        -                          {
        -                            "type": "number"
        -                          },
        -                          {
        -                            "type": "boolean"
        -                          },
        -                          {
        -                            "items": {},
        -                            "type": "array"
        -                          }
        -                        ],
        -                        "description": "Value to compare against"
        -                      }
        -                    },
        -                    "required": [
        -                      "field",
        -                      "operator",
        -                      "value"
        -                    ],
        -                    "type": "object"
        -                  },
        -                  "type": "array"
        -                },
        -                "metrics": {
        -                  "description": "Metrics to compute over — must belong to the data view",
        -                  "items": {
        -                    "additionalProperties": true,
        -                    "properties": {
        -                      "action_type": {
        -                        "type": "string"
        -                      },
        -                      "custom": {
        -                        "description": "A dynamic per-account metric absent from the static catalog (e.g. a Meta custom conversion)",
        -                        "type": "boolean"
        -                      },
        -                      "data_view": {
        -                        "description": "Data view the metric belongs to; resolved from the catalog when omitted",
        -                        "type": "string"
        -                      },
        -                      "invert_comparison": {
        -                        "description": "Colour a rise as negative — for lower-is-better metrics (cost, CPC, bounce rate)",
        -                        "type": "boolean"
        -                      },
        -                      "label": {
        -                        "description": "Display name — renames the metric on the widget",
        -                        "type": "string"
        -                      },
        -                      "request_metrics": {
        -                        "items": {
        -                          "type": "string"
        -                        },
        -                        "type": "array"
        -                      },
        -                      "selector": {
        -                        "type": "string"
        -                      },
        -                      "summary": {
        -                        "description": "Aggregation for the total: 'SUM', 'AVG', 'MAX', or 'MIN'",
        -                        "enum": [
        -                          "SUM",
        -                          "AVG",
        -                          "MAX",
        -                          "MIN"
        -                        ],
        -                        "type": "string"
        -                      },
        -                      "symbol": {
        -                        "description": "Number format. Numeric: 'number' (plain), 'decimal', 'percent' (or '%'), 'currency' (or '$'). Duration: 's', 'ms', 'time', 'seconds', 'minutes', 'milliseconds'. Passed through unformatted: 'text', 'link', 'date'",
        -                        "enum": [
        -                          "number",
        -                          "decimal",
        -                          "percent",
        -                          "%",
        -                          "currency",
        -                          "$",
        -                          "text",
        -                          "link",
        -                          "date",
        -                          "s",
        -                          "ms",
        -                          "time",
        -                          "seconds",
        -                          "minutes",
        -                          "milliseconds"
        -                        ],
        -                        "type": "string"
        -                      },
        -                      "value": {
        -                        "description": "Metric id (from describe_datasource)",
        -                        "type": "string"
        -                      }
        -                    },
        -                    "required": [
        -                      "value"
        -                    ],
        -                    "type": "object"
        -                  },
        -                  "type": "array"
        -                }
        -              },
        -              "type": "object"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "description": "Required when type is METRIC — the query whose value this token contributes"
        -        },
        -        "type": {
        -          "description": "'METRIC' (a query), 'NUMBER' (a literal), or 'OPERATOR' (an arithmetic symbol)",
        -          "enum": [
        -            "METRIC",
        -            "NUMBER",
        -            "OPERATOR"
        -          ],
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "type"
        -      ],
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "id": {
        +          "description": "Unique token id within the formula, e.g. \"t1\"",
        +          "type": "string"
        +        },
        +        "number": {
        +          "description": "Required when type is NUMBER",
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "operator": {
        +          "anyOf": [
        +            {
        +              "enum": [
        +                "+",
        +                "-",
        +                "*",
        +                "/",
        +                "×",
        +                "÷",
        +                "(",
        +                ")"
        +              ],
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Required when type is OPERATOR. Use × and ÷ for multiply/divide (what the UI writes); the ASCII * and / are also accepted since migrated formulas use them. Grouping: ( and )"
        +        },
        +        "query": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "description": "A builder query: which datasource, view, metrics, dimensions and filters to compute",
        +              "properties": {
        +                "advanced": {
        +                  "additionalProperties": {},
        +                  "description": "Datasource-specific settings — describe_datasource lists required keys per view",
        +                  "type": "object"
        +                },
        +                "data_view": {
        +                  "description": "Data view (from describe_datasource), e.g. ACCOUNT",
        +                  "type": "string"
        +                },
        +                "datasource_id": {
        +                  "description": "Datasource alias, e.g. gadw (from datasources)",
        +                  "enum": [
        +                    "advanced-web-ranking",
        +                    "ac",
        +                    "adroll",
        +                    "ahrefs",
        +                    "basecamp",
        +                    "brightlocal",
        +                    "call-rail",
        +                    "drip",
        +                    "keywords",
        +                    "sendin-blue",
        +                    "sendgrid",
        +                    "moosend",
        +                    "mailer-lite",
        +                    "pingdom",
        +                    "uptime-robot",
        +                    "piwik-pro",
        +                    "wordpress",
        +                    "pabbly-connect",
        +                    "ment",
        +                    "twilio",
        +                    "switchy",
        +                    "vimeo",
        +                    "pinterest",
        +                    "pinterest-ads",
        +                    "gtres",
        +                    "paypal",
        +                    "gps",
        +                    "gs",
        +                    "CUSTOM_IMPORT",
        +                    "CUSTOM_DATA",
        +                    "CALCULATION",
        +                    "GOALS",
        +                    "str",
        +                    "wistia",
        +                    "ca-mon",
        +                    "convertkit",
        +                    "woocommerce",
        +                    "xero",
        +                    "matomo",
        +                    "go-high-level",
        +                    "wcs",
        +                    "bing-webmaster-tools",
        +                    "pipedrive",
        +                    "salesforce",
        +                    "tiktok",
        +                    "tiktok-ads",
        +                    "twr",
        +                    "twr-ads",
        +                    "spf",
        +                    "ytbe",
        +                    "google-local-services-ads",
        +                    "klaviyo",
        +                    "gsh",
        +                    "ga4",
        +                    "lkdin-ads",
        +                    "lkdin-pg",
        +                    "mlchmp",
        +                    "inst-ads",
        +                    "inst",
        +                    "fb-ads",
        +                    "fb-pg",
        +                    "gmb",
        +                    "serpstat",
        +                    "hubspot",
        +                    "gadw",
        +                    "sem-rush",
        +                    "se-ranking",
        +                    "microsoft-ads",
        +                    "plausible",
        +                    "snapchat-ads",
        +                    "amazon-advertising",
        +                    "microsoft-clarity",
        +                    "serp-watch",
        +                    "vbout",
        +                    "moz",
        +                    "chatgpt-ads",
        +                    "omnisend",
        +                    "airtable",
        +                    "nozzle",
        +                    "demo"
        +                  ],
        +                  "type": "string"
        +                },
        +                "dimensions": {
        +                  "description": "Breakdown dimensions, e.g. [{ value: \"DATE\" }]",
        +                  "items": {
        +                    "additionalProperties": true,
        +                    "properties": {
        +                      "custom": {
        +                        "description": "A dynamic dimension absent from the static catalog",
        +                        "type": "boolean"
        +                      },
        +                      "data_view": {
        +                        "description": "Data view the dimension belongs to; filled from the catalog when omitted",
        +                        "type": "string"
        +                      },
        +                      "label": {
        +                        "description": "Display name — renames the dimension on the widget",
        +                        "type": "string"
        +                      },
        +                      "selector": {
        +                        "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true",
        +                        "type": "string"
        +                      },
        +                      "value": {
        +                        "description": "Dimension id (from describe_datasource)",
        +                        "type": "string"
        +                      }
        +                    },
        +                    "required": [
        +                      "value"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "type": "array"
        +                },
        +                "filters": {
        +                  "description": "Row filters",
        +                  "items": {
        +                    "additionalProperties": true,
        +                    "properties": {
        +                      "field": {
        +                        "description": "Metric or dimension id to filter on",
        +                        "type": "string"
        +                      },
        +                      "logicalOperator": {
        +                        "anyOf": [
        +                          {
        +                            "enum": [
        +                              "and",
        +                              "or"
        +                            ],
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "null"
        +                          }
        +                        ],
        +                        "description": "How this row joins the previous one — 'and' (default) or 'or'"
        +                      },
        +                      "operator": {
        +                        "description": "Operator id — the valid list per datasource comes from describe_datasource",
        +                        "type": "string"
        +                      },
        +                      "value": {
        +                        "anyOf": [
        +                          {
        +                            "type": "string"
        +                          },
        +                          {
        +                            "type": "number"
        +                          },
        +                          {
        +                            "type": "boolean"
        +                          },
        +                          {
        +                            "items": {},
        +                            "type": "array"
        +                          }
        +                        ],
        +                        "description": "Value to compare against"
        +                      }
        +                    },
        +                    "required": [
        +                      "field",
        +                      "operator",
        +                      "value"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "type": "array"
        +                },
        +                "metrics": {
        +                  "description": "Metrics to compute over — must belong to the data view",
        +                  "items": {
        +                    "additionalProperties": true,
        +                    "properties": {
        +                      "action_type": {
        +                        "description": "Meta/Instagram action-based metrics only (actions, conversions, cost_per_action_type…) — the action key the value is read under. Filled from the catalog — only send it with custom: true",
        +                        "type": "string"
        +                      },
        +                      "custom": {
        +                        "description": "A dynamic per-account metric absent from the static catalog (e.g. a Meta custom conversion)",
        +                        "type": "boolean"
        +                      },
        +                      "data_view": {
        +                        "description": "Data view the metric belongs to; resolved from the catalog when omitted",
        +                        "type": "string"
        +                      },
        +                      "invert_comparison": {
        +                        "description": "Colour a rise as negative — for lower-is-better metrics (cost, CPC, bounce rate)",
        +                        "type": "boolean"
        +                      },
        +                      "label": {
        +                        "description": "Display name — renames the metric on the widget",
        +                        "type": "string"
        +                      },
        +                      "request_metrics": {
        +                        "description": "The upstream vendor field(s) this metric is built from. Filled from the catalog — only send it with custom: true",
        +                        "items": {
        +                          "type": "string"
        +                        },
        +                        "type": "array"
        +                      },
        +                      "selector": {
        +                        "description": "Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true, copying what describe_datasource reports",
        +                        "type": "string"
        +                      },
        +                      "summary": {
        +                        "description": "Aggregation for the total: 'SUM', 'AVG', 'MAX', or 'MIN'",
        +                        "enum": [
        +                          "SUM",
        +                          "AVG",
        +                          "MAX",
        +                          "MIN"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      "symbol": {
        +                        "description": "Number format. Numeric: 'number' (plain), 'decimal', 'percent' (or '%'), 'currency' (or '$'). Duration: 's', 'ms', 'time', 'seconds', 'minutes', 'milliseconds'. Passed through unformatted: 'text', 'link', 'date'",
        +                        "enum": [
        +                          "number",
        +                          "decimal",
        +                          "percent",
        +                          "%",
        +                          "currency",
        +                          "$",
        +                          "text",
        +                          "link",
        +                          "date",
        +                          "s",
        +                          "ms",
        +                          "time",
        +                          "seconds",
        +                          "minutes",
        +                          "milliseconds"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      "value": {
        +                        "description": "Metric id (from describe_datasource)",
        +                        "type": "string"
        +                      }
        +                    },
        +                    "required": [
        +                      "value"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "type": "array"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Required when type is METRIC — the query whose value this token contributes"
        +        },
        +        "type": {
        +          "description": "'METRIC' (a query), 'NUMBER' (a literal), or 'OPERATOR' (an arithmetic symbol)",
        +          "enum": [
        +            "METRIC",
        +            "NUMBER",
        +            "OPERATOR"
        +          ],
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "id",
        +        "type"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "string"
        +  }
        +]
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedupdate_calculated_metric_widget6 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / id
        Removed value: -{
        -  "description": "Widget ID (from list_widgets).",
        -  "type": "string"
        -}
      • addedInput schema / properties / widget_id
        Added value: +{
        +  "description": "Widget ID (from list_widgets).",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "id"
        -]New value: +[
        +  "widget_id"
        +]
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedupdate_client3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedupdate_company3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedupdate_custom_data3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedupdate_custom_data_widget6 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / id
        Removed value: -{
        -  "description": "Widget ID (from list_widgets).",
        -  "type": "string"
        -}
      • addedInput schema / properties / widget_id
        Added value: +{
        +  "description": "Widget ID (from list_widgets).",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "id"
        -]New value: +[
        +  "widget_id"
        +]
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedupdate_data_widget10 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / properties / dimensions / items / properties / selector / description
        Added value: +"Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true"
      • removedInput schema / properties / id
        Removed value: -{
        -  "description": "Widget ID (from list_widgets).",
        -  "type": "string"
        -}
      • addedInput schema / properties / metrics / items / properties / action_type / description
        Added value: +"Meta/Instagram action-based metrics only (actions, conversions, cost_per_action_type…) — the action key the value is read under. Filled from the catalog — only send it with custom: true"
      • addedInput schema / properties / metrics / items / properties / request_metrics / description
        Added value: +"The upstream vendor field(s) this metric is built from. Filled from the catalog — only send it with custom: true"
      • addedInput schema / properties / metrics / items / properties / selector / description
        Added value: +"Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true, copying what describe_datasource reports"
      • addedInput schema / properties / widget_id
        Added value: +{
        +  "description": "Widget ID (from list_widgets).",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "id"
        -]New value: +[
        +  "widget_id"
        +]
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Removedupdate_email_sender
    • Removedupdate_email_template
    • Changedupdate_embed_widget6 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / id
        Removed value: -{
        -  "description": "Widget ID (from list_widgets).",
        -  "type": "string"
        -}
      • addedInput schema / properties / widget_id
        Added value: +{
        +  "description": "Widget ID (from list_widgets).",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "id"
        -]New value: +[
        +  "widget_id"
        +]
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedupdate_folder3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedupdate_goal7 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / properties / query / properties / dimensions / items / properties / selector / description
        Added value: +"Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true"
      • addedInput schema / properties / query / properties / metrics / items / properties / action_type / description
        Added value: +"Meta/Instagram action-based metrics only (actions, conversions, cost_per_action_type…) — the action key the value is read under. Filled from the catalog — only send it with custom: true"
      • addedInput schema / properties / query / properties / metrics / items / properties / request_metrics / description
        Added value: +"The upstream vendor field(s) this metric is built from. Filled from the catalog — only send it with custom: true"
      • addedInput schema / properties / query / properties / metrics / items / properties / selector / description
        Added value: +"Where the value is read from in the vendor response. Filled from the catalog — only send it with custom: true, copying what describe_datasource reports"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedupdate_goal_widget6 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / id
        Removed value: -{
        -  "description": "Widget ID (from list_widgets).",
        -  "type": "string"
        -}
      • addedInput schema / properties / widget_id
        Added value: +{
        +  "description": "Widget ID (from list_widgets).",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "id",
        -  "goal_id"
        -]New value: +[
        +  "widget_id",
        +  "goal_id"
        +]
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedupdate_image_widget6 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / id
        Removed value: -{
        -  "description": "Widget ID (from list_widgets).",
        -  "type": "string"
        -}
      • addedInput schema / properties / widget_id
        Added value: +{
        +  "description": "Widget ID (from list_widgets).",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "id"
        -]New value: +[
        +  "widget_id"
        +]
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Removedupdate_media_folder
    • Changedupdate_my_avatar3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedupdate_my_profile3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Removedupdate_notification_preferences
    • Changedupdate_page4 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedInput schema / properties / position / description
        Previous value: -"Reorder the page to this position"New value: +"Move the page to this position, 0-based. The pages it moves past shift to close the gap"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedupdate_report6 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / id
        Removed value: -{
        -  "description": "Report ID (from list_reports)",
        -  "type": "string"
        -}
      • addedInput schema / properties / report_id
        Added value: +{
        +  "description": "Report ID (from list_reports)",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "id"
        -]New value: +[
        +  "report_id"
        +]
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedupdate_static_value_widget6 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / id
        Removed value: -{
        -  "description": "Widget ID (from list_widgets).",
        -  "type": "string"
        -}
      • addedInput schema / properties / widget_id
        Added value: +{
        +  "description": "Widget ID (from list_widgets).",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "id",
        -  "value"
        -]New value: +[
        +  "widget_id",
        +  "value"
        +]
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedupdate_template3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedupdate_text_widget7 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / id
        Removed value: -{
        -  "description": "Widget ID (from list_widgets).",
        -  "type": "string"
        -}
      • changedInput schema / properties / text / description
        Previous value: -"New plain-text content. Replaces existing."New value: +"Body text. Markdown is rendered: # / ## / ### headings, - and 1. lists, **bold**, *italic*, ~~strike~~, `code`, > quotes, ``` fences and [links](url). Plain prose works too — it becomes paragraphs. Replaces the existing content entirely."
      • addedInput schema / properties / widget_id
        Added value: +{
        +  "description": "Widget ID (from list_widgets).",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "id",
        -  "text"
        -]New value: +[
        +  "widget_id",
        +  "text"
        +]
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedupdate_theme5 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / cover_page / properties / widgets
        Removed value: -{
        -  "items": {},
        -  "type": "array"
        -}
      • removedInput schema / properties / thank_you_page / properties / widgets
        Removed value: -{
        -  "items": {},
        -  "type": "array"
        -}
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedupdate_title_widget6 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / id
        Removed value: -{
        -  "description": "Widget ID (from list_widgets).",
        -  "type": "string"
        -}
      • addedInput schema / properties / widget_id
        Added value: +{
        +  "description": "Widget ID (from list_widgets).",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "id"
        -]New value: +[
        +  "widget_id"
        +]
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Changedupdate_user3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / properties / success / description
        Previous value: -"True when the call succeeded. A failure comes back as an error result instead."New value: +"True when the call succeeded."
    • Removedverify_email_domain
    • Addedwhoami
  9. 188 tool updates
    • First observedadd_asset_to_page
    • First observedadd_button_widget
    • First observedadd_calculated_metric_widget
    • First observedadd_custom_data_widget
    • First observedadd_data_widget
    • First observedadd_domain
    • First observedadd_email_domain
    • First observedadd_embed_widget
    • First observedadd_goal_widget
    • First observedadd_image_widget
    • First observedadd_report_section
    • First observedadd_static_value_widget
    • First observedadd_text_widget
    • First observedadd_title_widget
    • First observedarchive_asset
    • First observedarchive_automation
    • First observedarchive_calculated_metric
    • First observedarchive_client
    • First observedarchive_clients
    • First observedarchive_custom_data
    • First observedarchive_export
    • First observedarchive_goal
    • First observedarchive_media_file
    • First observedarchive_media_files
    • First observedarchive_notification
    • First observedarchive_notifications
    • First observedarchive_report
    • First observedarchive_reports
    • First observedarchive_template
    • First observedarchive_theme
    • First observedaudit_report_health
    • First observedchange_my_email
    • First observedchange_report_date_range
    • First observedclear_read_notifications
    • First observedconnected_datasources
    • First observedcount_clients
    • First observedcount_unread_notifications
    • First observedcreate_asset
    • First observedcreate_automation
    • First observedcreate_calculated_metric
    • First observedcreate_client
    • First observedcreate_client_with_report
    • First observedcreate_connection
    • First observedcreate_custom_data
    • First observedcreate_email_sender
    • First observedcreate_email_template
    • First observedcreate_folder
    • First observedcreate_goal
    • First observedcreate_media_folder
    • First observedcreate_page
    • First observedcreate_report
    • First observedcreate_report_from_template
    • First observedcreate_template
    • First observedcreate_theme
    • First observeddatasource_resources
    • First observeddatasources
    • First observeddelete_api_key
    • First observeddelete_connection
    • First observeddelete_email_sender
    • First observeddelete_email_template
    • First observeddelete_folder
    • First observeddelete_media_folder
    • First observeddelete_notification_channel
    • First observeddelete_page
    • First observeddelete_widget
    • First observeddelete_widgets
    • First observeddescribe_datasource
    • First observedduplicate_asset
    • First observedduplicate_calculated_metric
    • First observedduplicate_custom_data
    • First observedduplicate_goal
    • First observedduplicate_report
    • First observedgenerate_company_palette
    • First observedgenerate_pdf
    • First observedget_account
    • First observedget_account_usage
    • First observedget_archive_counts
    • First observedget_asset
    • First observedget_automation_history
    • First observedget_billing
    • First observedget_branding
    • First observedget_client
    • First observedget_company
    • First observedget_current_user
    • First observedget_custom_data
    • First observedget_email_provider
    • First observedget_email_template
    • First observedget_notification_preferences
    • First observedget_pdf_status
    • First observedget_report
    • First observedget_template
    • First observedget_theme
    • First observedget_widget
    • First observedget_widget_data
    • First observedinvite_user
    • First observedlink_datasource
    • First observedlist_activity
    • First observedlist_api_keys
    • First observedlist_archive
    • First observedlist_asset_tags
    • First observedlist_asset_widgets
    • First observedlist_assets
    • First observedlist_automations
    • First observedlist_calculated_metrics
    • First observedlist_clients
    • First observedlist_custom_data
    • First observedlist_domains
    • First observedlist_email_domains
    • First observedlist_email_logs
    • First observedlist_email_senders
    • First observedlist_email_templates
    • First observedlist_exports
    • First observedlist_folders
    • First observedlist_goals
    • First observedlist_invoices
    • First observedlist_media
    • First observedlist_media_folders
    • First observedlist_notification_channels
    • First observedlist_notifications
    • First observedlist_pages
    • First observedlist_reports
    • First observedlist_template_widgets
    • First observedlist_templates
    • First observedlist_themes
    • First observedlist_users
    • First observedlist_widgets
    • First observedmark_notifications_read
    • First observedmove_client_to_folder
    • First observedmove_media_to_folder
    • First observedmove_widget
    • First observedpause_automation
    • First observedrefresh_account_favicon
    • First observedrefresh_client_favicon
    • First observedrefresh_client_screenshot
    • First observedrefresh_report
    • First observedrefresh_widgets
    • First observedremove_account_favicon
    • First observedremove_account_logo
    • First observedremove_client_favicon
    • First observedremove_client_logo
    • First observedremove_domain
    • First observedremove_email_domain
    • First observedremove_user
    • First observedrename_connection
    • First observedrename_media_file
    • First observedrestore_from_archive
    • First observedrevoke_api_key
    • First observedsearch
    • First observedsend_email
    • First observedset_default_email_sender
    • First observedset_default_email_template
    • First observedset_email_provider
    • First observedset_notification_channel
    • First observedtest_automation
    • First observedtest_connection
    • First observedunlink_datasource
    • First observedunpause_automation
    • First observedupdate_asset
    • First observedupdate_automation
    • First observedupdate_branding
    • First observedupdate_button_widget
    • First observedupdate_calculated_metric
    • First observedupdate_calculated_metric_widget
    • First observedupdate_client
    • First observedupdate_company
    • First observedupdate_custom_data
    • First observedupdate_custom_data_widget
    • First observedupdate_data_widget
    • First observedupdate_email_sender
    • First observedupdate_email_template
    • First observedupdate_embed_widget
    • First observedupdate_folder
    • First observedupdate_goal
    • First observedupdate_goal_widget
    • First observedupdate_image_widget
    • First observedupdate_media_folder
    • First observedupdate_my_avatar
    • First observedupdate_my_profile
    • First observedupdate_notification_preferences
    • First observedupdate_page
    • First observedupdate_report
    • First observedupdate_static_value_widget
    • First observedupdate_template
    • First observedupdate_text_widget
    • First observedupdate_theme
    • First observedupdate_title_widget
    • First observedupdate_user
    • First observedverify_email_domain

Publisher details

Operator
Oviond · Publisher source
Operator website
https://oviond.com
Vendor relationship
First-party · Publisher source
Restrictions
Requires an Oviond account. The platform is subscription-based with a free trial available at oviond.com. No admin approval, no regional limits, and no custom OAuth app required. The MCP server acts on your own Oviond workspace, so it is only useful with an active account and at least one client or project set up. · Publisher source

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides AI agents with unified marketing toolkits for SEO, GEO, paid media, and analytics, enabling audits, analysis, and approved changes across GA4, Search Console, Google Ads, Meta, X, LinkedIn, Reddit, TikTok, WordPress, and GoHighLevel.
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Cross-source attribution across 37+ business tools. True ROAS in 14 seconds. Not a dashboard. A decision.
    22
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables advertising and marketing agencies to query and manage their agency data in natural language through the official public API, reading the complete financial module (bank accounts, payables and receivables, service invoices with withheld taxes) and extracting logged hours down to person, department and piece. It also creates and updates jobs, catalog pieces, tasks and production checklist items.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources